Membuat kolom di PostGIS menggunakan tag hstore osm2pgsql

8

Meskipun saya merasa ini mungkin mengarah ke pertanyaan basis data, rasanya cukup terkait SIG sehingga saya merasa nyaman mempostingnya di sini. Saya akan dengan senang hati membawanya ke tempat lain jika itu milik di sana!

Saya telah memulai perjalanan yang sulit untuk mengatur data OSM agar bekerja dalam format RDBMS yang bermanfaat bagi saya. Salah satu masalah utama yang saya temui adalah tipe data hstore. Meskipun cukup berguna untuk bisa memegang kamus nilai yang sangat besar, mereka sulit untuk "dipahami", dalam pengalaman saya. Secara khusus, alat osm2pgsql menciptakan addr:flats,, addr:housenumberdan addr:interpolationbidang, tetapi mengabaikan beberapa yang cukup jelas bagi saya, seperti kota, kode pos, dan jalan. Saya ingin mengurai data ini untuk mengisi kolom baru dengannya. Metode apa yang akan Anda rekomendasikan untuk mengakses data seperti itu?

Terima kasih

Nathanus
sumber

Jawaban:

7

Anda dapat mentransfer data kunci / nilai hstore yang diinginkan ke kolom baru:
1-Buat kolom yang diinginkan (mis. Alamat tambahan, kota, key1, key2, keyn)
2-Run:

UPDATE table 
SET 
address=hstorecolumn->'address',
city=hstorecolumn->'city',
key1=hstorecolumn->'key1',
key2=hstorecolumn->'key2',
keyn=hstorecolumn->'keyn';

Atau Anda bisa membiasakan diri dengan hstore, itu bekerja dengan cukup baik dan saya memiliki begitu banyak hasil yang baik sehingga saya bisa mengatakan IMO "hstore mengubah hidup saya". lol

EDIT:
Contoh tentang cara menggunakan hstore:
SELECT
streetdatatable.hstoredatacolumn -> 'address',
streetdatatable.hstoredatacolumn -> 'city'
FROM someschema. streetdatatable

Ini akan menampilkan semua nilai alamat dan kota.

Pablo
sumber
Saya suka hstore sebagai tipe data (kamus adalah teman terbaik Anda), tetapi itu tidak cocok dengan ESRI, jadi tipe data kolom lama yang normal harus dilakukan.
Nathanus
Ini sepertinya persis apa yang saya cari, tetapi apa yang akan saya ganti hstorecolumn? Juga, dalam DB saya, pasangan nilai kunci digabungkan dengan =>, bukan ->. Apakah ini masalah?
Nathanus
hai, kolom hstorec adalah nama kolom dengan data hstore. -> adalah notasi untuk memanggil nilai dari kunci di hstore, dengan cara ini: kolom -> 'kunci' dan mengembalikan nilai, oh, Anda perlu kutip tunggal. Saya mengedit jawaban dengan contoh lain.
Pablo
Itu jauh lebih masuk akal. Terima kasih atas klarifikasi.
Nathanus