Google Maps API - クラス GLatLngBounds の問題
-
08-06-2019 - |
質問
で問題が発生しています Google マップ API. 。ポイントを保存するために作成したオブジェクトを保持する配列があります。
私の配列とクラス:
var tPoints = [];
function tPoint(name) {
var id = name;
var points = [];
var pointsCount = 0;
...
this.getHeadPoint = function() { return points[pointsCount-1]; }
}
tPoint は次の配列を保持します。 GLatLng ポイント。を返す関数を書きたい GLatLngBounds すべての HeadPoint を表示するために現在のマップ境界から拡張されたオブジェクト。
これが私がこれまでに持っているものです..
function getBounds() {
var mBound = map.getBounds();
for (var i = 0; i < tPoints.length; i++) {
alert(mBound.getSouthWest().lat() + "," + mBound.getSouthWest().lng());
alert(mBound.getNorthEast().lat() + "," + mBound.getNorthEast().lng());
currPoint = trackMarkers[i].getHeadPoint();
if (!mBound.containsLatLng(currPoint)) {
mBound.extend(currPoint);
}
}
return mBound;
}
これにより、アラートに対してこれらの値が返されます。(通常は米国上空)
"19.64258,NaN"
"52.69636,NaN"
「i=0」
"19.64258,NaN"
"52.69636,-117.20701"
「i=1」
なぜ NaN が返されるのかわかりません。境界を使用してズーム レベルを取得すると、NaN 値が原因で、map.getBoundsZoomLevel(bounds) が間違った 0 を返していると思います。私は使っていますか? GLatLngBounds 間違っていますか?
解決
Google マップのサンプルではこのコードが使用されています...
var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();
var lngSpan = northEast.lng() - southWest.lng();
var latSpan = northEast.lat() - southWest.lat();
...これは、個々の経度/緯度座標を取得しようとする前に、南西/北東の境界を変数に入れています。おそらく、「ネストされた」評価に問題が発生している可能性があります。必要なデータが得られるかどうかを確認するために、詳細なアプローチを試してみましたか?
他のヒント
私も Google 検索でその例を見つけて、実際に試してみました。それは問題ではありませんでした。
バグを見つけました。誰もその問題を解決できなかったでしょう。境界をテストする直前に、不正なデータをマップの中央に配置していたことが判明しました。のようなことをしました lngSpan = northEast.lng() - southWest.lng();
ただし、JavaScript は var を文字列として解釈しました。それで (maxLng-minLng)/2 + minLng
次のようなものを返します "20.456-116.1178"
として lng
. 。地図を中心に置いた var centerPoint = new GLatLng(setLat, setLng);
その後、マップ API が少しおかしくなります ;)
でも助けてくれてありがとう。