Php 从谷歌地图url获取坐标的最佳方式是什么?

Php 从谷歌地图url获取坐标的最佳方式是什么?,php,google-maps,Php,Google Maps,我已经编写了一个php函数从谷歌地图url获取坐标 此函数用于获取url中的所有坐标(lat、lng) 如果url中有多个坐标,它将获取每个坐标并保存在数组中 e、 g 在第一个url中,我想得到这个坐标39.0101036,30.6895281 在第二个url中,我想获得44.2850711,25.492103944.2897146,25.477562944.28462,25.5294405 它可以处理两种情况 $url="https://www.google.com/maps/place/T

我已经编写了一个php函数从谷歌地图url获取坐标

此函数用于获取url中的所有坐标(lat、lng)

如果url中有多个坐标,它将获取每个坐标并保存在数组中

e、 g

在第一个url中,我想得到这个坐标
39.0101036,30.6895281

在第二个url中,我想获得
44.2850711,25.4921039
44.2897146,25.4775629
44.28462,25.5294405

它可以处理两种情况

$url="https://www.google.com/maps/place/Turkey/@39.0101036,30.6895281,6z/data=!3m1!4b1!4m5!3m4!1s0x14b0155c964f2671:0x40d9dbd42a625f2a!8m2!3d38.9893026!4d35.4364014?hl=en";
$url="https://www.google.com/maps/dir/Videle/44.2850711,25.4921039/44.2897146,25.4775629/44.28462,25.5294405/@44.2801102,25.4944293,14z/data=!4m11!4m10!1m5!1m1!1s0x40ade955dedb9419:0xe28ca19380f0b772!2m2!1d25.5332629!2d44.2748537!1m0!1m0!1m0!3e2?hl=en";
但我不确定这是否足以处理所有案件

如果有我的职能部门无法处理的情况,请告诉我

function urlToCoor($url){
    $originalUrl=$url;

    $coor=array();
    $at=strpos($url, "@");
    $url=substr($url, $at+1);

    $o=new Location();

    //get lat
    $comma=strpos($url, ",");
    $lat=substr($url, 0, $comma);
    $url=substr($url, $comma+1);

    //get lng
    $comma=strpos($url, ",");
    $lng=substr($url, 0, $comma);
    $url=substr($url, $comma+1);

    $o->lat=$lat;
    $o->lng=$lng;

    array_push($coor, $o);

    //get other coor
    if(strpos($originalUrl, '/dir/Videle/')){
        $coor=array();
        $start=strpos($originalUrl, '/dir/Videle/')+12;
        $end=strpos($originalUrl, '/@');
        $url=substr($originalUrl, $start, $end - $start);

        $otherCoor=explode('/', $url);
        foreach($otherCoor as $value){
            $lat=explode(',', $value)[0];
            $lng=explode(',', $value)[1];

            $o=new Location();
            $o->lat=$lat;
            $o->lng=$lng;

            array_push($coor, $o);
        }
    }else if(strpos($originalUrl, '/dir/')){
        $coor=array();
        $start=strpos($originalUrl, '/dir/')+5;
        $end=strpos($originalUrl, '/@');
        $url=substr($originalUrl, $start, $end - $start);

        $otherCoor=explode('/', $url);
        foreach($otherCoor as $value){
            $lat=explode(',', $value)[0];
            $lng=explode(',', $value)[1];

            $o=new Location();
            $o->lat=$lat;
            $o->lng=$lng;

            array_push($coor, $o);
        }
    }
    return $coor;
}

在这种情况下,Regex可能是比strpo更好的选择

这将匹配
@
和以逗号分隔的点的数字

$array[1]将包含具有以下内容的子阵列:

array(2) {
    [0]=>
    string(21) 
"39.0101036,30.6895281"
    [1]=>
    string(21) 
"44.2801102,25.4944293"
  }
更新:

试试这个
它将获取链接中的所有lat/lon,并将它们保存在单独的阵列中

$matches[0]是完全匹配,表示lat和lon

$matches[1]是lats

$matches[2]是lons

$re = '/(\d+\.\d+),(\d+\.\d+)/';


$str = 'https://www.google.com/maps/place/Turkey/@39.0101036,30.6895281,6z/data=!3m1!4b1!4m5!3m4!1s0x14b0155c964f2671:0x40d9dbd42a625f2a!8m2!3d38.9893026!4d35.4364014?hl=en
https ://www.google.com/maps/dir/Videle/44.2850711,25.4921039/44.2897146,25.4775629/44.28462,25.5294405/@44.2801102,25.4944293,14z/data=!4m11!4m10!1m5!1m1!1s0x40ade955dedb9419:0xe28ca19380f0b772!2m2!1d25.5332629!2d44.2748537!1m0!1m0!1m0!3e2?hl=en';

preg_match_all($re, $str, $matches);

var_dump($matches);

我刚刚更新了我的函数,因为我发现了一个问题,如果url中存在
/dir/
,我不应该得到
@xxxxx,xxxxx
,因为它只是屏幕的坐标,用链接更新你的问题以及你想从每个链接中提取什么。阅读你的代码是一项艰苦的工作。
$re = '/(\d+\.\d+),(\d+\.\d+)/';


$str = 'https://www.google.com/maps/place/Turkey/@39.0101036,30.6895281,6z/data=!3m1!4b1!4m5!3m4!1s0x14b0155c964f2671:0x40d9dbd42a625f2a!8m2!3d38.9893026!4d35.4364014?hl=en
https ://www.google.com/maps/dir/Videle/44.2850711,25.4921039/44.2897146,25.4775629/44.28462,25.5294405/@44.2801102,25.4944293,14z/data=!4m11!4m10!1m5!1m1!1s0x40ade955dedb9419:0xe28ca19380f0b772!2m2!1d25.5332629!2d44.2748537!1m0!1m0!1m0!3e2?hl=en';

preg_match_all($re, $str, $matches);

var_dump($matches);