我有一个点(X,Y),我想创建一个正方形,谷歌映射LatLngBounds对象,以使地理编码请求只偏向此LatLngBound区域。
如何创建具有给定点中心的LatLngBounds方格?我必须找到NE和SW点。但是如果给定距离d和点(x,y),我怎么能找到它呢?
由于
答案 0 :(得分:35)
您也可以从定义为圆圈的半径中getBounds
,并将三角形留给google。
new google.maps.Circle({center: latLng, radius: radius}).getBounds();
答案 1 :(得分: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方法。
答案 2 :(得分:1)
简单地在您的x / y位置添加/减去d / 2是不是可行?
以x,y为中心点:
NW = x-(d/2),y-(d/2)
SE = x+(d/2),y+(d/2)
但是,不要相信我这一点 - 我在数学方面很糟糕:)
这假设d为"直径"而不是半径。如果" d"是半径,不要分开两部分。