当前位置: 首页 > 面试题库 >

OpenLayers 4-适合所选功能

班言
2023-03-14
问题内容

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

我正在尝试使用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 ]...

更新-解决方案

因此,正如 Dube 同事用逻辑和实际的解决方案很好地指出的那样,他可以使用简单的.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);
  }
};


 类似资料:
  • 问题内容: 我在Maven中设置Spring + Spring Data JPA + QueryDSL + JPA 2.0 + Hibernate的配置时遇到很多麻烦。我已经解决了很多问题,但这使我头痛= /。 我收到以下异常: 我在Google上进行了查看,大多数情况下,此问题是由缺少注释“ @Transactional”引起的。我试图注释我的方法,但没有解决任何问题。我完全不知道它来自=()。

  • 问题内容: 我注意到有不同的bean作用域,例如: 每个的目的是什么?如何为我的bean选择合适的范围? 问题答案: 介绍 它表示bean的范围(生存期)。如果您熟悉基本Servlet Web应用程序的“幕后”工作,这将更容易理解:Servlet如何工作?实例化,会话,共享变量和多线程。 @Request/View/Flow/Session/ApplicationScoped 一个的生存时间只有一

  • 2.a. 硬件需求 简介在开始之前, 我们来看看硬件方面有何需求以保证 Gentoo 的顺利安装. x86 体系 至少 1G 的硬盘空间 如果不打算使用预编译包, 您至少需要 300 Mb 的内存 (物理内存 + swap) 486 以上的 CPU 以及至少 64Mb 物理内存 2.b. 作出您的选择 简介 仍然有兴致继续尝试 gentoo? 那好吧, 是时候选择您想要的合适的安装媒介了. 没错,

  • 将 package.json 中的 Ionic 版本改为 2.0.0 的时候,我就思考一个问题。这个该死的问题是——我到底要用哪个框架继续工作下去。 刚开始学习前端的时候,SPA(单页面应用)还没有现在这么流行,可以选择的框架也很少。而今天,我随便打开一个技术相关的网站、应用,只需要简单的看几页,就可以看到丰富的前端框架世界 Angular 2、React、Vue.js、Ember.js。 当我还

  • 过去,我一直无法相信:一个新人在三个月里可以学好前端。后来,我信了。因为三个月后,我又是一个前端的新人,我又需要重新入门前端。 前端领域好似也有一个“摩尔定律”。戈登·摩尔提出来:积体电路上可容纳的电晶体(晶体管)数目,约每隔24个月便会增加一倍,后来经常被引用的“18个月”。而对于前端领域来说,每隔 3-6 个月,知识点将增加一倍。 过去一年(即 2016 年)的每三个月(或者半年)里,前端领域

  • 自定义适配器视图有问题。我试着在