0

さて、私は TraceHandler を持つ Google マップ インスタンスを持っています。これにより、ユーザーは都市地図で線を引くことができます。これらの行で、Google DirectionsRoute サービスを使用してルートを生成しています。このサービスは、*overview_path に含まれるさまざまな情報を返します。私のルートの方向転換のすべてのポイントを含みます。これらの点を使用して、次のように三角形を作成します。

            var triangle;
            for (var indexerTrian = 0; indexerTrian < self.bounds.length; indexerTrian++) {

                if (indexerTrian + 1 == self.bounds.length) break;

                var maxLng = self.bounds[indexerTrian].lng() < self.bounds[indexerTrian + 1].lng() ? self.bounds[indexerTrian].lng() : self.bounds[indexerTrian + 1].lng();
                var minLng = self.bounds[indexerTrian].lng() > self.bounds[indexerTrian + 1].lng() ? self.bounds[indexerTrian].lng() : self.bounds[indexerTrian + 1].lng();

                var latLngSouthWest = new gMap.LatLng(self.bounds[indexerTrian].lat(), maxLng);
                var latLngNorthEast = new gMap.LatLng(self.bounds[indexerTrian + 1].lat(), minLng);

                triangle= new gMap.LatLngBounds(latLngSouthWest, latLngNorthEast);

                self.triangles.push(triangle);
            }

このルーチンの 3 番目の部分では、これらの三角形を使用してルートにポイントを配置します。いくつかのコード:

//for each point
for (var i in result.page) {
                    stopPoint = result.page[i];
                    latLng = new gMap.LatLng(stopPoint.latitude, stopPoint.longitude);

                    //for each triangle
                    for (var iTrian = 0; iTrian < self.triangles.length; iTrian++) {

                        //this guy verify if the stopPoint is inside the triangle.
                        //if so. Drop it on map
                        if (self.triangles[iTrian].contains(latLng)) {

                            //this method just generate a Marker instance.
                            self.SetaMarkers(latLng, iconMarker, stopPoint.descricao, true);
                            counter++;
                            break;
                        }
                        //this is a DEBUG if who prints all points if my loop comes to 
                        //end
                        else if ((iTrian + 1) == self.triangles.length) {

                            self.SetaMarkers(latLng, null, stopPoint.descricao, true);
                            //break;
                        }
                    }
                }

これはうまくいきます。実行時にエラーはありません。しかし、経度を変更した三角形の場合、.containsは機能しません。バグかもしれません。

ここにデモンストレーションするイメージがあります。デバッグする三角形を出力しています: http://s7.postimage.org/ek3prgryj/Map.pngイメージでわかるように。通常の赤いマーカーは、すべての三角形の境界外にあるstopPointです。そして、編集された画像を持つものは、いくつかの三角形の境界にあるstopPointsです。

私はすでに多くのことを試しました..今、各三角形の中心を印刷して、それがどこにあるべきかを確認します。

4

1 に答える 1

0

ルートの25メートル後に25メートルの円を使用して問題を解決しました。これで、ユーザーに半径を設定させることができ、全員が取得できます。

于 2012-11-05T12:29:12.373 に答える