Saya mencoba membuat layer shapefile berdasarkan proyeksi spasial dari raster yang sudah ada. (Pada akhirnya, ini akan digunakan di gdal.Polygonize untuk mendapatkan bentuk dari data raster saya.) Namun, saya menghadapi kesalahan ketika mencoba menggunakan CreateLayer.
- raster_uri- lokasi file raster yang ingin saya buat menjadi shapefile. Saya tahu ini ada.
- out_uri- Lokasi Saya ingin cetakan baru untuk dicetak.
- layer_name- Input nama lapisan.
- diajukan_name- Masukan nama bidang string.
Ini adalah kode yang saya gunakan.
raster = gdal.Open(raster_uri)
driver = ogr.GetDriverByName("ESRI Shapefile")
ds = driver.CreateDataSource(out_uri)
spat_ref = osr.SpatialReference()
proj = raster.GetProjectionRef()
spat_ref.ImportFromWkt(proj)
layer = ds.CreateLayer(layer_name, spat_ref, ogr.wkbPolygon)
Ini menghasilkan pesan kesalahan ini:
TypeError: in method 'DataSource_CreateLayer', argument 2 of type 'char const *'
Mengeluarkan tipe spat_ref muncul <class 'osgeo.osr.SpatialReference'>
jadi saya tidak yakin apa yang dikeluhkan oleh char const *.
Menariknya, jika saya mencoba melakukan ini semua dari shell python menggunakan file yang sama, layer akan baik-baik saja. Ada ide tentang apa yang mungkin menjadi masalah?
Menggali lebih dalam tentang masalah ini saya menemukan jawaban SO ini yang memberikan solusi untuk masalah yang saya alami.
Tampaknya, dalam kasus Anda di sini, Anda
layer_name
berisi beberapa karakter Unicode , yang tidak dapat dikonversi secara sepele menjadi 'char const *', dan alasan mengapa Anda mendapatkan pengecualian.Inilah sebabnya mengapa solusi yang diusulkan dalam jawaban yang diterima berfungsi, karena mengubah itu pengkodean ke string byte UTF-8, yang dapat dengan mudah dikonversi ke 'char const *' (kebetulan, yang juga disarankan dalam jawaban lain pada SO yang sama pos).
Apa yang berhasil bagi saya sebagai alternatif adalah dengan hanya melemparkan Anda
layer_name
ke string dengan melakukan:sumber