8

Googleマップに長方形を描き、マーカーが長方形の境界内にあるかどうかを検出しようとしています。

四角形を描くには、Shift キーを押しながらクリックしてドラッグします。

私はここに実用的なサンプルを持っています - http://jsfiddle.net/dbwPQ/3/

.contains メソッドは、四角形が左下から右上、または右上から左下に描画されている場合にのみ true を返すのはなぜですか。

それでも、左上から右下、または右下から左上に描かれた同じ領域は false を返します????

                if (boundsSelectionArea.contains(markers[key].position))
            //if (gribBoundingBox.getBounds().getNorthEast().lat() <= markers[key].position.lat() &&
            //    gribBoundingBox.getBounds().getSouthWest().lat() >= markers[key].position.lat() && 
            //    gribBoundingBox.getBounds().getSouthWest().lng() <= markers[key].position.lng() && 
            //    gribBoundingBox.getBounds().getNorthEast().lng() >= markers[key].position.lng() ) 
            {
                //if(flashMovie !== null && flashMovie !== undefined) {
                console.log("User selected:" + key + ", id:" + markers[key].id);
                //}
            } else {
                //if(flashMovie !== null && flashMovie !== undefined) {
                console.log("User NOT selected:" + key + ", id:" + markers[key].id);
                //} 
            }

更新これは機能しますが、理由がわかりませんか? http://jsfiddle.net/dbwPQ/4/

4

3 に答える 3

9

geocodezip の作業バージョンに基づいていくつかの変更があります。

LatLngBounds の「extend」を使用すると、内側に移動しても大きくなるだけで小さくなりません。そのため、要件に合わせてマウスを動かすたびに LatLngBounds を生成します。(私が推測する別の方法で最適化されるかもしれません。)

更新:別の問題が見つかりました。ユーザーがマウスを離す前にシフト キーを離すと、グリッド境界がマップに固定され、次のコードで修正されました。

google.maps.event.addListener(themap, 'mousemove', function (e) {
+   if (mouseIsDown && (shiftPressed|| gribBoundingBox != null) ) {
        if (gribBoundingBox !== null) // box exists
        {         
+           var newbounds = new google.maps.LatLngBounds(mouseDownPos,null);
+           newbounds.extend(e.latLng);    
+           gribBoundingBox.setBounds(newbounds); // If this statement is enabled, I lose mouseUp events

        } else // create bounding box
        {
            gribBoundingBox = new google.maps.Rectangle({
                map: themap,
+               bounds: null,
                fillOpacity: 0.15,
                strokeWeight: 0.9,
                clickable: false
            });
        }
    }
});

google.maps.event.addListener(themap, 'mouseup', function (e) {
+   if (mouseIsDown && (shiftPressed|| gribBoundingBox != null)) {
        mouseIsDown = 0;

    /*........*/

更新: 興味のある別のシナリオが見つかりました。

ボタンを使用してマップを選択します。(ユーザーは「マップの選択」ボタンをクリックしてマーカーを選択するか、Shift キーを使用してマーカーを選択できます。)

于 2014-02-09T07:52:31.997 に答える
2

のコンストラクターを誤用しgoogle.maps.LatLngBounds classます。ドキュメントによると、南西コーナーと北東コーナーの 2 つの引数を渡す必要があります。ただし、南東や北西のコーナーを通過することもあります。これはおそらく方法に影響を与え.containsます。

于 2013-07-16T13:42:11.767 に答える