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