【问题标题】:GPS format in PHPPHP中的GPS格式
【发布时间】:2010-03-30 21:37:39
【问题描述】:

如何用 PHP 从格式 52.593800、21.448850 格式 +52° 3​​5' 37.68"、+21° 26' 55.86" 像谷歌http://maps.google.pl/maps?hl=pl&t=m&q=52.593800,21.448850 那样制作?

【问题讨论】:

    标签: php gps


    【解决方案1】:

    直接来自Wikipedia

    给定一个十进制纵坐标,例如 -87.728055,将其转换为 DMS 形式很简单。有必要知道它是纬度坐标还是经度坐标才能完全转换它。方法如下:

    • 减去坐标的整数部分,留下小数部分。整数是度数。 87.728055 = 87 度。
    • 将剩余的小数部分乘以 60。这将产生整数部分的分钟数。 0.728055 x 60 = 43.6833 = 43 分钟。
    • 将分钟数的小数部分乘以 60,得到秒数。 0.6833 x 60 = 40.998 = 41 秒。可以将其计为 40 秒,截去小数点,将其四舍五入为 41,或保留整数。
    • 根据源编号是纬度坐标还是经度坐标以及编号的符号,添加 N/S/E/W 说明符。下表显示了可能性:
    键入目录。标志测试 纬度。 N + > 0 纬度。小号 - 0 长。 W -

    0°0'0" 纬度或经度的坐标既不是北也不是南,也不是东也不是西。它只是零纬度或零经度。

    最终结果是:W 87°43'41"。

    【讨论】:

    • 你知道如何减少Degrees和DMS之间的转换造成的差异吗?谢谢
    【解决方案2】:

    Source

    <?php
    
    function DMStoDEC($deg,$min,$sec)
    {
    
    // Converts DMS ( Degrees / minutes / seconds ) 
    // to decimal format longitude / latitude
    
        return $deg+((($min*60)+($sec))/3600);
    }    
    
    function DECtoDMS($dec)
    {
    
    // Converts decimal longitude / latitude to DMS
    // ( Degrees / minutes / seconds ) 
    
    // This is the piece of code which may appear to 
    // be inefficient, but to avoid issues with floating
    // point math we extract the integer part and the float
    // part by using a string function.
    
        $vars = explode(".",$dec);
        $deg = $vars[0];
        $tempma = "0.".$vars[1];
    
        $tempma = $tempma * 3600;
        $min = floor($tempma / 60);
        $sec = $tempma - ($min*60);
    
        return array("deg"=>$deg,"min"=>$min,"sec"=>$sec);
    }   
    

    将数组更改为所需的字符串应该很简单。

    【讨论】:

    • @Gordon:你知道如何减少Degrees和DMS之间的转换造成的差异吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多