【问题标题】:Transfer format between geodatabase and OpenLayers地理数据库和 OpenLayers 之间的传输格式
【发布时间】:2013-03-25 13:45:29
【问题描述】:

我很好奇您的意见,什么是 SpatiaLite 和 OpenLayers 之间最有效的传输格式。目前我正在开发一个基于 SpatiaLite(SQLite 的扩展)和 OpenLayers 的应用程序,并且我使用 GeoJSON 作为传输格式。

我的程序: 1)通过php脚本查询DB,使用SpatiaLite的函数AsGeoJSON,从而得到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);

有没有什么方法可以更有效、更好地实现相同的目标? 谢谢!

【问题讨论】:

    标签: php openlayers geojson spatialite wkt


    【解决方案1】:

    不确定速度,但如果您使用的是最新版本的 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}
    });
    

    【讨论】:

    • 谢谢,这是一种优化。但是,我想知道是否有其他方式在 GeoDB 和 API 之间传输数据,一般来说。 Anuway这也很有用,所以谢谢你的回复!
    猜你喜欢
    • 2018-07-17
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多