Calculate the mid point of latitude and longitude co-ordinates

后端 未结 4 1507
我寻月下人不归
我寻月下人不归 2021-01-13 12:41

Does anyone know the best way to go about getting the mid-point of a pair of latitude and longitude points?

I mm using d3.js to draw points on a map and need to draw

4条回答
  •  别那么骄傲
    2021-01-13 13:01

    For the accurate side:

    You may use the Esri web API. Nothing beats decades of experience implementing the hard side of projection systems and datums... Athough the ArcGIS for Server line is a commercial product, the JS API is free, and here there's a pure JS function that does just what you want : geometryEngine.densify ; that function requires an interval parameter, that you can, in your case, get by dividing by two the results of geometryEngine.geodesicLength

    That'll need you to get acquainted with the Polyline class in a very basic way, such as var mySegment = new Polyline([[50,3], [55,8]]); and probably nothing further.

    For the visual side :

    Your segment has two middles ? You may also be interested in geometryEngine.offset ; first offset the original segment once in each direction, then get the center point for each of the resulting segments.

    For the practical side :

    Given the short distances involved, provided you're not dealing with a weird place that'd be too close to the poles, I'd simply go with an arithmetic average of X and Y, and then add/subtract a rotated vector to offset your two "middles". Doing it this way would be both lighter on the machine (no libs to load from a CDN), easier on you, and as long as the purpose of it is a nice display, the result will be more than good enough.

    (added as per comment : a sample)

    // Your known starting points, and a k factor of your choice.
    var a = {x:3, y:50};
    var b = {x:8, y:55};
    var k = 0.2;
    
    // Intermediate values
    var vab =       {x:b.x-a.x, y:b.y-a.y};
    var v_rotated = {x:-k*vab.y, y:k*vab.x};
    var middle =    {x:a.x+vab.x/2, y:a.y+vab.y/2};
    
    // Your two resulting points
    var result_i = {x: middle.x + v_rotated.x,  y: middle.y + v_rotated.y};
    var result_j = {x: middle.x - v_rotated.x,  y: middle.y - v_rotated.y};
    

提交回复
热议问题