从Google地图链接中提取纬度和经度

从Google地图链接中提取纬度和经度

问题描述:

Supposing I had the following link to a google map: https://www.google.com.gh/maps/place/Niagara+Falls/@43.0828162,-79.0763516,17z/data=!4m15!1m9!4m8!1m0!1m6!1m2!1s0x89d34307412d7ae9:0x29be1d1e689ce35b!2sNiagara+Falls,+NY+14303,+United+States!2m2!1d-79.0741629!2d43.0828162!3m4!1s0x89d34307412d7ae9:0x29be1d1e689ce35b!8m2!3d43.0828162!4d-79.0741629

I would like to extract only the latitude and longitude from the following link. I assume I would need to use regular expression to do this but I have no idea how to go about it.

The co-ordinates in this case would be 43.0828162,-79.0763516

假设我有以下链接到谷歌地图: https://www.google.com.gh/maps /place/Niagara+Falls/@43.0828162,-79.0763516,17z/data=!4m15!1m9!4m8!1m0!1m6!1m2!1s0x89d34307412d7ae9:0x29be1d1e689ce35b!2sNiagara+Falls,+NY+14303,+United+States!2m2! 1d-79.0741629!2d43.0828162!3m4!1s0x89d34307412d7ae9:0x29be1d1e689ce35b!8m2!3d43.0828162!4d-79.0741629 p>

我想从中仅提取纬度和经度 以下链接。 我假设我需要使用正则表达式来执行此操作,但我不知道如何去做。 p>

此情况下的坐标为43.0828162,-79.0763516 p > div>

I would use a simple RegX like this

preg_match('/@(\-?[0-9]+\.[0-9]+),(\-?[0-9]+\.[0-9]+)/', $url, $match );

You can see it here, using your url.

https://regex101.com/r/hD7lV0/1

just for sake of explaining it

  • Match @ Literal At sign one time
  • Match -, literal hyphen/minus ? one or none times
  • Match [0-9], + one or more times
  • Match \. literal . decimal one time
  • Match [0-9], + one or more times
  • Match ,, literal , comma one time etc...

I would do.

<?php
    $latLong = split(',',preg_match('/@([0-9\.-,]*?)\//',$url));
    // $latLon = [lat, long] = $latLon[0],$latLom[1]
?>
  • Match @ Symbol (as start of match)
  • Any Number, Fullstop, minus or comma up-until the next '/' (escaped with '\')
  • Split it into two parts on the ','

If needs be you can test it with

if (count($latLon) > 2){
    die('Invalid URL Segment found.');
}

If you want to be really short with your regex

    $latLong = split(',',preg_match('/@(.*?)\//',$url));