Geocoding ke bentuk, bukan titik
Proyek yang sedang saya kerjakan adalah Find-A-Record . Kami membuat geocoding koleksi catatan silsilah dan menyimpannya dalam indeks spasial (telusuri blog kami jika Anda ingin tahu lebih banyak). Pencarian didasarkan pada bentuk. Kami mengembalikan koleksi yang berpotongan atau terdapat di dalam area pencarian.
Selama kondisi awal pengembangan, kami menggunakan geonames untuk membuat geocode koleksi ke suatu titik. Ini berfungsi dengan baik untuk koleksi yang terkait dengan tingkat administrasi yang lebih rendah seperti kota, kota, dan desa. Namun itu benar-benar rusak ketika Anda mendapatkan tingkat kabupaten, negara bagian, dan negara.
Sensus AS 1940 dikaitkan dengan Amerika Serikat dan akan ditugaskan di Kansas Utara. Pertanyaan apa pun di AS yang tidak mendekati titik itu tidak akan mengembalikan Sensus AS 1940.
Untuk mengatasi ini, kita perlu membuat geocode koleksi dengan bentuk, bukan titik.
OSM
OpenStreetMaps memiliki data yang kami butuhkan, tetapi sangat sulit untuk diekstraksi. Hirarki administratif tidak disimpan secara eksplisit. Nominatim digunakan untuk menyelesaikan masalah ini untuk OSM, pencarian Nominatim hanya mengembalikan fitur. Jadi permintaan untuk Knighton on Teme mengembalikan dua halte tetapi bukan hubungan batas administratif.
The Overpass API tampak menjanjikan tetapi tidak bisa melakukan pertandingan string yang kabur. Jalan layang hanya dapat melakukan pencocokan tepat atau regex. Kita bisa menggunakan Jalan layang jika ada cara mudah untuk membakukan nama tempat. Dengan kata lain, jika OSM menyediakan cara bagi kita untuk membakukan "Knighton on Teme, Worcestershire, Inggris" menjadi "Knighton on Teme CP, Malvern Hills, Worcesterhire, West Midlands, Inggris, Inggris" menurut hierarki OSM kemudian hirarki string pencocokan tidak diperlukan.
Ringkasan
Yang kami butuhkan adalah layanan yang memungkinkan kami melakukan pencarian string fuzzy untuk suatu tempat (atau tingkat administratif) dan mengambil batas-batasnya.
Kami menyadari bahwa akan sulit untuk mendapatkan data batas untuk seluruh dunia. Untungnya kami mungkin tidak perlu melakukannya dalam waktu dekat. Kami hanya membutuhkan data untuk area di dunia di mana catatan silsilah ada dan silsilah melakukan penelitian.
Sepertinya kami perlu membangun layanan kami sendiri yang mengindeks OSM sedemikian rupa yang memungkinkan kami untuk menanyakan batasan administratif. Tapi kami lebih suka tidak melakukannya. Apakah ada cara lain untuk mengambil data ini dengan layanan yang ada?
Saya juga bekerja dengan data nama tempat dan batas global (termasuk historis) saat ini, jadi saya mengerti apa yang Anda alami!
Namun, saya pikir benar-benar ada dua langkah untuk masalah Anda: 1. menggunakan pencarian nama fuzzy untuk mengubah nama area admin menjadi sesuatu yang standar, kemudian 2. mencari batas-batas tempat itu di database batas. Daripada mencoba mencari data yang juga memiliki pencarian fuzzy.
WeRelate Places mungkin membantu dengan langkah 1 untuk nama-nama tempat lama, dan banyak geocoder lain seperti yang sudah Anda gunakan dapat membakukan nama-nama modern.
Langkah 2 benar-benar sulit saat ini, karena sebagian besar data batas yang sesuai berada di bawah lisensi non-komersial (atau lebih buruk), terutama untuk data historis. Titik awal untuk tingkat negara dan admin 1 adalah Bumi Alami .
Lalu ada sumber-sumber berbasis nasional untuk divisi admin yang lebih rendah, yang diekstraksi dari data pemerintah terbuka, seperti USGeoJSON dan uk-atlas . Tidak ada yang saya sadari benar-benar global dalam ruang lingkup.
Berhati-hatilah untuk melacak asal data dan lisensi, pembatasan non-komersial sangat umum, misalnya untuk GADM , Visi Inggris , dan (AS) Atlas Batas Wilayah Historis .
sumber
Kueri Nominatim Anda mencakup
place_id
bidang yang memiliki nilai 4828147 dalam contoh Anda. Bidang ini berfungsi sebagai pengidentifikasi internal untuk Nominatim (sehingga tidak unik secara global). Tetapi ini dapat digunakan untuk melihat hierarki alamat internal Nominatim untuk tempat ini . Hirarki ini juga berisi hubungan batas, misalnya hubungan 1875245 dan beberapa lainnya.Dengan menelusuri daftar ini dan melihat
admin_level
kunci, Anda harus menemukan relasi yang Anda cari. Sayangnya halaman khusus ini tampaknya belum tersedia melalui API.sumber