geolonia / community-geocoder

Open Source and Free GeoCoding API in Japan
MIT License
180 stars 26 forks source link

町丁目文字列がない getLatLng のコールバックファンクションに渡される JSON の lat , lng が常時 null #124

Closed technokuro closed 2 years ago

technokuro commented 3 years ago

@miya0001 https://github.com/geolonia/community-geocoder/issues/122 上記 issue ではお手数をおかけしました。

現在は 404 は発生しませんでしたが、町丁目を含まない文字列(都道府県・市区町村のみ)でのgetLatLng のコールバック function に渡される JSON の lat, lng が常時 null となっています。

addr: "" city: "さいたま市南区" lat: null level: 2 lng: null pref: "埼玉県" town: ""

こちらは仕様でしょうか? 以前はこのリクエストでも緯度、経度が取得できました。

miya0001 commented 3 years ago

あああ、バグっぽいですね。ご報告ありがとうございます!

technokuro commented 3 years ago

https://github.com/geolonia/normalize-japanese-addresses/blob/61003a1b36cd7165bc0f9fa2af34e9065b565ef0/src/main.ts#L164

normalizeTownName において、addr が pref + city の完全一致のみであり、 match せず、 https://github.com/geolonia/normalize-japanese-addresses/blob/master/src/main.ts#L163 が false になると、lat lng が未設定のまま処理を終了するのは、 https://github.com/geolonia/community-geocoder#%E4%BB%95%E7%B5%84%E3%81%BF に記載の仕様に合致しないこととなると思いました。

暫定措置として、以下プルリク作成をもってご提案いたします。 https://github.com/geolonia/normalize-japanese-addresses/pull/119

miya0001 commented 2 years ago

過去のバージョンでは、住所を判別できなかった場合に、都道府県及び市区町村のポリゴンを取得し返却していました。

ところが、この都道府県及び市区町村ポリゴンに、国勢調査のデータを使っていたため、データの更新サイクルが住所データとシンクロしないという現象が発生し、たとえば住所マスターに新しい地名が追加されたけど、それに該当する地名データが国勢調査データに存在していないという状態になっています。 (国勢調査は5年に1回のみであるため。)

一方で、住所データの精度と鮮度が改善され、新しい地名に構造的にも対応しやすくなっています。

この問題に関しましては、ちょっと検討に時間がかかっておりますので、恐縮ですがしばらくお待ち下さい。

technokuro commented 2 years ago

@miya0001 リアクションありがとうございます。 https://github.com/geolonia/get-geolonia/pull/28 上記の機能を、本リソースへの取り込みを切に願います。

どうぞ継続ご検討よろしくお願いします。

champierre commented 2 years ago

@technokuro 旧 community-geocoder では内部で、経済産業省の IMI ツールを使用していたのですが、IMI ツールがアーカイブされる & 精度が低い、ということで新しいバージョンでは、@geolonia/normalize-japanese-addresses を使うようにしました。normalize-japanese-addresses は、住所を正規化し、完全に正規化できたときにだけ緯度・経度を返すという役割なので、町丁目を含まない文字列の場合は lat と lng は null となってしまいます。

正規化が不完全な場合の処理については、アプリケーション側で実装していただきたく、その際には、以下リンク先の app.js の該当部分が参考になるかと思います。

https://github.com/geolonia/community-geocoder/blob/master/src/app.js#L51

できれば、community-geocoder あるいは normalize-japanese-addresses 側でその処理を持つようにして、ユーザーの手間をなくしたいとは思うのですが、緯度・経度情報を十分な頻度と精度でメンテナンスする体制や仕組みがまだ整っていないため、それまでは現状の実装でご理解いただきたいと思います。

この issue はクローズさせていただきます。