2013-03-25 21 views
0

我很好奇你的观点,SpatiaLite和OpenLayers之间最有效的传输格式是什么。目前我正在开发一个基于SpatiaLite(SQLite的扩展)和OpenLayers的应用程序,并使用GeoJSON作为传输格式。地理数据库和OpenLayers之间的传输格式

我的过程: 1)由PHP脚本,quering DB使用SpatiaLite的功能AsGeoJSON,由此获得以GeoJSON格式化数据

2)使用PHP的打印()从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)通过读取

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); 

创建在的OpenLayers矢量图层的功能有什么办法如何ACH即更高效和更好地实现相同的目标? 谢谢!

回答

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} 
}); 
+0

谢谢,这是有点优化。但是,我想知道是否有其他方式在GeoDB和API之间传输数据,总的来说可以这么说。 Anuway这也是有用的,所以谢谢你的回复! – 2013-04-01 19:31:22