7

我正在对运输可视化应用程序进行逆向工程。我需要找出他们数据源的纬度。具体来说 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 坐标转换为纬度和经度。

4

6 回答 6

9

如果您查看前 2 行数据,然后减去纬度

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 系统可能是“扁平”投影,而不是适用于球形投影的纬度/经度?因此,准确地说,您可能还需要更高级的数学或开源库:)

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

计算两个经纬度点之间的距离?(Haversine 公式)

于 2009-03-04T07:24:59.233 回答
6

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

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

于 2009-03-04T06:23:38.083 回答
5

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

这很可能是状态平面坐标系之一。它们用于地球的局部区域(有点像UTM),并且经常用于测量。

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

于 2009-03-04T14:02:22.567 回答
1

您已经对坐标系提出了很好的建议,所以我将附上我过去使用过的图书馆并取得了巨大的成功。

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

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

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

编辑:

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

http://www.mail-archive.com/debian-legal@lists.debian.org/msg39263.html
于 2009-06-25T04:58:25.333 回答
0

在这里,我是这样说的:

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

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

那应该直接解决您的问题,或者至少将您指向一个有用的算法。

于 2009-04-15T20:41:40.417 回答
0

我曾多次使用 Brenor Brophey 的gPoint PHP 类来执行此操作。可靠的结果,GPL 代码,并且易于部署。受到推崇的。

于 2009-04-15T20:47:53.600 回答