GPS坐标转换

3

我正在使用VisionTek 86VT设备开发GPS跟踪网站。

http://www.visiontek.co.in/vehicle-tracking-systems/86vt.html

我能够获取设备位置,但无法正确解析它,因为我们在谷歌地图中使用的格式不同。例如,对于在谷歌地图上的Visakhapatnam的经度,我得到了以下值:17480249N。

我不知道这是什么格式,以及如何将17480249N转换为17.xxx。我也知道,“N”代表正值。

请帮忙,我正在使用PHP,但任何逻辑都会受到赞赏。

这是我从设备获取响应的方式。请查看粗体文本以获取坐标,我靠近Visakhapatnam海滩。

$1,GlamourBik,14,11,10,14,40,08,17434800N,083185195E,02.1,13,0,0,A#

$2,GlamourBik,14,11,10,14,45,08,17440069N,083187747E,19.8,12,1,0,A#

$1,GlamourBik,14,11,10,16,53,42,17440319N,083176376E,00.3,178,1,0,A#

$1,GlamourBik,14,11,10,16,58,41,17440319N,083176376E,00.0,166,1,0,A#

$1,GlamourBik,14,11,10,17,03,42,17440319N,083176376E,00.0,42,1,0,A#

3个回答

3

你确定不是纬度吗?(N应该表示北纬,经度是东/西

在JavaScript中,这可能会做你想要的事情。

function getUsable ( coordinate ) 
{
  var signMultiplier = {'S':-1,'N':1, 'W':-1, 'E':1};
  var sign = coordinate[ coordinate.length-1 ];
  return signMultiplier[sign] * parseInt(coordinate.replace( sign, '' ), 10) / 1000000;
}

使用getUsable('17480249N')将返回适用于谷歌地图的版本。

我假设这个格式是六位浮点精度的整数表示。

N是正数,因为它表示北方,而不是南方,南方应该是负数。
同样,E(东)和W(西)也是如此。

演示


更新

在你提供完整坐标并得到 @wallyk 的答案后,以下是一个可以计算DMS格式坐标的版本。

function getUsableDMS( coordinate )
{
    var signMultiplier = {'S':-1,'N':1, 'W':-1, 'E':1};
    var sign = coordinate[ coordinate.length-1 ];
    var length = coordinate.length-1;
    var D = parseInt( coordinate.substr(0,(length==8)?2:3), 10 );
    var M = parseInt( coordinate.substr(2,2), 10 );
    var S = parseInt( coordinate.substr(4,4), 10 ) / 100;
  return signMultiplier[sign] * (D + (M/60) + (S/3600));
}

演示请参见 http://jsfiddle.net/gaby/Rjk8e/1/


示例

您问题中的第一个坐标17434800N083185195E位于任何一个地方(两者都在海上)吗?

使用第一种方法翻译的谷歌地图

使用DMS方法翻译的谷歌地图


谢谢Gaby,我已经获取到了数值,并且与Google匹配,但是大约有1公里的不准确度。我不明白是设备还是转换代码的问题。我需要尝试从其他位置获取数据。 - AjayR
@Ajay,根据@wallyk提到的DMS转换,我更新了答案。同时,我也在Google地图上标出了结果点。你能否验证这两个地图中的一个是否指向正确的位置? - Gabriele Petrioli
正如在这两种情况下所提到的,我们得到的是海洋中的点,而我则在海滩上或靠近海滩。可能设备也有问题,因为他们提到它可能不是100%准确的位置。 - AjayR
@Ajay,确实如此。设备的不准确可能是一个因素,但1公里的偏差似乎有点大(*但我不知道GPS设备的规格和规则。这可能是标准..*)。我想联系公司获取更多信息可能是明智的选择。 - Gabriele Petrioli

2

维萨卡帕特南位于17°42'N,83°15'E或者用十进制表示为+17.7°,+83.25°。由于维萨卡帕特南相对较大,17480249可能指的是17°48'2.49",距离EESE约2.5公里。

这就是GPS设备在NMEA 0183总线上格式化数据的方式。

将这些量作为字符串处理。对于纬度,使用前两个数字作为度数,第二组数字作为分钟数,第三组数字作为秒数,任何额外的数字都作为秒后小数点后的数字。对于经度,使用前三个数字作为度数,其余数字与纬度相同。

要将度、分和秒(DMS)转换为度数,请使用公式D + M/60.0 + S/3600.0


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接