【问题标题】:GPS Coordinates translatingGPS坐标转换
【发布时间】:2011-04-30 17:18:23
【问题描述】:

我正在使用 VisionTek 型号为 86VT 的设备开发 GPS 跟踪网站

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

我能够获取设备位置,但无法正确解析它,就像我们在谷歌地图中使用的那样。 为了。前任。我得到以下维萨卡帕特南经度,在谷歌地图位置的原始坐标中为 17.xxx。

17480249N

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

请帮忙,我正在使用 PHP,但任何逻辑都将不胜感激。

这就是我从设备获取响应的方式。坐标请看粗体字,我在维沙卡帕特南海滩附近。

$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#

【问题讨论】:

    标签: php google-maps gps


    【解决方案1】:

    你确定不是纬度吗? (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(西)相同。

    http://jsfiddle.net/gaby/Rjk8e/的演示


    更新

    在您使用完整坐标和@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 是否位于任意位置(两者都是在大海中)的

    google map using translation by first method

    google map using translation by DMS method?

    【讨论】:

    • 感谢 Gaby,我得到了值及其与谷歌的匹配,但大约 1 公里有一些不准确。我不明白设备或转换代码的问题。我需要从其他位置尝试。
    • @Ajay,用@wallyk 提到的 DMS 翻译更新了答案。还将结果点发布为谷歌地图。您能否验证两张地图中的一张是否指向正确的位置?
    • 正如在这两种情况下所提到的,我们在海中得到了一点,当我在海滩上或靠近海滩时。设备也可能存在问题,因为他们提到它可能不是 100% 准确的位置。
    • @Ajay,确实如此。设备的不准确可能是一个因素,但距离 1 公里似乎还有很长的路要走(但我不知道 GPS 设备的规格和规则。这可能是标准..)。我想与公司联系以获取更多信息可能是谨慎的做法。
    【解决方案2】:

    Visakhapatnam 位于北纬 17° 42′、东经 83° 15′ 或带符号十进制 +17.7°、+83.25°。由于维萨卡帕特南相当大,17480249 可能意味着 17° 48' 2.49 ",即 EESE 大约 2.5 公里。

    例如,这就是 GPS 单元为NMEA 0183 bus 格式化数据的方式。

    将数量作为字符串处理。对于纬度,使用第一对数字作为度数,第二对作为分钟,第三对作为秒,以及任何其他数字作为秒小数点后的数字。对于经度,使用前三位数字作为度数,其余数字与纬度相同。

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

    【讨论】:

      【解决方案3】:

      此页面上没有这种格式

      http://en.wikipedia.org/wiki/Geographic_coordinate_conversion

      我的建议是多收集一些城市的数据,希望大家能从中找出规律。

      【讨论】:

        猜你喜欢
        • 2019-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多