Извлечь координаты широты и долготы из строки php - PullRequest
3 голосов
/ 24 января 2011

Мне нужно извлечь координаты широты и долготы из строки, используя php. Строка всегда будет отформатирована так:

"(42.32783298989135, -70.99989162915041)"

Однако длина каждого значения будет варьироваться от использования к использованию. Каков наилучший способ извлечь значения? Спасибо!

Ответы [ 5 ]

10 голосов
/ 24 января 2011

Вы можете использовать sscanf для этого:

sscanf($string, '"(%f, %f)"', $lat, $lng);

Тест:

php > sscanf('"(42.32783298989135, -70.99989162915041)"', '"(%f, %f)"', $lat, $lng);
php > var_dump($lat, $lng);
float(42.327832989891)
float(-70.99989162915)
1 голос
/ 24 января 2011
$withoutParentheses = substr($string, 1, -1);
$coordinates = explode(', ', $coordinates);
$longitude = floatval($coordinates[0]);
$latitude = floatval($coordinates[1]);
1 голос
/ 24 января 2011

Вы можете использовать регулярное выражение для извлечения чисел из скобок, а затем использовать команду explode для разбиения чисел в массив.

Ваше регулярное выражение будет что-то вроде

/(-?[0-9]+.[0-9]+, -?[0-9]+.[0-9]+)/

и ваш разделитель для команды взрыва будет запятой.

0 голосов
/ 24 января 2011

Вы можете сделать что-то вроде этого:

            $str = "(42.32783298989135, -70.99989162915041)";

            function extractlatlong($str){
                $latlong = explode(",",$str);

                if(count($latlong) == 2){
                    $lat = preg_replace("%[^0-9.]%","",$latlong[0]);
                    $long = preg_replace("%[^0-9.]%","",$latlong[1]);
                    return array("lat"=>$lat,"long"=>$long);
                } else {
                    return NULL;
                }
            }

            print_r(extractlatlong($str));
0 голосов
/ 24 января 2011

Вот что я придумал сам:

function LatFromString($mCenterString){
    //(42.32783298989135, -70.99989162915041)
    $mLatLong = explode(",", $mCenterString);
    $mLat = '';
    if(count($mLatLong) == 2){
        $mLat = substr($mLatLong[0], 1);
    }
    return $mLat;
}
function LongFromString($mCenterString){
    //(42.32783298989135, -70.99989162915041)
    $mLatLong = explode(",", $mCenterString);
    $mLat = '';
    if(count($mLatLong) == 2){
        $mLong = substr($mLatLong[1], 0, -1);
    }
    return $mLong;
}

Как это выглядит?

...