我正在逆向工程运输可视化应用程序。我需要找出数据Feed来源的纬度。具体是XY 0,0是什么。我发现的唯一公式是计算两点之间的距离,或轴承/距离的位置。

他们使用XY在非常遗留的应用程序中显示地图。 XY处于FEET。

我有这些坐标:

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 的纬度和经度是什么,以及找出这个的公式。

他们有两个数据源,一个比另一个更新。具有最新数据的Feed不包括纬度,经度,但仅包括XY。我试图根据它们更少的电流,更多信息(包括lat,lon)数据馈送来推断0,0是什么,所以我可以简单地将它们(更新的)数据馈送的XY坐标转换为纬度和经度。

有帮助吗?

解决方案

询问他们使用的坐标系统! (或者如果你从某个数据库获得了数据集,请查看数据集的元数据,它应该告诉你。否则我会对它的价值持怀疑态度)

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

您可以使用 CORPSCON (或其他GIS程序; ExpertGPS 会在你拥有GIS Option Pack时执行此操作,但它不是免费的。我忘记了 GPSBabel 转换)在lat / long和任何州平面坐标系之间进行转换。您还需要知道坐标所在的基准 .WGS84和NAD83是非常接近,但NAD27不同。

其他提示

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

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英里。因此,每度的英里数必须乘以纬度的余弦,因此近似(47度)或.68。因此,不是每度6076纳米,而是大约4145纳米。

所以对于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公式)

有许多不同的坐标系。你需要找出lat / lon(例如WGS84等)和x / y的坐标系统(例如某种类型的预测系统)。

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

你已经对坐标系提出了很好的建议,所以我只会使用我过去使用过的图书馆。

Geotrans已被美国国防部批准使用,因此您可以确定它已经过充分测试。你可以从这里抓住它:

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

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

编辑:

有关Geotrans许可的有趣讨论可以在这里找到:

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

在这里,我这样说:

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

OpenMap是开源的,我会发布一个链接到他们的下载页面,但他们有一个简短的许可证脚本。所以,为了避免粗鲁,我不会深刻的联系。相反,请前往他们的主页点击下载

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

我使用了Brenor Brophey的 gPoint PHP类来执行此操作有几次。结果稳定,GPL代码,易于部署。推荐使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top