2013-05-23 25 views
19

私はある町から別の町に経路が定義されているとします。 Google Maps APIから、私は2つの間のルートを回復することができます。しかし、Googleから戻ってくるルートは、脚に別の歩行がある場所(たとえば、あるハイウェイから別のハイウェイに向かう必要がある場所)にのみ地理座標を含む走行ルートです。ルート全体に正確な地理座標を取得する、Google MapsまたはOpenStreetMap

私が必要とするのは、経路全体に沿った特定の間隔(たとえば、1/4マイルまたは100mごと)での地理的位置(緯度/経度)です。

Google Maps API/Webサービス経由でこれを実現する方法はありますか?

また、OpenStreetMapデータベースを使用する方法はありますか?

親切に、 マドレーヌは、

+0

あなたは「マイルマーカー」にしようとしていますか? [この質問](http://stackoverflow.com/questions/16705895/place-marker-on-polyline-with-specific-distance/16706394#16706394)または[この例](http://www.geocodezip。 com/v3_GoogleEx_directions-waypoints_kmmarkersC.html) – geocodezip

+0

はい、マイルマーカーのようなものは私が後にしたものです。 geocodzipリンクは非常に役に立ちます。 –

答えて

19

OSRMは、道路形状がOpenStreetMapデータベースと同じように経路を提供します。たとえば、ルートをGPXとして取得できます(必要に応じてこのファイルを後処理します)。これは次のようになります。

GET http://router.project-osrm.org/viaroute?hl=en&loc=47.064970,15.458470&loc=47.071100,15.476760&output=gpx 

続きを読む:OSRM API docs

+0

はい、これは私が探していたものです。ありがとう。 –

+0

ありがとうございました!それは私をとても助けました。 – Gurusinghe

+0

パスやトレイルに類似したものはありますか? – masterwok

5

単純にgoogle.maps.DirectionsService()。route()メソッドです。サービス要求を渡す必要があり、次にサービス要求の完了時に実行されるコールバックを渡す必要があります。

https://developers.google.com/maps/documentation/javascript/directions

+0

それを見てください。しかし、それは10マイルよりも大きい「足」の間に潜伏期間を与えますか? –

0

Marlioの答えに追加します。

Google Maps Directions API自体を使用できます。指定した出発地と目的地のために、JSONの出力で、次を探し :あなたがポリラインから座標を取得するためのデコーダを使用することができます

"polyline" : { 
    "points" : "" 
} 

https://github.com/emcconville/google-map-polyline-encoding-tool か。 Rのgooglewayパッケージを使用して同じものをデコードすることができます。 https://cran.r-project.org/web/packages/googleway/googleway.pdf

どのように解像度を希望のレベルに設定するかわかりません。しかし、API出力の解像度は本当に良いです。

+0

実際には、overview_polylineを取得してルート全体のすべての緯度/経度座標を取得したいと思うでしょう。 [vignette](https://github.com/SymbolixAU/googleway/blob/master/vignettes/googleway-vignette.Rmd)は、より多くの例と詳細を示します。 – SymbolixAU

+0

しかし、概要は道路の曲率を正確にトレースしません。脚の各ステップのポリラインポイントは、より詳細なルート座標を示します。 –

+0

私の意見では、個々の 'polyline:points'を使って多くの重複した情報が得られます(例えば、ある脚の最後の座標が次の脚の開始点になります)。 'overview_polyline'には道路とルートに沿った方向の変化ごとにポイントがあり、その間のすべてのポイントは直線上にあり、推定できます。 – SymbolixAU

0

受け入れられた回答が古くてもう機能しないため、route serviceからProject OSRMを使って道路沿いのすべてのノードを照会する方法は次のとおりです。

任意の数のlon、latペアが与えられます。

  • 13.388860,52.517037
  • 13.397634,52.529407
  • 13.428555,52:インスタンス(ベルリン)次の三つの場合 。523219

ルートサービスは、これらの点との間の最速ルートを計算し、その次のクエリ使用して、道路に沿ってすべてのノードを戻すことができる:これは、すべてのノードIDを含むJSONレスポンスを返す

http://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.397634,52.529407;13.428555,52.523219?alternatives=false&annotations=nodes 

をルート沿いのノード。 OverpassAPIを使用できるノードの緯度、経度の座標を受信するには

{ 
    "routes": [ 
    { 
     ... 
     "legs": [ 
     { 
      "annotation": { 
      "nodes": [ 
       2264199819, 
       2045820592, 
       21487242, 
       ... 
    ] 
} 

:結果は次のようになります。ここで

[out:json]; 
(
    node(264199819); 
    node(...); 
    node(...); 
    ... 
); 
(._;>;); 
out; 

は高架-ターボを使用したサンプルリクエストです:http://overpass-turbo.eu/s/toe

+0

私はソースとデスティネーションlat-lngのペアを持っています。私は20マイルほど遠くない中間点のlat-lngペアを求めています。どのように達成するのですか? – speedious

関連する問題