12

ポイント(X、Y)があり、正方形を作成したいのですが、GoogleはLatLngBoundsオブジェクトをマップして、ジオコード要求をこのLatLngBound領域にのみバイアスさせます。

指定された点を中心とするこのようなLatLngBounds正方形を作成するにはどうすればよいですか?NEとSWのポイントを見つける必要があります。しかし、距離dと点(x、y)が与えられた場合、どうすればそれを見つけることができますか?

ありがとう

4

3 に答える 3

39

getBounds円として定義された半径から、Google にトリガーを残すこともできます。

new google.maps.Circle({center: latLng, radius: radius}).getBounds();

于 2012-11-04T02:29:23.747 に答える
6

それは非常に複雑です。ラフボックスの場合は、これを試してください。

if (typeof(Number.prototype.toRad) === "undefined") {
  Number.prototype.toRad = function() {
    return this * Math.PI / 180;
  }
}

if (typeof(Number.prototype.toDeg) === "undefined") {
  Number.prototype.toDeg = function() {
    return this * 180 / Math.PI;
  }
}

var dest = function(lat,lng,brng, dist) {
    this._radius = 6371;
    dist = typeof(dist) == 'number' ? dist : typeof(dist) == 'string' && dist.trim() != '' ? +dist : NaN;
    dist = dist / this._radius;
    brng = brng.toRad();  
    var lat1 = lat.toRad(),
        lon1 = lng.toRad();

    var lat2 = Math.asin(Math.sin(lat1) * Math.cos(dist) + Math.cos(lat1) * Math.sin(dist) * Math.cos(brng));
    var lon2 = lon1 + Math.atan2(Math.sin(brng) * Math.sin(dist) * Math.cos(lat1), Math.cos(dist) - Math.sin(lat1) * Math.sin(lat2));
    lon2 = (lon2 + 3 * Math.PI) % (2 * Math.PI) - Math.PI;
    return (lat2.toDeg() + ' ' +  lon2.toDeg());
}

    var northEastCorner = dest(centreLAT,centreLNG,45,10);
    var southWestCorner = dest(centreLAT,centreLNG,225,10);

編集

上記は私がそれを書いた2011年にそれを行う方法でした。最近、グーグルマップのAPIは途方もない道を進んでいます。@wpraterによる答えは非常にわかりやすく、新しいapiメソッドのいくつかを使用しています。

于 2011-04-19T14:40:42.697 に答える
1

x/y 位置に単純に d/2 を足したり引いたりするだけではうまくいきませんか?

中心点として x,y を指定すると、次のようになります。

NW = x-(d/2),y-(d/2)
SE = x+(d/2),y+(d/2)

ただし、これについて私を信用しないでください-私は数学がひどいです:)

これは、d を半径ではなく「直径」と見なします。「d」が半径の場合、2 で割る部分は気にしないでください。

于 2015-04-16T01:48:19.267 に答える