OpenLayers 4-适合所选功能

又是我。因此,昨天我在缩放到选定的功能时遇到了一个问题,我希望其中一些人可以将我推向正确的方向。

我正在尝试使用Materialize Materialize

Framework实现自动完成/搜索栏。(以下是简单搜索栏的小提琴示例)

  $(document).ready(function(){

$('input.autocomplete').autocomplete({

data: {

"Apple": null,

"Microsoft": null,

"Google": 'https://placehold.it/250x250'

},

});

});

现在,我想做的是使用geojson功能调用和填充数据,并实现所选功能的范围。如果我正确理解,则需要保存所选功能的范围并将其传递给

map.getView().fit(selectedFeature.getSource().getExtent(), animationOptions);

还是我这样做完全错误?

$(document).ready(function() {

function sendItem(val) {

console.log(val);

}

var animationOptions = {

duration: 2000,

easing: ol.easing.easeOut

};

$(function() {

$.ajax({

type: 'GET',

url: 'geojson/jls.geojson',

dataType: 'json',

success: function(response) {

var jls_array = response;

var features = jls_array.features;

var jls = {};

for (var i = 0; i < features.length; i++) {

var geo = features[i].properties;

jls[geo['JLS_IME']] = null;

}

console.log(jls)

$('input.autocomplete').autocomplete({

data: jls,

limit: 5,

onAutocomplete: function(txt) {

sendItem(txt);

map.getView().fit(vectorJLS.getSource().getExtent(), animationOptions);

}

});

}

});

});

});

这是我的geojson对象的示例

{

"type": "FeatureCollection",

"crs": { "type": "name", "properties": { "name":"EPSG:3765" } },

"features": [

{ "type": "Feature", "properties": { "JLS_MB": "00116", "JLS_IME": "BEDEKOVČINA", "JLS_ST": "OP", "JLS_SJ": "Bedekovčina", "ZU_RB": "02", "ZU_IME": "Krapinsko-zagorska", "ZU_SJ": "Krapina", "pov": 51.42 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 461117.98, 5108379.85 ], [ 461124.53, 5108368.39 ], [ 461132.37, 5108354.26 ]...

因此,正如 同事用逻辑和实际的解决方案很好地指出的那样,他可以使用简单的.find()方法在geojson层源中查找特征并缩放所选特征。

我只在ajax调用之前用添加的变量调整了一些现有代码

var source_layer = vectorJLS.getSource(); // collecting layer source

$(function() {

$.ajax({

type: 'GET',

url: 'geojson/jls.geojson',

dataType: 'json'.....

onAutocomplete: function(txt) {

var feature = source_layer.getFeatures().find(function(f) { return f.get('JLS_IME') === txt; });

if (feature) {

const extent = feature.getGeometry().getExtent()

map.getView().fit(extent);

}

};

这是我要迭代的图层,并选择放大功能

回答:

要素本身不具有范围,但是其几何图形具有一个范围:

const extent = feature.getGeometry().getExtent()

map.getView().fit(extent);

但是,到目前为止,您似乎还没有在ajax响应中获得的OpenLayers功能对象,只是一个普通的json对象。让我们对其进行转换:

var source = new ol.source.Vector({

features: (new ol.format.GeoJSON({

featureProjection: "EPSG:3765" // probably not required in your case

})).readFeatures(featureCollection);

您无需将矢量添加到地图即可确定特定要素及其范围:

onAutocomplete: function(txt) {

var feature = source.getFeatures().find(function(f) { return f.get('JLS_IME') === txt; });

if (feature) {

const extent = feature.getGeometry().getExtent()

map.getView().fit(extent);

}

};

以上是 OpenLayers 4-适合所选功能 的全部内容, 来源链接: utcz.com/qa/403807.html

回到顶部