5

指定された座標が Google マップの道路上にあるかどうかを判断するアプリケーションでチェックを行う必要があります。

Google Maps API にそれを支援する関数はありますか?

前もって感謝します!

4

1 に答える 1

15

私の知る限り、これは Google Maps API を使用して行うことはできません。

OpenStreetMap (OSM)などのクラウドソース データセットを使用するのが最善の策だと思います。

独自の空間データベース ( PostGISなど)をセットアップし、OSM データをデータベースにインポートする必要があります。

次に、( TomcatGlassfishなどの Web サーバーでホストされる) サーバー側 API を作成して、携帯電話の現在の位置を受信し、特定の半径で位置をバッファーして円形ポリゴンを取得し、空間クエリを実行します。 PostGISを介してバッファーが道路と交差するかどうかを判断し (たとえば、含めたい道路の種類に応じて、「highway=primary」または「highway=secondary」のラベルが付いたウェイ -このサイトを参照)、true または false を返します。電話への対応。

2015年8月編集

android-maps-utils ライブラリPolyUtil.isLocationOnPath()には、道路 (またはその他の線) を構成するポイントのセットがあると仮定して、Android アプリ自体でこのタイプの計算を実行できるメソッドが呼び出されています。

ライブラリ内のコードは次のようになります。

   /**
     * Computes whether the given point lies on or near a polyline, within a specified
     * tolerance in meters. The polyline is composed of great circle segments if geodesic
     * is true, and of Rhumb segments otherwise. The polyline is not closed -- the closing
     * segment between the first point and the last point is not included.
     */
    public static boolean isLocationOnPath(LatLng point, List<LatLng> polyline,
                                           boolean geodesic, double tolerance) {
        return isLocationOnEdgeOrPath(point, polyline, false, geodesic, tolerance);
    }

このライブラリを使用するには、ライブラリを に追加する必要がありますbuild.gradle

dependencies {
    compile 'com.google.maps.android:android-maps-utils:0.4+'
}

次に、ポイントとパスを取得したら、緯度/経度をLatLngオブジェクト (具体的にはそれぞれ aLatLng pointList<LatLng> line) に変換してから、コード呼び出しで次のようにします。

double tolerance = 10; // meters
boolean isLocationOnPath = PolyUtil.isLocationOnPath(point, line, true, tolerance);

...ポイントがラインから 10 メートル以内にあるかどうかを確認します。

使用方法の詳細については、このライブラリの入門ガイドを参照してください。

于 2012-11-06T16:14:22.290 に答える