【问题标题】:OSM layer not drawn if vector layer has no features如果矢量图层没有特征,则不绘制 OSM 层
【发布时间】:2015-07-25 14:41:18
【问题描述】:

我的 OpenLayers 3.7.0 地图有一个 OSM 层和一个矢量图层。在向量层没有特征的情况下,也不绘制 OSM 层。即使地图没有任何特征,我仍想显示它。

当我刷新具有空矢量图层的地图时,OSM 层会在完全消失之前开始绘制。

我怀疑当我尝试向矢量图层添加特征时会发生这种情况,但我不确定。这是处理的代码:

drawPoints: function(data){
    var self = this;
    var holder = new Array();
      data.items.forEach(function(y) {
        if(y.userdefinedlatitude != null){
            y.latitude = y.userdefinedlatitude;
        }
        if(y.userdefinedlongitude != null){
            y.longitude = y.userdefinedlongitude;
        }
        if((y.latitude != "" || y.longitude != "") || (y.latitude != "0" || y.longitude != "0")){
          var streets = new Array();
          if(y.street1 != ""){
            streets.push(y.street1);
          }
          if(y.street2 != ""){
            streets.push(y.street2);
          }
          if(streets.length > 1){
            var name = streets.join(' & ');
          }else{
            var name = "Unnamed Site";
          }
          siteData = {
            name: name,
            id: y.siteid
          }

          if(typeof holder[y.latitude.toString()] == "undefined"){
            holder[y.latitude.toString()] = new Object;
          }
          if(typeof holder[y.latitude.toString()][y.longitude.toString()] == "undefined"){
            holder[y.latitude.toString()][y.longitude.toString()] = new Array;
          }

          holder[y.latitude.toString()][y.longitude.toString()].push(siteData);

        }
      });
      for(var x in holder){
        for(var y in holder[x]){
          var name = '';
          for(var xx in holder[x][y]){
            name = name + '<p style="margin: 0px;">' + holder[x][y][xx].name + '</p><p style="font-size: 80%; margin-top: -5px;"><a href="#" class="moreInfo" data-itemId="' + holder[x][y][xx].id + '">Info</a> - <a href="#" class="movePin" data-itemId="' + holder[x][y][xx].id + '">Move</a></p>';
          }
          if(holder[x][y].length > 1){
            name = '<p style="font-weight: bold;">' + holder[x][y].length + ' Locations</p>' + name;
          }
          self.addMarker(x,y,name,self.maps.vectorSource);
        }
      }
      if(self.extents.once){
        self.maps.map.getView().fit(self.maps.vectorSource.getExtent(),[$(window).height(),$(window).width()]);
        self.extents.once = false;
        }
},
addMarker: function(lat, long, name, source, siteid){
    if(lat > -91 && lat < 91 && long > -181 && long < 181){
          var point = ol.proj.transform([parseFloat(long), parseFloat(lat)], 'EPSG:4326', 'EPSG:3857');
          if(!isNaN(point[0]) && !isNaN(point[1])){
            var iconFeature = new ol.Feature({
              geometry: new ol.geom.Point(point),
              name: name,
              siteid: siteid,
              population: 4000,
              rainfall: 500
            });

            var iconStyle = new ol.style.Style({
              image: new ol.style.Icon(/** @type {olx.style.IconOptions} */ ({
                anchor: [0.5, 32],
                anchorXUnits: 'fraction',
                anchorYUnits: 'pixels',
                opacity: 0.75,
                src: '/img/marker.png'
              }))
            });

            iconFeature.setStyle(iconStyle);

            source.addFeature(iconFeature);
          }
    }
}

如果我在矢量图层中绘制具有个特征的地图,一切都会完美无缺。这在 OL 3.1.1 中按预期工作。

【问题讨论】:

    标签: javascript maps openlayers-3


    【解决方案1】:

    来自您的代码:

    self.maps.map.getView().fit(self.maps.vectorSource.getExtent(),[$(window).height(),$(window).width()]);
    

    它旨在适应源的范围,但当源为空(无要素)时,它的范围是无限的。无法拟合无穷大,但该方法似乎没有优雅地处理它而是崩溃了。示例:http://jsfiddle.net/7av5agym/2/

    解决方案:在尝试拟合其范围之前测试源中的特征。

    项目票https://github.com/openlayers/ol3/issues/3925

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多