如果我有一个 lat/lng,我假设它是 0,0,那么我如何计算另一个 lat/lng 对的 x、y 坐标?

Posted

技术标签:

【中文标题】如果我有一个 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? 【发布时间】:2014-10-16 00:38:59 【问题描述】:

我已经看到这个问题的许多变体,但无法将它们的答案与我的特定需求联系起来。

我有几组 3 lat/lng 坐标对。任何集合中的坐标都在几公里范围内。

对于每个集合,我想将坐标转换为 x/y 值,以便绘制它们。

我想将 1 个坐标分配给 0,0,然后计算其他两个坐标的相对 x/y 值。

这个网站做我想做的事,但不幸的是没有分享算法: http://www.whoi.edu/marine/ndsf/cgi-bin/NDSFutility.cgi?form=0&from=LatLon&to=XY

【问题讨论】:

当然,既然地球是一个球体,那就要看扁平化的策略了。我不知道您的问题是什么,但是任何用于地图绘制的好的 API 都可以让您仅通过它们的 lat/lng 值绘制一些点。例如,谷歌地图的 API 就是这样做的。 您希望达到的准确度。您可以使用所谓的球形墨卡托(从纬度/经度到平面的投影,为谷歌地图开发)将您的坐标转换为米,然后标准化是一件简单的事情,以便其中一个为 0 ,0,以及与此相关的其余部分,通过从所有这些中减去相同的数量。 因为我的点非常接近( 【参考方案1】:

    首先要明确一些定义

    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); // 这里不是 re 应该是从 0 到 a1-a0 的椭圆曲线的长度 y2=y0+((a2-a0)*re); // 这里不是 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;` 为了安全起见...

【讨论】:

【参考方案2】:

实际上,这并不完全正确。该网站确实共享算法,只是不是以人们期望的方式。

见http://www.whoi.edu/marine/ndsf/utility/NDSFutility.js。

希望对您有所帮助。

【讨论】:

虽然您提供的链接可能会回答问题,但最好将解决方案的基本部分直接发布在您的 Stack Overflow 答案中,以防链接将来失效。

以上是关于如果我有一个 lat/lng,我假设它是 0,0,那么我如何计算另一个 lat/lng 对的 x、y 坐标?的主要内容,如果未能解决你的问题,请参考以下文章

将webmercator坐标转换为lat lng

如果 lat/lng 为空,要在 lat/lng 数据库字段中添加啥?

根据地址获取 lat,lng

根据经纬度 算2点距离

在图像上绘制 lat/lng 点

如何在Android Google Maps中获取距指定点(Lat,Lng)X距离的纬度,经度