Yandex地图上的过滤数据如何正确



我正在尝试在yandex地图上过滤数据。codepen示例

如果基站有几个频段(2G,3G和4G),则如果其至少一个频带在滤波器中,则应该在结果中。

Yandex Maps上的过滤数据如何正确?

我有ListBoxControl,带有ListBoxItems = ['2G','3G','4G']

我的过滤功能看起来像这样:

function getFilterFunction(categories){
  return function(obj){
    let bsBands = obj.has_bands;
    /* How correct filter data? */
    return categories['2G'] && categories['3G'] && categories['4G'];
  }
}

Geojson看起来像这样:

{
"count": 4,
"next": null,
"previous": null,
"type": "FeatureCollection",
"features": [
    {
        "id": 1,
        "region_prefix": "97",
        "cell_site_number": 1,
        "description": "",
        "address": "",
        "commissioning": "",
        "bs_id": "",
        "height_asl": 0,
        "bands": [
            {
                "name": "2G",
                "frequency": "900"
            },
            {
                "name": "2G",
                "frequency": "1800"
            },
            {
                "name": "3G",
                "frequency": "2100"
            },
            {
                "name": "4G",
                "frequency": "1800"
            },
            {
                "name": "4G TDD",
                "frequency": "2600"
            }
        ],
        "status": true,
        "type": "Feature",
        "geometry": {
            "type": "Point",
            "coordinates": [55.755815, 37.613]
        },
        "properties": {
            "balloonContentHeader": "balloonContentHeader",
            "balloonContentBody": "balloonContentBody",
            "balloonContentFooter": "balloonContentFooter",
            "clusterCaption": "clusterCaption",
            "hintContent": "hintContent",
            "iconCaption": "2G 3G 4G"
        },
        "has_bands": [
            "3G",
            "2G",
            "4G"
        ]
    },
    {
        "id": 2,
        "region_prefix": "97",
        "cell_site_number": 2,
        "description": "",
        "address": "",
        "commissioning": "",
        "bs_id": "",
        "height_asl": 0,
        "bands": [
            {
                "name": "2G",
                "frequency": "900"
            },
            {
                "name": "2G",
                "frequency": "1800"
            },
            {
                "name": "3G",
                "frequency": "2100"
            },
            {
                "name": "4G",
                "frequency": "1800"
            },
            {
                "name": "4G TDD",
                "frequency": "2600"
            }
        ],
        "status": true,
        "type": "Feature",
        "geometry": {
            "type": "Point",
            "coordinates": [55.759, 37.613]
        },
        "properties": {
            "balloonContentHeader": "balloonContentHeader",
            "balloonContentBody": "balloonContentBody",
            "balloonContentFooter": "balloonContentFooter",
            "clusterCaption": "clusterCaption",
            "hintContent": "hintContent",
            "iconCaption": "2G 3G 4G"
        },
        "has_bands": [
            "3G",
            "2G",
            "4G"
        ]
    },
    {
        "id": 3,
        "region_prefix": "97",
        "cell_site_number": 3,
        "description": "",
        "address": "",
        "commissioning": "",
        "bs_id": "",
        "height_asl": 0,
        "bands": [
            {
                "name": "3G",
                "frequency": "2100"
            }
        ],
        "status": true,
        "type": "Feature",
        "geometry": {
            "type": "Point",
            "coordinates": [55.7204, 37.6167]
        },
        "properties": {
            "balloonContentHeader": "balloonContentHeader",
            "balloonContentBody": "balloonContentBody",
            "balloonContentFooter": "balloonContentFooter",
            "clusterCaption": "clusterCaption",
            "hintContent": "hintContent",
            "iconCaption": "3G"
        },
        "has_bands": [
            "3G",
        ]
    },
    {
        "id": 4,
        "region_prefix": "97",
        "cell_site_number": 4,
        "description": "",
        "address": "",
        "commissioning": "",
        "bs_id": "",
        "height_asl": 0,
        "bands": [
            {
                "name": "4G",
                "frequency": "1800"
            },
            {
                "name": "4G TDD",
                "frequency": "2600"
            }
        ],
        "status": true,
        "type": "Feature",
        "geometry": {
            "type": "Point",
            "coordinates": [55.7704, 37.6119]
        },
        "properties": {
            "balloonContentHeader": "balloonContentHeader",
            "balloonContentBody": "balloonContentBody",
            "balloonContentFooter": "balloonContentFooter",
            "clusterCaption": "clusterCaption",
            "hintContent": "hintContent",
            "iconCaption": "4G"
        },
        "has_bands": [
            "4G"
        ]
    }]}

我自己解决了这个问题。codepen示例

function getBand(e, i, a){
    let Band = this.valueOf();
    return e === Band; 
}
function getFilterFunction(categories){
    return function(obj){
        let bsBands = obj.has_bands;
        let has2G = bsBands.find(getBand, '2G');
        let has3G = bsBands.find(getBand, '3G');
        let has4G = bsBands.find(getBand, '4G');
        return (categories['2G'] && has2G) || (categories['3G'] && has3G) || (categories['4G'] && has4G);
    }
}

相关内容

  • 没有找到相关文章

最新更新