如果我有一个lat/lng我假设它在(0,0)那么我如何计算另一个lat/lng对的x, y坐标
If I have one lat/lng which I assume is at 0,0 then how do I calculate the x, y coordinates of another lat/lng pair?
我看到过很多类似的问题,但是我很难将他们的答案与我的具体需求联系起来。
我有几组3 lat/lng坐标对。任何一组的坐标彼此之间的距离都在几公里以内。
对于每个集合,我想将坐标转换为x/y值,以便我可以绘制它们。
我想将1个坐标赋值为0,0,然后计算其他两个坐标的相对x/y值。
这个网站做我想要的,但不幸的是不分享算法:http://www.whoi.edu/marine/ndsf/cgi-bin/NDSFutility.cgi?form=0&从= LatLon& = XY
-
首先是一些明确的定义
- 让
a
为纬度<-pi/2,+pi/2>
- 设
b
为经度<0,+2*pi>
- 设
re
、rp
为地球的赤道半径和极半径 -
a0,b0, a1,b1, a2,b2
是你的球坐标点 - 和
x0,y0, x1,y1, x2,y2
是你想要的笛卡尔坐标
- 让
-
将坐标转换为相对于(
a0,b0
)- 让我们假设东方与x轴对齐,北极与y轴对齐
-
x0=0.0;
-
y0=0.0;
-
r1=re*cos(a1)+rp*sin(a1)
//点1实际半径 -
r2=re*cos(a2)+rp*sin(a2)
//点2的实际半径 -
x1=x0+((b1-b0)*r1);
-
x2=x0+((b2-b0)*r2);
-
y1=y0+((a1-a0)*re);
//这里应该用从0到a1-a0的椭圆曲线长度代替re -
y2=y0+((a2-a0)*re);
//这里应该用从0到a2-a0的椭圆曲线长度代替re
如果你!=rp则y1,y2坐标将不太准确
- 只需将((a1-a0)*re)替换为适当的公式
- 用于椭圆弧长计算(此为圆)
- 我懒得计算积分
- 无论如何,这已经足够好了(地球的离心率并没有那么糟糕)
- 你也可以标准化角度后的减法
-
while (a<-pi)
a+=2.0*pi; ' -
while (a>+pi)
a-=2.0*pi; '
事实上,这并不完全正确。网站确实共享算法,只是不是以人们期望的方式。
参见http://www.whoi.edu/marine/ndsf/utility/NDSFutility.js。
希望对你有帮助。
相关文章:
- 使用getElementById时不显示lat和lng
- 从GeoJson文件中获取单独的Lat和Lng值
- 通过lat和lng值设置标记
- 传单js:如何在地图上绘制任何标记的末尾获得Lat和lng
- 本地存储上的传单标记,如何获取标记 lat lng 并从存储中排除
- 谷歌地图API - 在数组中使用Lat Lng坐标绘制折线飞行路径
- MapBox 方向 - 获取自己的 Lat 和 Lng 方向
- 循环对象数组,直到lat/lng不为零
- 从一个有谷歌地图的地方获取lat和lng
- 如何将lat,lng信息传递到谷歌地图
- 热门从lat和lng获得谷歌地图
- 从多边形(多边形)边界内的多边形中心生成n个随机点(Lat-Lng对)
- 通过更新的lat&谷歌的lng将可拖动标记映射到另一个页面
- 可以'我不能从这个代码中得到lat和lng
- 投影([lat,lng])一直返回null
- googlemaps移动标记与来自ajax的lat/lng成功返回数据
- 将lat/lng坐标转换为给定地图上的像素(使用JavaScript)
- 如果我通过lat,lng作为变量,地图就会断裂
- 使用getCenter()创建GMap Lat/Lng对象时,v3.22中出现错误
- Google Geocoder为几个不同的地址返回同一组lat/lng.Lat/Lng是城市或乡镇的坐标,而不是地址