给定一个点和一个距离

时间:2018-11-15 10:58:21

标签: javascript google-maps math

我正在使用一个有角项目的Google地图。我有一个圆的圆心和以米为单位的半径长度。我试图在圆的圆周上找到任何点的坐标-我只需要一个。给定我该如何计算?

示例数据:

Center = {
   Latitude : 53.388922117675236
   Longitude : -6.280994415283203
}
Radius = 527

2 个答案:

答案 0 :(得分:2)

如果需要给定距离的任意点,最简单的方法是选择子午线方向

NewLong = Long
NewLat = Lat +- Radius / 111111.111  (meters per degree)

或平行方向:

NewLat = Lat
NewLong = Long +- Radius / 111111.111 / Cos(Lat)  

对于随机方向,生成随机方位并使用this page中的公式

Formula:
φ2 = asin( sin φ1 ⋅ cos δ + cos φ1 ⋅ sin δ ⋅ cos θ )
λ2 = λ1 + atan2( sin θ ⋅ sin δ ⋅ cos φ1, cos δ − sin φ1 ⋅ sin φ2 )
where   φ is latitude, λ is longitude, 
        θ is the bearing (clockwise from north), 
        δ is the angular distance d/R; 
        d being the distance travelled, R the earth’s radius

JavaScript:(all angles in radians)
var φ2 = Math.asin( Math.sin(φ1)*Math.cos(d/R) +
                    Math.cos(φ1)*Math.sin(d/R)*Math.cos(brng) );
var λ2 = λ1 + Math.atan2(Math.sin(brng)*Math.sin(d/R)*Math.cos(φ1),
                         Math.cos(d/R)-Math.sin(φ1)*Math.sin(φ2));

答案 1 :(得分:1)

Maps API有一个geometry library,可用于计算距离,航向等。

因此,如果您需要在距另一点的给定距离处找到1个点,无论标题如何,都可以使用computeOffset方法。

以下代码的作用是,在位置0,0var myLatLng)处添加一个标记,然后在距该点5000米处的0方向(北)处添加另一个标记。当然,您可以根据需要更改标题。

function initialize() {

    var myLatLng = new google.maps.LatLng(0,0);
    var mapOptions = {
        zoom: 10,
        center: myLatLng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    
    var point = google.maps.geometry.spherical.computeOffset(myLatLng, 5000, 0);
    
    var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
    
    new google.maps.Marker({
        position: myLatLng,
        map: map,
        title: 'Origin marker'
    });
    
    new google.maps.Marker({
        position: point,
        map: map,
        title: 'Offset marker'
    });
}

initialize();
#map-canvas {
  height: 200px;
}
<div id="map-canvas"></div>

<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry"></script>

  

请注意如何加载API,包括几何库。