Saya sedang menulis shapefile menggunakan OGR dalam python, membuat bidang on-the-fly dari sumber data python. Pembuatan bidang baru membutuhkan tipe data OGR, apakah ada pemetaan antara tipe data OGR dan python?
Sebagai contoh, ini akan menjadi norma:
new_field = ogr.FieldDefn('MYFLD', ogr.OFTInteger)
Idealnya:
ogr_datatype = get_ogr_data_type(python_data)
new_field = ogr.FieldDefn('MYFLD', ogr_datatype)
Saat ini konversi saya menggunakan kode keras (mis. Int = ogr.OFTInteger), tetapi ini sedikit menyusahkan dan bergantung pada saya untuk mengkode semua tipe data yang mungkin.
Jawaban:
Anda harus membuat kamus jenis Python ke "jenis" OGR karena hanya berupa int. Ini agak menyusahkan, saya beri Anda, tetapi OGR (dan binding yang dihasilkan SWIG) tidak memiliki gagasan tentang jenis bahasa apakah itu dalam C atau Python.
Sesuatu seperti ini seharusnya bekerja:
sumber
Untuk apa nilainya, saya punya paket Python yang berisi pemetaan seperti itu. Lihat https://github.com/Toblerity/Fiona/blob/master/src/fiona/ogrext.pyx#L18 . Disalin di sini:
Pemetaan saya tidak lengkap karena saya tidak mengalami banyak bidang Daftar OFT * di alam. Anda ingin memetakan ini ke array Python, saya kira (OFTIntegerList -> array ('i') misalnya) karena daftar Python tidak diketik. Bidang OFTDate / Time adalah iblis dan pemetaan ini ke Python DateTime tidak membuat situasi lebih baik karena API modul datetime mengerikan. Dalam proyek saya, saya akan memetakan tanggal dan waktu ke string ISO 8601 seperti "2012-01-02T20: 59: 38Z". Data biner mentah akan dipetakan ke string Python non-unicode (yang menjadi tipe byte di Python 3).
sumber
Jika sasaran Anda hanyalah pengeditan shapefile dengan Python, periksa PyShp:
http://code.google.com/p/pyshp/
Ini python murni sehingga Anda hanya menggunakan tipe data python. Saya juga punya contoh geometri umum dan operasi atribut di GeospatialPython.com
sumber