【问题标题】:Extract Latitude and Longitude from Google Map Link从谷歌地图链接中提取经纬度
【发布时间】:2025-12-21 06:40:16
【问题描述】:

假设我有以下指向谷歌地图的链接: 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

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

本例中的坐标为 43.0828162,-79.0763516

【问题讨论】:

    标签: php regex


    【解决方案1】:

    我会使用这样的简单 RegX

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

    你可以在这里看到它,使用你的网址。

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

    只是为了解释

    • 匹配 @ Literal At sign 一次
    • 匹配-,连字符/减号? 一次或一次
    • 匹配[0-9]+ 一次或多次
    • 匹配\.字面量.十进制一次
    • 匹配[0-9]+ 一次或多次
    • 匹配,,文字,逗号一次 等等……

    【讨论】:

      【解决方案2】:

      我愿意。

      <?php
          $latLong = split(',',preg_match('/@([0-9\.-,]*?)\//',$url));
          // $latLon = [lat, long] = $latLon[0],$latLom[1]
      ?>
      
      • 匹配@符号(作为匹配的开始)
      • 任何数字、句号、减号或逗号,直到下一个“/”(用“\”转义)
      • 在','上将它分成两部分

      如果需要,您可以使用它进行测试

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

      如果你想用你的正则表达式真的很短

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

      【讨论】: