Bekerja dengan atribut JSON yang kompleks di QGIS

7

Saya seorang pengembang dan memiliki alat yang menghasilkan aset geojson untuk tim data kami untuk bekerja dengan menggunakan aplikasi QGIS. Karena sumber asli data, fitur ini memiliki beberapa atribut yang direpresentasikan sebagai data hierarkis yang kompleks, tidak mungkin diproyeksikan ke skema datar.

Kita harus dapat melihat / mengedit bidang atribut sebagai gumpalan JSON secara efektif, alih-alih string literal.

Fasilitas apa yang tersedia untuk melakukan ini di QGIS? Apakah ada plugin pengeditan bidang yang akan mendukung pekerjaan seperti itu? Idealnya beberapa jenis editor JSON popup dengan validasi format dokumen dan node yang dapat dilipat, mirip dengan cara kerja editor Visual Studio (Code).

Atau beberapa alur kerja lain yang memungkinkan kami untuk mengelola data ini dalam alat eksternal dan menyuntikkan kembali ke fitur sumber.

UPDATE: Got Postgres berputar dan membuat kolom JSON dari kolom teks yang ada yang berisi JSON. QGIS menyembunyikannya di tabel atribut. Adakah rekomendasi lebih lanjut tentang bekerja dengan atribut JSON langsung di DB?

Tristan Rhodes
sumber
1
Kedengarannya seperti pekerjaan untuk postgres dengan dukungan JSON postgresql.org/docs/9.4/static/datatype-json.html
Mapperz
Memang melihat Postgres, tidak yakin bagaimana itu akan berintegrasi dengan editor QGIS, tetapi akan menjadi situasi yang ideal untuk bekerja dengan, semuanya terpusat.
Tristan Rhodes
Saya juga tertarik dengan ini, tetapi saya belum melihat apa pun yang memfasilitasi ini di QGIS. SQLite juga memiliki dukungan untuk JSON, omong-omong: sqlite.org/json1.html
arjan
Bukan penyimpanan itu masalahnya, itu editor. Kami secara efektif memiliki tim insinyur data yang membersihkan file geojson dan meneruskannya kepada kami. Saya akan senang memiliki ini didukung oleh database, tetapi kita masih membutuhkan dukungan editor yang kaya agar ini dapat digunakan. Mungkin baru belajar Python dan menulis sebuah plugin :)
Tristan Rhodes
@TristanRhodes Jika Anda menulis plugin (atau temukan solusi lain), beri tahu kami!
arjan

Jawaban:

2

Dalam versi QGIS terbaru (> 3.3), jika Anda memiliki bidang JSON dalam database PostgreSQL, Anda dapat menggunakan map_getfungsi di mana saja dengan Dialog Ekspresi untuk mengekstraksi nilai tertentu.

Misalnya jika Anda memiliki bidang JSON yang dipanggil "extraData"dan isinya adalah:

{ 
        "param1": "Some string",
        "param2": "Another string"
}

maka map_get(extraData,'param1')akan menghasilkanSome string

Saya kira (meskipun saya belum mencobanya) Anda dapat secara rekursif menggunakan fungsi untuk mengambil nilai yang sangat bersarang.

Ada fungsi lain seperti from_jsonfungsi yang mengembalikan seluruh konten. Lihatlah bagian Peta di dalam Dialog Ekspresi.

TheVRChris
sumber
1

Misalkan kita memiliki bidang / kolom yang disebut ' lokasi ' dengan konten / nilai berikut (ini adalah string tetapi memiliki json struct) ke dalam QGIS:

{
    "address": "A-319, Hornos, Jaén, Andalusia, 23292, Spain",
    "continent": "Europe",
    "country": "Spain",
    "region": "Andalucía",
    "subregion": "Jaén"
}

dan Anda ingin akses ke properti 'subregion', jadi ungkapan:

map_get(json_to_map("location"),'subregion')

akan mengembalikan 'Jaén'

Diuji dengan basis data geopackage.

Juanma Font
sumber