如何在谷歌地图上放置500米距离的两个标记

时间:2011-07-28 07:53:44

标签: google-maps google-maps-api-3

我们如何在距离500米处放置两个标记,假设第一个标记的latLng为伦敦(51,0),第二个标记距离此标记500米。我曾尝试过但无法找到并回答它......任何想法

2 个答案:

答案 0 :(得分:0)

纬度是60海里,但显然是经度窗外。

因此,听起来你需要反过来使用大圆距离方程。

GDC为您提供地球上各点之间的距离 - 它很复杂,因为它不是直线,因为您必须协商球体的曲率。

如果你可以向后工作GDC,那么你就可以计算距当前距离500米的LatLong。

(显然这只适用于鹦鹉。道路后面的路线会有所不同.Google路线服务会以IIC为单位返回距离。)

答案 1 :(得分:0)

我查看了Google Maps API,看来我的回答确实是错误的。我没有注意到latLng不适用于长度而是纬度和经度(看起来好像我已经忘记了地球不平坦:))。使用this漂亮的网站,我能够找到更好的解决方案:

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;
    }
}