Php 从谷歌地图url获取坐标的最佳方式是什么?
我已经编写了一个php函数从谷歌地图url获取坐标 此函数用于获取url中的所有坐标(lat、lng) 如果url中有多个坐标,它将获取每个坐标并保存在数组中 e、 g 在第一个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
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);