防止使用零值,Mapbox,传单绘制缩放点

时间:2015-06-10 07:01:35

标签: javascript maps leaflet mapbox

我正在使用Mapbox js制作气泡图。

问题是:如果点数低于某个值,我试图阻止点出现。目前显示值为0.

I don't want zeros to appear at all

设置点的功能如下所示。我已经注释掉了一个不成功的if语句。

function layer(selecta){ 
    geoJson = L.geoJson(geoJsonData, {
        pointToLayer: function(feature, latlng) {
            return L.circleMarker(latlng, {
                color: '#c10000',
                  //    if (parseInt(feature.properties[selecta]) < 50000){
                radius: (Math.sqrt(feature.properties[selecta] / 3.141592) / 50)  
                  //    }
            }).bindPopup('<h3>' + feature.properties.country + '</h3><p>' + 'Refugees, asylum seekers and IDPs in ' + currentYear + ': ' + numeral(feature.properties['yr' + currentYear]).format('0,0') + '</p>',{
                closeButton: true,
                minWidth: 320
            });
        }
    }).addTo(map);

};
layer('yr2013'); 

数据是从geoJSON文件加载的,geoJSON文件是一个对象数组。 每个对象都有每年的属性。 例如

  {  
     "type":"Feature",
     "geometry":{  
        "type":"Point",
        "coordinates":[  
           64.585262,
           41.377491
        ]
     },
     "properties":{  
        "country":"Uzbekistan",
        "yr2000":"39598",
        "yr2001":"40923",
        "yr2002":"46014",
        "yr2003":"45653",
        "yr2004":"44932",
        "yr2005":"44537",
        "yr2006":"1422",
        "yr2007":"1060",
        "yr2008":"821",
        "yr2009":"555",
        "yr2010":"311",
        "yr2011":"214",
        //"yr2012":"176",
        //"yr2013":"138"
     }
  },

如果我摆脱了值低于200的值,就像上面的例子一样,这会在控制台中返回一个错误。分数仍然显示,但这是一个大规模的黑客攻击。

有人可以告诉我一个更干净的方法吗?

X EDIT X 我从来没有找到解决方案,但我最终找到了解决办法。

Leaflet具有CircleMarker选项opacity和fillOpacity。

这是docs

所以我创建了一个函数,如果值太小则返回零,这样标记就不会出现。

但技术上仍然存在。

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用Mapbox.js&#39; .setFilter()?它应该删除您不想要的功能,而不仅仅是让它们透明。

https://www.mapbox.com/mapbox.js/example/v1.0.0/markers-with-multiple-filters/

答案 1 :(得分:0)

这个怎么样:

function layer(selecta){ 
    geoJson = L.geoJson(geoJsonData, {
        pointToLayer: function(feature, latlng) {

            //I suppose this is an integer
            var number_refugees = numeral(feature.properties['yr' + currentYear]);

            if(number_refugees > 0){
                var popup_content = '<h3>' + feature.properties.country + '</h3>'
                    + '<p>' + 'Refugees, asylum seekers and IDPs in ' + currentYear + ': '
                    + number_refugees.format('0,0') + '</p>';

                return L.circleMarker(latlng, {
                    color: '#c10000',
                    radius: (Math.sqrt(feature.properties[selecta] / 3.141592) / 50)  
                }).bindPopup(popup_content),{
                    closeButton: true,
                    minWidth: 320
                });
            }
        }
    }).addTo(map);
};
layer('yr2013');