как поставить два маркера на расстоянии 500м в гугл карте - PullRequest
0 голосов
/ 28 июля 2011

Как мы можем разместить два маркера на расстоянии 500 метров, допустим, что latLng для первого маркера - Лондон (51,0), а второй маркер размещен на расстоянии 500 метров от этого маркера.Я пробовал что-нибудь, но не смог найти и ответить за это ... любые идеи

Ответы [ 2 ]

0 голосов
/ 28 июля 2011

Я заглянул в Google Maps API, и кажется, что мой ответ был действительно неправильным.Я не заметил, что latLng работает не с длиной, а с широтой и долготой (похоже, я забыл, что земля не плоская :)).Используя этот хороший веб-сайт, я смог найти лучшее решение:

var position = new google.maps.LatLng(51.517289, -0.130463);  
var latlngs = [];
var map;
// distance from position in km
var d = 5;
// Earth radius
var R = 6372;

function initialize()
{
    var mapOptions = { zoom: 12,
              mapTypeId: google.maps.MapTypeId.ROADMAP,
              center: position };    
    map = new google.maps.Map(document.getElementById("map_canvas"),
            mapOptions);
}

function dropMarkers()
{
    var lat1Deg = position.lat();
    var lon1Deg = position.lng();
    var lat1Rad = lat1Deg.toRad();
    var lon1Rad = lon1Deg.toRad();

    latlngs.push(new google.maps.Marker({
        position: position,
        map: map,
        draggable: false,
        animation: google.maps.Animation.DROP}));

    for (var brngDeg = 0; brngDeg < 360; brngDeg+=20)
    {
        brngRad = brngDeg.toRad();
        var lat2Rad = Math.asin( Math.sin(lat1Rad)*Math.cos(d/R) + 
                      Math.cos(lat1Rad)*Math.sin(d/R)*Math.cos(brngRad) );
        var lon2Rad = lon1Rad + 
                      Math.atan2(Math.sin(brngRad)*Math.sin(d/R)*Math.cos(lat1Rad),  
                      Math.cos(d/R)-Math.sin(lat1Rad)*Math.sin(lat2Rad));

        lat2Deg = lat2Rad.toDeg();
        lon2Deg = lon2Rad.toDeg();
        latlngs.push(new google.maps.Marker({
                    position: new google.maps.LatLng(lat2Deg,lon2Deg),
                    map: map,
                    draggable: false,
                    animation: google.maps.Animation.DROP}));
    }
}

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;
    }
}   
0 голосов
/ 28 июля 2011

Степень широты - 60 морских миль, но очевидно, что она выходит за пределы окна на долготу.

Поэтому звучит так, что вам нужно использовать обратное уравнение Великого окружности.

GDC дает вам расстояние между точками на Земле - это сложно, потому что это не прямая линия, поскольку вы должны согласовывать кривизну сферы.

Если бы вы могли работать с GDC в обратном направлении, вы бы смогли отработать LatLong на расстоянии 500 м от текущего.

(Очевидно, что это применимо только к мухам. Маршрут, следующий за дорогой, будет другим. Служба указаний Google возвращает расстояние в метрах, хотя IIRC.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...