【问题标题】:How do I convert coordinates to a Latitude & Longitude?如何将坐标转换为纬度和经度?
【发布时间】:2010-10-11 04:44:01
【问题描述】:

我正在对交通可视化应用程序进行逆向工程。我需要找出他们数据源的纬度。具体来说 XY 0,0 是什么。我发现的唯一公式计算两点之间的距离,或方位/距离的位置。

他们使用 XY 在非常旧的应用程序中显示地图。 XY 以英尺为单位。

我有这些坐标:

47.70446615506108, -122.34469839507263: x=1268314, y=260622
47.774182540800616,-122.3412994737105:  x=1269649, y=286031
47.60024792289405, -122.32767331735774: x=1271767, y=222532
47.57012494413499, -122.29129609983679: x=1280532, y=211374

我需要找出x=0, y=0 的纬度和经度是什么,以及找出这个的公式是什么。

他们有两个数据馈送,一个比另一个更新。具有最新数据的提要不包括纬度、经度,而仅包括 XY。我试图根据他们当前较少但信息更丰富(包括纬度、经度)的数据馈送来推断 0,0 是什么,因此我可以简单地将他们(更当前)数据馈送的 XY 坐标转换为纬度和经度。

【问题讨论】:

  • 当经度为负时,为什么 x 值不是负数?
  • 这是一个非常令人困惑的问题。 X 和 Y 距离给定的纬度/经度点的南北距离是多少?
  • ...或者是纬度/经度地图坐标,x/y是一些巨大位图上的坐标?
  • 感谢您的积分。我的问题更加冗长了。
  • 这也取决于您需要的准确度。

标签: gis latitude-longitude


【解决方案1】:

如果你看前两行数据,减去纬度

47.7044 - 47.7741 = -0.06972 degrees

每纬度有60海里,每海里有6076英尺。

-.06972 * 60 * 6076 = 25,415 ft

减去两个 'Y' 值:

260662 - 286031 = 25,409 ft

确实,这似乎证明了 X 和 Y 值以英尺为单位。

如果你取任何一个 Y 值,然后转换回度数,例如

260622 ft / ( 6076 ft/nm ) / ( 60 nm/degree ) = .71
286031 ft / 6076 / 60 = .78

因此,从(47.70 和 47.77)的纬度中减去这些值会得到非常接近 47 度,这应该是您的 y=0 点。

对于经度,赤道为 60 海里,两极为 0 海里。所以每度的英里数必须乘以纬度的余弦,所以大约是 cos(47 度),或 0.68。所以不是每度 6076 nm,而是大约 4145 nm。

所以对于 X 值,

1268314 ft / ( 4145 ft/nm ) / ( 60 nm/degree ) = 5.10 degrees
1269649 ft / 4145 / 60 = 5.10 degrees

这些X数随着纬度的增加而增加(负数较小),所以我相信你应该加5.1度,这意味着X基点大约是

-122.3 + 5.1 = 117.2 West longitude for your x=0 point.

这大概是斯波坎WA的位置。

所以给定 X=1280532, Y=211374

Lat = 47 + ( 211374 / 6096 / 60 ) = 47.58
Lon = -117.2 - ( 1280532 / ( 6096 * cos(47.58)) / 60 ) = -122.35

大致相当于给定数据47.57和-122.29

差异可能是由于不同的投影 - X,Y 系统可能是“扁平”投影,而不是适用于球形投影的纬度/经度?因此,准确地说,您可能还需要更高级的数学或开源库:)

这个问题也可能有帮助,它包含计算大圆距离的代码:

Calculate distance between two latitude-longitude points? (Haversine formula)

【讨论】:

  • 如果域不是很大并且您不需要非常高的准确度,这种信封背面的东西就可以了
  • 是的,现在只是试图理解数据。这是相当基本的数学,计算大圆距离。
  • 我真的不推荐这种方法,如果不使用正确的计算,实际的错误有多大真的很令人惊讶。
  • 只是想帮助他理解数据以及 x=0, y=0 点可能在哪里。正如 MarkJ 所说,信封的背面。
【解决方案2】:

有许多不同的坐标系。您需要找出纬度/经度(例如 WGS84 等)和 x/y 的坐标系(例如,可能是某种投影系统)的坐标系。

获得这些信息后,您可以使用多种工具进行转换和操作。一个示例(免费开源编码库)是proj4

【讨论】:

  • 我用 Proj.4 来做类似的事情——强烈推荐。
  • 更多迂腐,但 proj4 不是命令行工具而不是编码库吗? (显然你可以从代码中脱壳)
  • MarkJ:两者兼而有之。我们将它用作图书馆,它非常棒。
【解决方案3】:

询问他们使用的是什么坐标系! (或者如果您从某个数据库中获取数据集,请查看数据集的元数据,它应该会告诉您。否则我会怀疑它的价值)

这很可能是state plane coordinate systems 之一。它们用于地球的局部区域(有点像UTM),并且经常用于测量。

您可以使用CORPSCON(或其他 GIS 程序;如果您有 GIS 选项包,ExpertGPS 将执行此操作,但它不是免费的。我忘记了 GPSBabel 是否进行转换)在纬度/经度和任何的状态平面坐标系。您还需要知道坐标在哪个datum。WGS84 和 NAD83 非常接近,但 NAD27 不同。

【讨论】:

  • +1 表示美国特定,因为 OP 在西雅图提供了 lat-long。由于我们中的一些人住在其他地方,因此投票率最高的更普遍的答案仍然很好;)
【解决方案4】:

您已经对坐标系提出了很好的建议,所以我将介绍一下我过去使用过的库。

Geotrans 已获美国国防部批准使用,因此您可以确定它经过了良好的测试。您可以从这里获取它:

http://earth-info.nga.mil/GandG/geotrans/index.html

这可能不是正确的链接,因为该页面讨论的是应用程序,而不是库。我希望该库位于 Developers 包中。许可条款在记忆中非常宽松,但请务必在将其用于商业用途之前查看条款。

编辑:

可以在此处找到有关 Geotrans 许可的有趣讨论:

http://www.mail-archive.com/debian-legal@lists.debian.org/msg39263.html

【讨论】:

    【解决方案5】:

    Over here, I said this:

    在 Java 中,我将使用 OpenMap converter 从 UTM 中的点表达式到使用纬度和经度的表达式(假设 GPS 中最常用的 WGS-84 椭球)。

    OpenMap 是开源的,我会发布一个指向他们下载页面的链接,但他们有一个简短的许可证脚本。因此,为避免粗鲁,我不会进行深层链接。相反,请前往 their homepageclick Downloads

    这应该可以直接解决您的问题,或者至少为您指明一个有用的算法。

    【讨论】:

      【解决方案6】:

      我曾多次使用 Brenor Brophey 的 gPoint PHP class 进行此操作。可靠的结果,GPL 代码,并且易于部署。推荐。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-02
        • 2020-02-23
        • 1970-01-01
        • 1970-01-01
        • 2020-03-29
        • 2011-02-11
        • 1970-01-01
        • 2021-04-19
        相关资源
        最近更新 更多