从Google Maps img的src中提取坐标

时间:2012-12-29 20:46:05

标签: php regex string google-maps split

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

2 个答案:

答案 0 :(得分: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
)

答案 1 :(得分:0)

这不完美,但它应该适合你一点修改。它还显示了一个简单的可扩展正则表达式,可用于分解地图网址。

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

echo "X: " . $coordinates[0] . "<br />Y: " . $coordinates[1];
  • 编辑 修正了拼写错误