Преобразование морских миль в градусы долготы с учетом широты с помощью карт Google - PullRequest
4 голосов
/ 19 октября 2011

Я хочу явно определить, что Google maps LatLngBounds должен быть x морских миль справа от LatLong P и x морских миль слева от P. И определить LatLngBounds дляна y морских миль выше точки P и y nm ниже P.

Так что в основном я хочу определить LatLngBounds, используя широту и долготу, и я хочу получить эту широту и долготу из x, y и P.

Градусы широты легко преобразуются в градусы долготы: 1 градус равен одной морской миле.Но
градусов долготы на нм изменяется с широтой.Формула (в php)

public static function degPerNmAtLat($lat) {
    $pi80 = M_PI / 180;
    $lat = $lat*$pi80; //convert lat to radians
    $p1 = 111412.84;        // longitude calculation term 1
    $p2 = -93.5;            // longitude calculation term 2
    $p3 = 0.118;            // longitude calculation term 3
    // below: calculate the length of a degree of latitude and longitude in meters
    $longlen = ($p1 * cos($lat)) + ($p2 * cos(3 * $lat)) +  ($p3 * cos(5 * $lat));
    $longlen = $longlen * (3.280833333) / (5280 * 1.15077945);  // convert to nautical miles
    return 1/$longlen;
}

Но это похоже на обычную задачу, и мне интересно, есть ли в Google maps функция, которая мне не хватает, которая бы выполнила это.Есть ли в Google maps способ создания объекта LatLngBounds из x, y и P без использования формулы выше?

1 Ответ

3 голосов
/ 20 октября 2011

Вы можете использовать функцию computeOffset () в библиотеке геометрии API Карт Google V3 :

var dist = nauticalMiles * 1852; // convert nm to meters
var point = new google.maps.LatLng(lat,lng);
var eastPoint = google.maps.geometry.spherical.computeOffset(point,dist,90.0);
var westPoint = google.maps.geometry.spherical.computeOffset(point,dist,270.0);
...