请问,9d怎么获得城市的所有行政区域对象

0 投票
底图已经在页面加载出来了,我要改变每个区域的一些属性
1月 9, 2019 分类:  773次浏览 | 用户: lxy (7 分)

2 个回答

0 投票

你好,

请问你是用的iclient for leaflet产品吗? 如果你要改变每个区域的属性 需要在iserver发布一个数据服务,然后调用featureservice接口  就可以对要素的进行更新,添加和删除。每个区域相当于每个要素,那么每个区域的属性是可以通过更新的方式来改变的。

附上链接http://iclient.supermapol.com/examples/leaflet/editor.html#02_editFeatures

1月 9, 2019 用户: 阳俊林 名扬四海 (3,347 分)

你好,是的,用的是leaflet。现在要做的是改变一个区的颜色。我的思路是先获得所有区的code,然后通个code去设置每个区的颜色。现在我在设置颜色这一步,没有出任何效果,我参考了http://iclient.supermap.io/examples/leaflet/editor.html#03_themeUnique 的做法。但是效果没有出来。我把我的代码贴出来,麻烦帮忙看看,有没有什么问题,那些参数要注意核对,帮忙指点一下。

var style1;
        style1 = new SuperMap.ServerStyle({
            fillForeColor : new SuperMap.ServerColor(196, 255, 189),
            lineColor : new SuperMap.ServerColor(255, 173, 173),
            lineWidth : 0.1
        });
    
        //开阳
        var themeUniqueIteme1 = new SuperMap.ThemeUniqueItem({
            unique : "开阳县",
            style : style1
        })

        var themeUniqueItemes = [ themeUniqueIteme1 ];

        themeUnique = new SuperMap.ThemeUnique({
            uniqueExpression : "Name",
            items : themeUniqueItemes,
            defaultStyle : style1
        });
        themeParameters = new SuperMap.ThemeParameters({
            datasetNames : [ "area" ],
            dataSourceNames : [ "test123" ],
            themes : [ themeUnique ]
        });
        themeService.getThemeInfo(themeParameters, function(serviceResult) {
            var result = serviceResult.result;
            if (result && result.newResourceID) {
                themeLayer = L.supermap.tiledMapLayer(url, {
                    noWrap : true,
                    cacheEnabled : false,
                    transparent : true,
                    layersID : result.newResourceID
                }).addTo(map);
            }
        });

这个要看你具体报错什么,你贴个图出来吧。

但是我觉得如果你只是单纯的想给查询出来了要素改变颜色的话,你可以当你调用查询接口查询出geojson来了以后,在你解析geoJSON的时候 就可以改变他的颜色,这样更加的简单

L.geoJSON(data, { style: function (feature) { return {color: feature.properties.color}; } }).bindPopup(function (layer) { return layer.feature.properties.description; }).addTo(map);

没有报错日志, getThemeInfo我把这个方法执行结果(serviceResult)发出来,看看有没有用

var result = serviceResult.result; 这个结果是undefined。

serviceResult 打印的内容:

  1. newResourceID: "eaada1f1bc2b40a89523f2bf5377de52_2256e3e5feec442fbf4e61e76bceab1d"
  2. newResourceLocation: "http://192.168.1.48:8090/iserver/services/map-gys/rest/maps/area/tempLayersSet/eaada1f1bc2b40a89523f2bf5377de52_2256e3e5feec442fbf4e61e76bceab1d.json"
  3. postResultType: "CreateChild"
  4. succeed: true

---------------

第二行里面的json数据是:

[{
    "completeLineSymbolDisplayed": false,
    "visible": true,
    "maxScale": 0,
    "caption": null,
    "description": "",
    "symbolScalable": false,
    "subLayers": {},
    "type": "UGC",
    "queryable": false,
    "opaqueRate": 100,
    "minVisibleGeometrySize": 0,
    "name": "area",
    "bounds": {
        "top": 27.359476654061407,
        "left": 106.12111178534144,
        "bottom": 26.184349414917424,
        "leftBottom": {
            "x": 106.12111178534144,
            "y": 26.184349414917424
        },
        "right": 107.27466679853805,
        "rightTop": {
            "x": 107.27466679853805,
            "y": 27.359476654061407
        }
    },
    "symbolScale": 0,
    "minScale": 0
}]

你这个就是成功返回了的是有个succeed: true的,而且那你的newResourceID是有值的,
还是没有出来,我在想一下其它办法吧。

在问一个问题,idesktop发布服务后,这个数据源和地图都打开失败。必须去iserver里面删除对应的工作空间,重启idesktop才能打开数据源和地图。
因为数据是独占的,你发布了服务过后,如果你要使用发布服务,那你就不能在桌面软件中打开此数据源或工作空间,你可以把服务停止过后就可以重新在桌面打开,并且在桌面中修改了数据,那么重新启动服务后你发布的数据也会改变
其实你可以考虑用下我说的方法,毕竟制作专题图也相当于渲染要素,
谢谢你给的建议,这几天的摸索,能做一些简单的专题图了。
0 投票
如果你想获得所有行政区域的对象,可以通过指定sql查询的方式L.supermap.featureService(url).getFeaturesBySQL,将所有区域 要素全部查询出来,查询参数的  attributeFilter设置为   attributeFilter:"";
1月 9, 2019 用户: 阳俊林 名扬四海 (3,347 分)
...