【问题标题】:Extract coordinates from src of a Google Maps img从谷歌地图 img 的 src 中提取坐标
【发布时间】:2012-12-29 20:46:04
【问题描述】:

我想要的是从字符串中获取坐标(从 Google Maps img 的 src 中获取)。下面是我的一个失败的正则表达式尝试。

那么,最好的方法是什么?用正则表达式?那么应该如何组合呢?

$string = "//maps.google.com/maps/api/staticmap?sensor=false&center=56.393906,16.066206&zoom=12&size=344x170&language=sv&markers=56.393906,16.066206&maptype=roadmap&scale=1";

$matches = array();
preg_match('/center=(.*?)\zoom/s', $string, $matches);

... ?

想要的最终结果:

$coordiates = (
    [0] = '56.393906',
    [1] = '16.066206'
);

【问题讨论】:

  • 试试/(?<=center=).*?(?=&)/。用逗号展开匹配。

标签: php regex string google-maps split


【解决方案1】:

您不应该对这样的事情使用正则表达式,因为如果 URL 更改,它会更慢并且更容易中断。 PHP 已经为这样的事情内置了函数。使用parse_url()parse_str() 轻松完成。

$string = "//maps.google.com/maps/api/staticmap?sensor=false&center=56.393906,16.066206&zoom=12&size=344x170&language=sv&markers=56.393906,16.066206&maptype=roadmap&scale=1";

parse_str(parse_url($string, PHP_URL_QUERY), $vars);

print_r($vars);

输出:

Array
(
    [sensor] => false
    [center] => 56.393906,16.066206
    [zoom] => 12
    [size] => 344x170
    [language] => sv
    [markers] => 56.393906,16.066206
    [maptype] => roadmap
    [scale] => 1
)

所以要获取您的坐标,只需执行以下操作:

$coords = explode(',', $vars['center']);
print_r($coords);

// Outputs:
Array
(
    [0] => 56.393906
    [1] => 16.066206
)

【讨论】:

  • 很好的答案。非常感谢!
【解决方案2】:

这并不完美,但只要稍作修改,它就可以满足您的需求。它还显示了一个简单的可扩展正则表达式,您可以使用它来分解地图网址。

$data = preg_replace('/.*?center=(.*?)\,(.*?)&amp(.*?)/g', '$1~$2~$3~', $string);
$coordinates = explode('~', $data);

echo "X: " . $coordinates[0] . "<br />Y: " . $coordinates[1];
  • 已编辑 修正错别字

【讨论】:

  • 您应该测试代码。第一行后缺少分号,preg_match() 需要 3 个参数,您只提供了 2 个,PCRE 中没有“g”修饰符之类的东西。还有其他错误,我尝试为您修复代码,但我不确定您是如何尝试执行此操作的。
  • 你仍在使用 'g' 修饰符,没有这样的东西us3.php.net/manual/en/reference.pcre.pattern.modifiers.php。请在 E_ALL 上使用错误报告测试您的代码,因为仍然存在多个错误,所以这些都不会正确执行。
  • 你想要的是这个preg_match('/center=([^,]+),([^&amp;]+)/', $string, $coords); echo 'X: ' . $coords[1] . '&lt;br /&gt;Y: ' . $coords[2];。无论如何,不​​应将正则表达式用于此任务,因为 PHP 具有完成此任务的函数,不需要调用 PCRE 引擎并且更可靠。
猜你喜欢
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多