2

Nomintim を使用して、指定された座標の都市を取得する必要があります。都市とは、国名だけでなく、関連する OSM リレーション/ノードとそのすべてのプロパティを意味します (実際、私は osm_id、osm_type、名前、および座標を非常に気にしています)

編集:コンテキストを追加

ユーザーが場所に投稿を添付できるプラットフォームを運営しています。私は OSM をプライマリ データベースとして使用して、ユーザーが場所を検索できるようにしています。投稿が作成されたら、ビジネス データベースでその場所を参照します。都市と国レベルで投稿を集約できるようにしたいと考えています。したがって、専用のテーブルと典型的な関係を持つものを表します: n-1 都市 n-1 国を配置します。

現在、次のようなクエリで最大レベルの情報 (ズーム = 18) を取得できることがわかっています。

http://nominatim.openstreetmap.org/reverse?format=xml&accept-language=fr&lat=43.8338&lon=4.3596&zoom=18&addressdetails=1

都市名を含む関連情報を生成します:

  <reversegeocode timestamp="Thu, 02 Oct 14 15:16:11 +0000" attribution="Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright" querystring="format=xml&accept-language=fr&lat=43.8338&lon=4.3596&zoom=18&addressdetails=1">
    <result place_id="6643770" osm_type="node" osm_id="680342651" lat="43.833464" lon="4.3596107">3, Rue de la République, Écusson, La Placette, Nîmes, Nimes, Gard, Languedoc-Roussillon, France métropolitaine, 30000;30900, France</result>
    <addressparts>
            <house_number>3</house_number>
            <road>Rue de la République</road>
            <neighbourhood>Écusson</neighbourhood>
            <suburb>La Placette</suburb>
            <city>Nîmes</city>
            <county>Nimes</county>
            <state>Languedoc-Roussillon</state>
            <country>France</country>
            <postcode>30000;30900</postcode>
            <country_code>fr</country_code>
    </addressparts>
 </reversegeocode>

都市タグの文字列として都市を取得します。しかし、その都市の OSM ポイントを取得したい場合は、別のクエリに進む必要があります。

http://nominatim.openstreetmap.org/search?format=xml&city=N%C3%AEmes&=state=France+m%C3%A9tropolitaine&country=France&limit=1

これを最適化する最善の方法は何ですか?

私は Nominatim の独自のインスタンスを実行しているので、SQL が最適なオプションである場合はおそらく SQL を使用できますが、Nominatim で新しいエンドポイントを作成する必要があり、すべてのメンテナンスが複雑になります...

国にも同じ機能が必要です。 国については、パラメータ zoom=1 がいずれにせよ仕事をするべきであることがわかりました。厳しいことに、都市に対応する信頼できるものはありません。

4

1 に答える 1