2

文字列の下からポリゴン座標を取得したい。

{"polygon":{"type":"Feature","properties":[],"geometry":{"type":"Polygon","coordinates":[[[-7302732.4720101,6527844.6333235],[-3193477.8319711,6606116.1502766],[-5111129.9973226,5001550.0527375],[-6637424.5779086,4884142.7773079],[-7772361.5737289,5158093.0866438],[-7302732.4720101,6527844.6333235]]]},"crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}}}}

これは、以下のコードで配列にデコードするGeoJson文字列です。

$polygon = CJSON::decode($str);

ポリゴンを取得したいときにエラーが発生します!

$var= $polygon->polygon;

または以下のコードで:

$polygon = CJSON::decode($str,true);
$var = $polygon['polygon'];

座標を取得するためですが:

foreach($polygon as $key=>$value)
$coordinates = $value['coordinates'];
or
$coordinates = $value[coordinates];

postgisでpostgresqlに保存するためにjavascriptからphpに送信するgeojsonから座標を取得するにはどうすればよいですか?

4

2 に答える 2

2
$polygon->polygon->geometry->coordinates[0]

また

$polygon['polygon']['geometry']['coordinates'][0]

あなたが持っているのは多次元配列/オブジェクトです。あなたの場合、それを実行しているクラスがあるように見えるので、デコードされたときにどちらに出力されるかわかりませんが、とにかくjson_decodeを使用しました。見た目からすると、ポリゴンがメインオブジェクトであり、次にタイプと座標を持つオブジェクトであるジオメトリがあり、座標には複数のオブジェクト/配列が含まれています。

上記のサンプルを正しく入力すると、そのオブジェクトの最初の座標セットが表示されます。もちろん、ループを介して実行することもできます。

クラスが配列ではなくオブジェクトとしてデコードすることを前提としたオブジェクトの場合。何をするのか正確にはわかりません$polygon = CJSON::decode($str,true);。しかし、そのようなものであれば、json_decode()すべて設定する必要があります。

これは、ここに示すようにオブジェクトを分解する私の方法です。カウントをチェックして、オブジェクトが最初に設定されているかどうか、またはコードの他の手段が分解されないようにプロパティがオブジェクトに存在するかどうかを確認することをお勧めします。道。しかし、私がここに持っているのは、その核となる純粋な例にすぎませんが、それはその目的を果たします。ただし、エラーハンドルは発生しません。そのため、これらのチェックを行う際に、さらに詳しく説明することをお勧めします。

とにかくここに私のコードがあります:

<?php
$str = '{"polygon":{"type":"Feature","properties":[],"geometry":{"type":"Polygon","coordinates":[[[-7302732.4720101,6527844.6333235],[-3193477.8319711,6606116.1502766],[-5111129.9973226,5001550.0527375],[-6637424.5779086,4884142.7773079],[-7772361.5737289,5158093.0866438],[-7302732.4720101,6527844.6333235]]]},"crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}}}}';

$polygon = json_decode($str);
echo'<pre>';print_r($polygon);echo'</pre>';

$set = 1;
foreach($polygon->polygon->geometry->coordinates[0] as $coordinates)
{
    echo 'Set '.$set.': ';$set++;
    echo $coordinates[0].','.$coordinates[1].'<br>';
}
?>

実際の動作を確認してくださいhttp://7pz.net/geojson-parse.php(一番下までスクロール)

于 2012-08-01T15:08:16.520 に答える
1

これにより、すべての座標の配列が得られ、1行ずつ出力されます。

$string = '{"polygon":{"type":"Feature","properties":[],"geometry":{"type":"Polygon","coordinates":[[[-7302732.4720101,6527844.6333235],[-3193477.8319711,6606116.1502766],[-5111129.9973226,5001550.0527375],[-6637424.5779086,4884142.7773079],[-7772361.5737289,5158093.0866438],[-7302732.4720101,6527844.6333235]]]},"crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:OGC:1.3:CRS84"}}}}';

$json = json_decode($string);

$coords_array = $json->polygon->geometry->coordinates[0];

foreach($coords_array as $c_a) {
        echo $c_a[0] . "," .$c_a[1] . "<br>"; 
    }

アクセス方法:

$coords_array[0];
$coords_array[1];
$coords_array[2];

基本的に、JSON文字列をオブジェクトに変換し、->表記を使用して各要素にアクセスできます。

私は通常、 http://jsonviewer.stack.hu/というサイトを使用してJSONをデコードし、必要なパスを見つけてから、上記のように、表示されたとおりに書き出すだけ$json->polygon->geometry->coordinates;です。

サイトで試してみてください。

于 2012-08-01T15:11:51.803 に答える