Sim*_*mon 8 gis intersection map line
我在谷歌地图中使用纬度/经度坐标.
我有两行:
然后我使用以下公式来找到它们交叉的点.
var XAsum = A.LngStart - A.LngEnd;
var XBsum = B.LngStart - B.LngEnd;
var YAsum = A.LatStart - A.LatEnd;
var YBsum = B.LatStart - B.LatEnd;
var LineDenominator = XAsum * YBsum - YAsum * XBsum;
if(LineDenominator == 0.0)
return false;
var a = A.LngStart * A.LatEnd - A.LatStart * A.LngEnd;
var b = B.LngStart * B.LatEnd - B.LatStart * B.LngEnd;
var x = (a * XBsum - b * XAsum) / LineDenominator;
var y = (a * YBsum - b * YAsum) / LineDenominator;
Run Code Online (Sandbox Code Playgroud)
这告诉我线确实交叉并返回x和y值.
但是,当我绘制返回的点时,它与实际交点偏移(不多).
是否有一个更好,更快的算法,我可以使用它将返回正确的交叉点?
当我迭代大量的行(~1000)时,它需要很快.
编辑:注意这给我一个大约7.5米的误差偏移
我假设您使用的算法是在笛卡尔坐标系(即平面)上查找直线相交的算法。不幸的是,地球不是一个平面(甚至不是一个球体),因此使用该算法会引入错误。Google 地图使用椭球体(特别是 WGS84)来近似地球表面,因此您需要一种算法来查找椭球体上弧线的交点。
此页面可能包含一些有用的信息: http://mathhelpforum.com/calculus/90196-point-intersection-two-lines.html
| 归档时间: |
|
| 查看次数: |
4788 次 |
| 最近记录: |