我在地图上有两个点-
val point1 : LatLng(13.3016139,77.4219107)
val point2 : LatLng(14.1788932,77.7613413)
我想沿着这两个坐标之间的直线计算并找到100个等距点。我该怎么办?
ps。我确定这已经被问过了,我只是找不到。
答案 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
}