2012-05-14 1 views
3

mysqlの地理空間的な列から、私は配列に変換したい次の文字列値を取得しています。究極の目標はgeoJSONに変換することです。この文字列を配列に変換するために使用する正規表現はどれですか?

POLYGON((4.885838 52.388063,4.891061 52.388381,4.890973 52.382909)) 

この文字列には、x座標とy座標がスペースで区切られ、ペアがカンマで区切られた3つの座標ペアがあります。正確な数は分かっていません。また、POLYGONは3つの異なる設定と異なる場合があります。

私のregの知識を持っています。不確実な部分として、二重括弧で座標の一部で

$pat = '/^(POLYGON|LINESTRING|POINT)(\(\() (.....) (\)\))$/'; 
preg_match($pat, $str, $matches); 

:表現私はこれを思い付きました。

誰でも私にこれを手伝ってもらえますか?

編集最終的には結果の配列は次のようになります。

$array['type'] = POLYGON | LINESTRING .... 
$array['coordinates'] = array of all the coordinates. 
+0

アレイはどのように見えますか? – Joey

+0

結果配列の例を追加しました。それを調べていただきありがとうございます! – stUrb

答えて

0

を、私はそれだけで座標文字列にexplodearray_mapを使用するように簡単に、より保守性だと思う:

$coordString = $matches[3]; 
$coordinates = array_map(function($e) { return explode(' ', $e); }, 
         explode(',', $coordString)); 
2

ます」これを段階的に取り組むことをお勧めします。例えば、

  1. 一のグロブとして座標の文字列全体を検索:最初の段階は、正規表現を使用する必要が

    "4.885838 52.388063,4.891061 52.388381,4.890973 52.382909"

  2. 分割その文字列をカンマで区切られた座標対に変換します。 Pythonでは、str.split(',')を使用します。私はあなたのPHP同等物はexplode()と呼ばれると信じています。 str.split(' ')

    [ "4.885838 52.388063" , "4.891061 52.388381" , "4.890973 52.382909" ]

  3. スプリットは、各スペースで区切られた2つの数値に座標対。

    [ ["4.885838","52.388063"] , ["4.891061","52.388381"] , ["4.890973","52.382909"] ]

  4. 山車に変換します。 Pythonではfloat()を使用しています:あなたのローカルの同等物はstr2float()または類似のものと呼ばれるかもしれません。

    [ [4.885838,52.388063] , [4.891061,52.388381] , [4.890973,52.382909] ]

、ステップ1の数値の文字列を検索

([-]?\d+.\d+ [-]?\d+.\d+)((,[-]?\d+.\d+ [-]?\d+.\d+)+)? 

x y形式の座標の少なくとも一つのペアを見つけた正規表現を試して、カンマで区切られた座標ペアとします。正規表現はregexrで確認できます。

+0

あなたの答えをありがとう。私は説明した方法を使用しましたが、emilVikströmの機能を使用しました。 – stUrb

関連する問題