Openlayers:来自局部变量的向量层

Openlayers: Vector Layer from Local Variable

我正在使用 OpenLayers 根据 json 数据制作地图。我必须加载一次(使用 PHP)来检查时间戳和验证信息。那时,我宁愿输出一个 javascript 变量,让 OL 使用它。我似乎无法在文档中找到任何内容来完成此操作。

理想情况下,我会将 'url': 'latest.json' 更改为 'local': json_variable

var pointsSource = new ol.source.GeoJSON({
    'projection': map.getView().getProjection(),
    'url': 'latest.json'
});

var pointsLayer = new ol.layer.Vector({
    source: pointsSource,
    style: new ol.style.Style({ 
        image: new ol.style.Icon(({
            anchor: [0.5, 40],
            anchorXUnits: 'fraction',
            anchorYUnits: 'pixels',
            src: 'openlayers/marker-icon.png',
        }))
    })
});
map.addLayer(pointsLayer);

您可以通过参数 'object' 传入您的 geojson 数据。

OL3 src 的可读性很强,通常阅读它来确定要做什么比查找文档更快!我假设您使用的是 ol3.4 或更早版本;这是 geojson 的 3.2 src 代码:

https://github.com/openlayers/ol3/blob/v3.2.0/src/ol/source/geojsonsource.js

你可以看到它需要一个对象参数,它需要一个 JS 对象,这是 JSON.parse("...your geojson string here...")

的结果

所以像这样:

var geojson_cache = "<?php output from PHP here ?>"
var geojson_object = JSON.parse(geojson_cache)
var pointsSource = new ol.source.GeoJSON({
    'projection': map.getView().getProjection(),
    object: geojson_object
});

应该做你需要的。

另外仅供参考——我在上面提到了 OL3.4 或更早的版本——原因是这个 class 在 3.5 中不再存在。从上面的 src 文件中可以看出,这个 class 只不过是 StaticVector 的包装器,附加了 ol.format.GeoJSON 格式化程序。这已经过重构,将被 ol.source.Vector 取代,您提供 ol.format.GeoJSON 格式化程序。阅读这些注释中的 'New Vector API':

https://github.com/openlayers/ol3/releases/tag/v3.5.0