Openlayers 3.5 和 GeoJSON
Openlayers 3.5 and GeoJSON
我在使用 OpenLayers 3.5 时遇到问题。我正在尝试使用一次性加载策略从 GeoJSON 文件中获取特征。我正在向已实例化的地图添加一个新层。我的代码如下所示:
var vectorSource = new ol.source.Vector({
url: layerInfo.url,
format: new ol.format.GeoJSON()
});
var pointsLayer = new ol.layer.Vector({
source: vectorSource,
style: styleFunc
});
that.map.addLayer(pointsLayer);
pointsLayer.setVisible(true);
但是,没有任何显示,当我检查 pointsLayer.getSource().getFeatures()
时,我发现实际上没有加载任何功能。
所以,现在我尝试以不同的方式加载功能:
var that = this;
$.get(layerInfo.url, function(response) {
var vectorSource = new ol.source.Vector({
features: (new ol.format.GeoJSON()).readFeatures(response)
});
var pointsLayer = new ol.layer.Vector({
source: vectorSource,
style: styleFunc
});
that.map.addLayer(pointsLayer);
pointsLayer.setVisible(true);
});
这确实有效。我在这里用头撞墙。有人有什么想法吗?非常感谢!
这就是我现在加载数据的方式,"data" 是我的 GJson
var wktTraffic = new ol.source.Vector({
});
var trafficLayer = new ol.layer.Vector({
source: wktTraffic,
style: new ol.style.Style({
stroke: new ol.style.Stroke({
color: 'blue',
width: 5
})
})
});
function showData(data) {
var format = new ol.format.WKT();
var feature;
$.each(data, function (i, link) {
feature = format.readFeature(link.geom);
wktTraffic.addFeature(feature);
})
console.log('done load map');
}
根据 Juan Carlos 的回答,为了将来参考,这里有一个使用 Angular 的 $http
服务创建基于 GeoJSON 的图层的函数:
function buildStationsLayer() {
var geoJsonUrl = config.stationsGeoDataUrl /*+ some parameters....*/ ;
var source = new ol.source.Vector({});
var format = new ol.format.GeoJSON();
var stationsLayer = new ol.layer.Vector({
source: source,
style: stationStyleFunction //function that styles conditionally depending on resolution
});
//manually load the GeoJSON features into the layer
$http.get(geoJsonUrl).success(function(data){
for(var i=0; i<data.features.length; i++){
var feature = format.readFeature(data.features[i]);
source.addFeature(feature);
}
});
return stationsLayer;
}
虽然记录的方法不起作用,但仍然不高兴。我不明白为什么,因为官方示例使用了源和格式并且有效:
var vectorLayer = new ol.layer.Vector({
source: new ol.source.Vector({
url: 'data/geojson/countries.geojson',
format: new ol.format.GeoJSON()
}),
style: function(feature, resolution) {
style.getText().setText(resolution < 5000 ? feature.get('name') : '');
return styles;
}
});
来源:http://openlayers.org/en/master/apidoc/ol.format.WKT.html
它在 3.5 中的更改之前也有效,使用 ol.source.GeoJSON
。
我在使用 OpenLayers 3.5 时遇到问题。我正在尝试使用一次性加载策略从 GeoJSON 文件中获取特征。我正在向已实例化的地图添加一个新层。我的代码如下所示:
var vectorSource = new ol.source.Vector({
url: layerInfo.url,
format: new ol.format.GeoJSON()
});
var pointsLayer = new ol.layer.Vector({
source: vectorSource,
style: styleFunc
});
that.map.addLayer(pointsLayer);
pointsLayer.setVisible(true);
但是,没有任何显示,当我检查 pointsLayer.getSource().getFeatures()
时,我发现实际上没有加载任何功能。
所以,现在我尝试以不同的方式加载功能:
var that = this;
$.get(layerInfo.url, function(response) {
var vectorSource = new ol.source.Vector({
features: (new ol.format.GeoJSON()).readFeatures(response)
});
var pointsLayer = new ol.layer.Vector({
source: vectorSource,
style: styleFunc
});
that.map.addLayer(pointsLayer);
pointsLayer.setVisible(true);
});
这确实有效。我在这里用头撞墙。有人有什么想法吗?非常感谢!
这就是我现在加载数据的方式,"data" 是我的 GJson
var wktTraffic = new ol.source.Vector({
});
var trafficLayer = new ol.layer.Vector({
source: wktTraffic,
style: new ol.style.Style({
stroke: new ol.style.Stroke({
color: 'blue',
width: 5
})
})
});
function showData(data) {
var format = new ol.format.WKT();
var feature;
$.each(data, function (i, link) {
feature = format.readFeature(link.geom);
wktTraffic.addFeature(feature);
})
console.log('done load map');
}
根据 Juan Carlos 的回答,为了将来参考,这里有一个使用 Angular 的 $http
服务创建基于 GeoJSON 的图层的函数:
function buildStationsLayer() {
var geoJsonUrl = config.stationsGeoDataUrl /*+ some parameters....*/ ;
var source = new ol.source.Vector({});
var format = new ol.format.GeoJSON();
var stationsLayer = new ol.layer.Vector({
source: source,
style: stationStyleFunction //function that styles conditionally depending on resolution
});
//manually load the GeoJSON features into the layer
$http.get(geoJsonUrl).success(function(data){
for(var i=0; i<data.features.length; i++){
var feature = format.readFeature(data.features[i]);
source.addFeature(feature);
}
});
return stationsLayer;
}
虽然记录的方法不起作用,但仍然不高兴。我不明白为什么,因为官方示例使用了源和格式并且有效:
var vectorLayer = new ol.layer.Vector({
source: new ol.source.Vector({
url: 'data/geojson/countries.geojson',
format: new ol.format.GeoJSON()
}),
style: function(feature, resolution) {
style.getText().setText(resolution < 5000 ? feature.get('name') : '');
return styles;
}
});
来源:http://openlayers.org/en/master/apidoc/ol.format.WKT.html
它在 3.5 中的更改之前也有效,使用 ol.source.GeoJSON
。