我正在逆向工程运输可视化应用程序。我需要找出数据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坐标转换为纬度和经度。
答案 0 :(得分:9)
如果查看前两行数据,并减去纬度
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系统可能是“扁平”投影而不是适用于球形投影的纬度/经度?所以为了准确你可能还需要更高级的数学或那个开源库:)
这个问题也许有用,它包含计算大圆距离的代码:
Calculate distance between two latitude-longitude points? (Haversine formula)
答案 1 :(得分:6)
有许多不同的坐标系。你需要找出lat / lon(例如WGS84等)和x / y的坐标系统(例如某种类型的预测系统)。
获得该信息后,您可以使用多种工具进行转换和操作。一个例子(免费开源编码库)是proj4。
答案 2 :(得分:5)
询问他们使用的坐标系统! (或者如果你从某个数据库获得了数据集,请查看数据集的元数据,它应该告诉你。否则我会对它的价值持怀疑态度)
这很可能是state plane coordinate systems之一。它们用于地球的局部区域(有点像UTM),并且经常用于测量。
您可以使用CORPSCON(或其他GIS程序; ExpertGPS如果你有GIS Option Pack但它不是免费的,我会这样做。我忘记了GPSBabel是否转换)要转换在lat / long和任何状态平面坐标系之间。您还需要知道坐标所在的datum .WGS84和NAD83非常接近,但NAD27不同。
答案 3 :(得分: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
答案 4 :(得分:0)
在Java中,我会使用从UTM中的点表达式OpenMap converter到使用纬度和经度的点(假设在GPS中最常用的WGS-84椭圆体)。
OpenMap是开源的,我会发布一个链接到他们的下载页面,但他们有一个简短的许可证脚本。所以,为了避免粗鲁,我不会深刻的联系。相反,请前往their homepage和click Downloads。
这应该直接解决您的问题,或者至少指向一个有用的算法。
答案 5 :(得分:0)
我曾多次使用Brenor Brophey的gPoint PHP class来做这件事。结果稳定,GPL代码,易于部署。推荐使用。