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 に答える