我有一個點(X,Y),我想創建一個正方形的COORDS一個的LatLngBounds矩形(正方形),谷歌地圖的LatLngBounds對象,以便進行地址解析請求偏向只有到這個LatLngBound區域。谷歌地圖。如何創建給出一箇中心點
如何創建這樣一個正方形的LatLngBounds與中心給點?我必須找到NE和SW點。但是,如果給定距離d和點(x,y),我怎麼能找到它?
謝謝
我有一個點(X,Y),我想創建一個正方形的COORDS一個的LatLngBounds矩形(正方形),谷歌地圖的LatLngBounds對象,以便進行地址解析請求偏向只有到這個LatLngBound區域。谷歌地圖。如何創建給出一箇中心點
如何創建這樣一個正方形的LatLngBounds與中心給點?我必須找到NE和SW點。但是,如果給定距離d和點(x,y),我怎麼能找到它?
謝謝
您也可以從定義爲圓的半徑getBounds
並將trig留給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方法。
好,不過解釋一點關於一些碼字讓其他觀衆就能明白。什麼是brng變量和它做什麼以及當插入10作爲dist時,它是幾公里?當你把東西角落放到45,10和225時,這是什麼意思? – maiky 2011-04-20 12:18:40
確定'brng'是方位或角度。所以,使用45,10我們計算你的起點東北10公里處的一個點的位置。 225,10會給你南西的位置。這些是谷歌邊界對象所需的兩點。 – herostwist 2011-04-20 12:48:02
這裏是一個工作示例:http://jsfiddle.net/herostwist/DnSHY/1/ – herostwist 2011-04-20 12:56:13
難道它的工作簡單地加/減d/2到你的x/y位置?
鑑於X,Y爲中心點:
NW = x-(d/2),y-(d/2)
SE = x+(d/2),y+(d/2)
不要相信我這一點,雖然 - 我在數學:)
這是假定d爲 「直徑」 太可怕了,而不是半徑。如果「d」是半徑,則不要打擾分割部分。
哦,我多麼希望球面幾何是簡單的。唉,它不是。 – herostwist 2017-08-10 10:58:01
謝謝!這對我有效:'var latLng = new google.maps.LatLng(32.79503,-117.24142);/*聖地亞哥*/var radius = 2000;/*米*/var circle = new google.maps.Circle({center :latLng,radius:radius}); VAR defaultBounds = circle.getBounds();' – Ryan 2013-02-09 23:27:40
大。好的解決方案 – 2013-05-15 15:13:05