2

我想要的是从字符串中获取坐标(从 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'
);
4

2 回答 2

3

你不应该对这样的事情使用正则表达式,因为如果 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
)
于 2012-12-29T20:52:02.963 回答
0

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

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

echo "X: " . $coordinates[0] . "<br />Y: " . $coordinates[1];
  • 编辑 修正错别字
于 2012-12-29T20:59:21.947 回答