如何计算地图上2个坐标之间沿着一条直线的N个等距点的坐标?

时间:2019-07-18 18:34:12

标签: maps coordinates latitude-longitude

我在地图上有两个点-

val point1 : LatLng(13.3016139,77.4219107)
val point2 : LatLng(14.1788932,77.7613413)

我想沿着这两个坐标之间的直线计算并找到100个等距点。我该怎么办?

ps。我确定这已经被问过了,我只是找不到。

2 个答案:

答案 0 :(得分:0)

等距投影,更重要的是,是按哪个投影投影?

通常,要在笛卡尔空间中查找距离,可以使用诸如 Haversine formula找到一个值,如先前在stack answer: How to convert latitude or longitude to meters?中回答

对于等距部分,一旦根据给定点的地球形状和半径的口味确定了距离,就可以进行简单的除法。 。

python 3.7
>>> dist = 5427 #just some number
>>> nbr_o_points = 101 
>>> points = [(dist/nbr_o_points)*(i+1) for i in range(nbr_o_points)]
>>> [f'{p:.2f}' for p in points]
['53.73', '107.47', '161.20',..., '5319.53', '5373.27', '5427.00']

现在要将这些距离从点a转移到点b,再返回到所需的投影...这不是您的问题的一部分... Stack - how-to-determine-vector-between-two-lat-lon-points可能会有所帮助。

取向量并乘以点的距离,以获得坐标。

答案 1 :(得分:0)

这就是我解决的方式-

fun findEquidistantPoints(latLng1: LatLng, latLng2: LatLng, pointCount: Int): ArrayList<LatLng> {

    if (pointCount < 0)
        throw IllegalArgumentException("PointCount cannot be less than 0")

    val points = ArrayList<LatLng>()

    val displacement = latLng1.displacementFromInMeters(latLng2)
    val distanceBetweenPoints = displacement / (pointCount + 1)

    for (i in 1..pointCount) {
        val t = (distanceBetweenPoints * i) / displacement

        points.add(LatLng(
                (1 - t) * latLng1.latitude + t * latLng2.latitude,
                (1 - t) * latLng1.longitude + t * latLng2.longitude
        ))
    }

    return points
}