карты Google Maps. как создать прямоугольник LatLngBounds (квадрат) с заданными координатами центральной точки
У меня есть точка (X, Y), и я хочу создать квадрат, объект Google maps LatLngBounds, чтобы сделать запросы геокода смещенными только в эту область LatLngBound.
Как я могу создать такой квадрат LatLngBounds с центром в данной точке? Я должен найти точку NE и SW. Но как я могу найти его, учитывая расстояние d и точку (x, y)?
Спасибо
3 ответа:
Вы также можете
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);
EDIT
выше был их способ сделать это еще в 2011 году, когда я писал его. В эти дни Google maps api пришел по пути loooong. Ответ @wprater гораздо аккуратнее и использует некоторые из новых методов api.
Не получится ли просто добавить / вычесть d / 2 к вашим X / y местоположениям?
Учитывая x, y в качестве центральной точки:
NW = x-(d/2),y-(d/2) SE = x+(d/2),y+(d/2)
Не доверяйте мне в этом, хотя-я ужасен в математике :)
Это предполагает, что d-это "диаметр", а не радиус. Если" d " - это радиус, не беспокойтесь о делении на две части.