在地图上的正确位置制作贝塞尔曲线控制点

时间:2019-05-21 11:25:14

标签: javascript google-maps react-native react-native-maps

我想在两个位置点之间绘制贝塞尔曲线。 我可以在some answers on stackoverflow之后绘制一些曲线,但是在某些情况下,贝塞尔曲线控制点的位置是错误的,尽管我对贝塞尔曲线使用了相同的简单公式。

enter image description here

我要做的是将两个贝塞尔曲线控制点放在正确的位置, -制作一条始终正交于两个位置之间的直线的线。 -制作两个贝塞尔曲线控制点(+和-),它们位于正交线上某处的中间,并且分别位于两个位置。

但是在某些情况下(两个位置不在水平或垂直位置),由于控制点不在正交线上,所以该线不会像下面那样正交,我想知道latitudeDelta标度和longitudeDelta之间是否存在差异规模,这会导致问题,但不确定。

enter image description here

我的计算结果如下。

    const slopeOfLinearLine = (destination.latitude - origin.latitude) / (destination.longitude - origin.longitude)
    const slopeOfOrthogonalLine = -1 / slopeOfLinearLine
    const x = some x value to move right or left.
    const y = slopeOfOrthogonalLine * x
    const topOfTriangle = { latitude: midLinearLine.latitude + y, longitude: midLinearLine.longitude + x }

请让我知道任何人对此问题有任何想法。 谢谢!

1 个答案:

答案 0 :(得分:1)

纬度和经度的单位度数(公里/英里)不同,因此对于通常使用的投影比例,因f=Cos(latitude)而异,地图是各向异性的。

因此您可以:

1)在屏幕坐标系中生成控制点贝塞尔曲线(像素)

2)使用this page中的公式在纬度/经度系统中建立正确中间垂直线-在大圆弧处找到中间点,在该点找到方位,找到垂直方位,在某个距离处建立点从中间的垂直轴承开始