ポイント(X、Y)があり、正方形を作成したいのですが、GoogleはLatLngBoundsオブジェクトをマップして、ジオコード要求をこのLatLngBound領域にのみバイアスさせます。
指定された点を中心とするこのようなLatLngBounds正方形を作成するにはどうすればよいですか?NEとSWのポイントを見つける必要があります。しかし、距離dと点(x、y)が与えられた場合、どうすればそれを見つけることができますか?
ありがとう
ポイント(X、Y)があり、正方形を作成したいのですが、GoogleはLatLngBoundsオブジェクトをマップして、ジオコード要求をこのLatLngBound領域にのみバイアスさせます。
指定された点を中心とするこのようなLatLngBounds正方形を作成するにはどうすればよいですか?NEとSWのポイントを見つける必要があります。しかし、距離dと点(x、y)が与えられた場合、どうすればそれを見つけることができますか?
ありがとう
getBounds
円として定義された半径から、Google にトリガーを残すこともできます。
new google.maps.Circle({center: latLng, radius: radius}).getBounds();
それは非常に複雑です。ラフボックスの場合は、これを試してください。
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メソッドのいくつかを使用しています。
x/y 位置に単純に d/2 を足したり引いたりするだけではうまくいきませんか?
中心点として x,y を指定すると、次のようになります。
NW = x-(d/2),y-(d/2)
SE = x+(d/2),y+(d/2)
ただし、これについて私を信用しないでください-私は数学がひどいです:)
これは、d を半径ではなく「直径」と見なします。「d」が半径の場合、2 で割る部分は気にしないでください。