首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >传单:从GeoJSON属性设置GeoJSON层图标

传单:从GeoJSON属性设置GeoJSON层图标
EN

Stack Overflow用户
提问于 2015-11-23 14:17:37
回答 1查看 4.2K关注 0票数 4

我正在使用GeoJSON数据构建一个传单地图。在尝试根据GeoJSON属性设置使用的图标时,遇到了问题。我认为我的错误与用字符串调用对象有关,但我不知道它到底是什么。

这是我的密码:

GeoJSON中的每个项都有一个图标类别属性,如下所示:

代码语言:javascript
运行
复制
{"type":"Feature",
    "properties":{
        "iconcategory": "iconGreyHouse",
            ...

对于每个图标类别,有一个图标变量如下所示:

代码语言:javascript
运行
复制
var iconGreyHouse = L.icon({
    iconUrl: "/markerIcons/house_icon_grey.png",
    iconSize: [20, 20]
});

最后,当我加载我的GeoJSON文件时,我从我的GeoJSON属性中得到“图标类别”,希望选择相应的图标变量.

代码语言:javascript
运行
复制
$.getJSON("/GeoJSON/housemarkers.geojson", function (houses) {
    L.geoJson(houses, {
        pointToLayer: function (feature, latlng) {
            return L.marker(latlng, {
                icon: feature.properties.iconcategory
            });
        }
    }).addTo(housemarkers);
});

这是它不工作的地方!如果我使用完全相同的代码,但直接指定一个图标变量名,所有操作都很好;只有当我试图通过feature.property设置图标时,它才会失败。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-23 15:46:54

这里发生的事情是,您传递的是字符串,而不是图标实例。如果要使用字符串访问javascript对象属性,则需要使用括号表示法来访问特定范围内的属性。如果它位于全局范围内,可以使用:window[feature.properties.iconcategory]this[feature.properties.iconcategory],但我建议将其存储为单独的对象。如果你这样做的话:

代码语言:javascript
运行
复制
var icons = {
    'iconGreyHouse': L.icon({iconUrl: "/markerIcons/house_icon_grey.png",iconSize: [20,20]}),
    'iconRedHouse': L.icon({iconUrl: "/markerIcons/house_icon_red.png",iconSize: [20,20]}),
    ...
}

你可以这样称呼他们:icons[feature.properties.iconcategory]icons['iconGreyHouse']

如果您感兴趣,这里有一些阅读,如果您搜索javascript“属性访问器”和/或“括号符号”,这里还有很多东西可以在Stackoverflow上找到。

accessors

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33873212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档