Карты Гугл.как создать прямоугольник (квадрат) LatLngBounds с учетом координат центральной точки - PullRequest
11 голосов
/ 19 апреля 2011

У меня есть точка (X, Y), и я хочу создать квадрат, Google отображает объект LatLngBounds таким образом, чтобы геокодирование смещало запросы только в эту область LatLngBound.

Как создать такой квадрат LatLngBoundsс центром данной точки?Я должен найти точку NE и SW.Но как я могу найти его, учитывая расстояние d и точку (x, y)?

Спасибо

Ответы [ 3 ]

36 голосов
/ 04 ноября 2012

Вы также можете getBounds из радиуса, определенного как круг, и оставить триг в Google.

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

6 голосов
/ 19 апреля 2011

ну, это очень сложно.для грубой коробки попробуйте это:

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 Google Maps пришел очень долго.Ответ @wprater гораздо точнее и использует некоторые из новых методов API.

1 голос
/ 16 апреля 2015

Не сработает ли просто добавить / вычесть d / 2 к вашим x / y местоположениям?

Учитывая х, у в качестве центральной точки:

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

Не верь мне в этом, хотя - я ужасен в математике:)

Предполагается, что d является «диаметром», а не радиусом. Если «d» - это радиус, не беспокойтесь о делении на две части.

...