用PHP进行地理转换

时间:2009-08-28 15:06:59

标签: php

我想在php中将lat / lng字符串转换为小数。 一个例子:

N47° 30.5951' = 47+(30.59517/60) = 47.509918333

有没有简单的方法可以做到这一点,正则表达式?

由于

3 个答案:

答案 0 :(得分:1)

不确定E和W是否属于此处,但除此之外:

$regex = "/[EWNS](\d{1,3})°\ (\d{1,3}\.\d{0,10})'/";  
if (preg_match($regex, "N47° 30.5951'", $matches))
{
   $result = $matches[1] + ((float) $matches[2] / 60);
}

答案 1 :(得分:0)

你不能在正常的正则表达式替换中进行算术运算,但你可以编写一个回调函数并使用preg_replace_callback。

function matches_to_decimal($matches) {
    return $matches[2] + ($matches[3]/60);
}

$inputString = "N47° 30.5951'";
$resultDecimal = preg_replace_callback('/(N|S)(\d+)° (\d+\.?\d*)\'/',
    "matches_to_decimal",
    $inputString);

顺便说一句,纬度和经度通常写成47°30'35“N,123°56'12”W,所以你可以相应地调整正则表达式和回调函数。

答案 2 :(得分:0)

preg_match('/^N(\d+)\° (\d+(?:\.\d+)?)\'$/i', "N47° 30.5951'", $bits);
$coord = floatval($bits[1]) + (floatval($bits[2])/60);

原谅我对拉特的无知,如果我不合时宜的话。