0

SpatiaLiteとOpenLayersの間の最も効率的な転送フォーマットは何ですか?現在、SpatiaLite(SQLiteの拡張)とOpenLayersに基づいたアプリケーションを開発しており、転送形式としてGeoJSONを使用しています。

私の手順:1)SpatiaLiteの関数AsGeoJSONを使用して、phpスクリプトでDBを検索し、geojson形式のデータを取得します

2)phpのprint()を使用して、取得したデータをphp変数からJS変数に転送します。

$result = $db->query($query);

$r = '{"type": "FeatureCollection","features": [';
while($row = $result->fetchArray(SQLITE3_ASSOC))
{
  $r .= '{"type":"Feature","properties":{}, "geometry":' . $row['geometry'] . '},';
}
$r .= ']}';
print'<script> CadastreBorder = ' . $r . '; </script>';

3)以下を読んでOpenLayersでベク​​ターレイヤーの機能を作成する

var vectorLayer = new OpenLayers.Layer.Vector(name, {style: style, rendererOptions:
{zIndexing: true}});
var formatGeoJSON = new OpenLayers.Format.GeoJSON({});
vectorLayer.addFeatures(formatGeoJSON.read(CadastreBorder));
map.addLayer(vectorLayer);

同じ目標をより効率的かつよりうまく達成する方法はありますか?ありがとう!

4

1 に答える 1

0

速度についてはわかりませんが、最近のバージョンのPHP(5.2> =)を使用している場合は、phpの配列でjson_encodeを使用することを検討してください。文字列を作成する代わりに、次のような配列を作成します。

$geoJSON_array = Array(
    "type" => "FeatureCollection",
    "features" => Array()
    );

そして、ジオメトリの各行について、「機能」に新しいテーブルを追加します。

Array(
    "type" => "Feature",
    "properties" => Array(),
    "geometry" => Array(... your geometry),
)

そのような配列を作成した後、json_encodeそれを実行すると、家に帰ります。安全のために、検証することを確認します(たとえば、 http: //geojsonlint.com/を使用)。これは、たとえば、新しい情報をサポートしたり、マップに新しい種類の要素を追加したりする必要がある場合に、後で役立つ場合があります。

質問:ポイントのロードに固定戦略を使用しないのはなぜですか?このgeoJSONをファイル/スクリプトとして作成している場合は、openlayersに自動的にダウンロードするように指示することもできます。

var vectorLayer = new OpenLayers.Layer.Vector(name, {
    strategies: [new OpenLayers.Strategy.Fixed()],
    protocol: new OpenLayers.Protocol.HTTP({
        url: "json/my_geojson.json",
        format: new OpenLayers.Format.GeoJSON()
    }),
    style: style,
    rendererOptions: {zIndexing: true}
});
于 2013-03-26T02:09:35.283 に答える