12

Google Places API を使用して、ポイントに最も近い 2 つの通りを見つけようとしています (基本的には、最も近い交差点を示すため)。ただし、結果が返されるとしても、1 つの「ルート」のみが返されます。

+ または X パターンで 5 つのクエリを実行できると思いますが、それはハックで、信頼性が低く、もちろん、クエリの制限にはるかに早く到達します。

APIはナビゲーションシステムのようなものに使用することを意図していないため、これは意図的な動きであると言いたくなりますが(私はそうしようとはしていません)、交差点を取得するためのTOS準拠の方法があることを願っています. .

補足-「types = route」を指定しても結果が返されないようです。これにより、Placesはナビゲーションではなく実際のPOIにのみ使用されることを意図しているという私の疑いがさらに解消されますが、利用規約には明示的な言及はありませんその点での制限。

編集: Chris が指摘したように、ジオコーディング用に特別に設計された Geocoding API がありますが、複数のクエリを使用する以外に、最も近い交差道路を取得する方法はまだわかりません。

4

7 に答える 7

7

Google のリバース ジオコーダーは、1 回のクエリで交差点を報告できるほど洗練されていないというのがコンセンサスです。つまり、 で結果が欲しいだけだと伝えるために使用できるパラメーターはありません"types" : [ "intersection" ]。Google はここで独自のドッグフードを食べています。maps.google 検索ボックスに緯度/経度を入力すると、常に通り (Google 用語では「ルート」) が返されます。

ご指摘のとおり、切望された["intersection"]タイプを取得するために適用できるヒューリスティックはたくさんあります。

例: 第一世界の都市のいくつかの「主要な」交差点には、交差点を表すトランジット ストップがあります。結果に要素が含まれている場合は 、その要素を検索語として"types" : [ "bus_station", "transit_station" ]試して、交差が得られることを期待できます。"long_name"smirkingman は実行可能な解決策についても言及しました。残念ながら、これらの両方で 2 つ以上のクエリが必要でした。

結論として、Google Geocoding API には latelngToIntersection(lat,lng) のような関数はありません。これの証拠は、Google 自身の maps.google ページにあります。私はあなたの問題を別の方法で攻撃します。GPS の位置から最も近い主要な交差点を取得したい場合は、ユーザーに手伝ってもらうとよいでしょう。ジオコーディングには厄介な人間が散らばっていることで有名です。

于 2012-06-01T15:29:08.413 に答える
4

OpenStreetMapのデータを使用できます。彼らの.osmファイルは、交差する道路の緯度/経度を提供します。

  1. データの取得方法。

    1. OpenStreetMapに移動し、興味のある場所を見つけて、4 番目の目盛りのようにズームインします。

    2. 上部のナビゲーション バーで [エクスポート] をクリックし、ドロップダウンで [OpenStreetMap XML Data] を押して [エクスポート] をクリックします。

    3. 州や国などの大量のデータについてはPlanet.osm、目的の「抽出」を見つけてください。

  2. 交差点を取得するには、この形式に一致するデータを探します。おそらく、highway を検索します。

例:

<way id="6419265" user="eric22" uid="160949" visible="true" version="2" changeset="10632563" timestamp="2012-02-09T10:49:21Z">
  <nd ref="53167978"/>
  <nd ref="53163978"/>
  <nd ref="53163979"/>
  <nd ref="53173508"/>
  <nd ref="53164158"/>
  <nd ref="53173510"/>
  <tag <b>k="highway"</b> v="residential"/>
  <tag k="name" v="Alberta St"/>
  <tag k="tiger:cfcc" v="A41"/>
  <tag k="tiger:county" v="St. Louis-City, MO"/>
  ...
</way>

way.id は通りの ID であり、nd refs は通りの ID であり、同じファイルで見つけることができます。彼らはこのように見えます

‹node id="53167978" lat="38.5852785" lon="-90.2450074" user="eric22" uid="160949" visible="true" version="3" changeset="10632563" timestamp="2012-02-09T10:48:49Z"/>
于 2012-11-30T01:42:18.320 に答える
2

おっしゃるとおり、Places API はジオコーディングに使用するためのものではありません。通りや町などの政治的な結果は、返された場所のエリア ID を提供するためだけに存在するため、2 つの結果に限定されます。

通りなどを検索したい場合は、Geocoding API を使用してみてください: https://developers.google.com/maps/documentation/geocoding/

于 2012-05-21T01:28:57.837 に答える
2

説明したように、ジオコーディングを逆にして一連の近接点を取得するための GoogleMap 機能はありません。

私が見る唯一の選択肢は

  • Haversine を使用して、ポイントの N/S/E/W 200 メートルを計算します。経験的に「200」を選択する必要があります
  • これらの 4 点を逆ジオコーディングする
  • 返された住所から、異なる 2 つの最も近い通りを取得します (成功しない場合があります)。

これをクライアント側で行うと、ユーザーが 1 日の 2,500 制限に達することはめったにありません。

于 2012-05-31T08:36:08.533 に答える
1

Google Maps API はこれをサポートしていません。これは住所ジオコーダのみです。Google Maps API を使用してできる最善の方法は、ルート サービスを使用して最初のターンがどこにあるかを見つけることですが、それは完全なハックです。この機能を提供できる他のマップ サービスを調べてみてください。

于 2012-05-30T04:15:17.420 に答える
1

これは古い質問ですが、まったく同じ機能を探していたところ、Google がここに連れてきてくれました。

どうやら、次のように 2 つの通りの名前の間にアンパサンドを入れるだけで交差点を検索できるようになりました。

street name 1 & street name 2

この手法は、Geocoding API と Google マップ Web サイトの両方で機能します。

于 2020-08-26T15:19:46.317 に答える