动态更改地图图层符号系统(ArcGIS Server)

时间:2009-11-18 21:14:07

标签: esri arcobjects arcgis-server

动态更改图层符号系统的首选方法是什么?我的Web应用程序通过REST API使用地图服务,但我不介意使用SOAP API或ArcObjects(.NET)。

3 个答案:

答案 0 :(得分:1)

从版本2.0开始,ESRI JS API中存在要素图层。

ESRI API示例显示使用渲染器通过指定的唯一值&来改变动态地图服务的默认符号系统。课堂打破渲染器。由于要素图层是从图形图层对象派生而来的,因此它们呈现的方式不同(客户端与服务'即时img / tile导出)。然而,它们允许根据开发人员定义的字段/值更改图层外观。

请注意在动态地图服务中使用唯一值渲染:

示例(代码)http://help.arcgis.com/en/webapi/javascript/arcgis/jssamples/renderer_unique_value.html

现场样本 http://developers.arcgis.com/en/javascript/samples/renderer_unique_value/

var defaultSymbol = new esri.symbol.SimpleFillSymbol().setStyle(                                                                                                        
esri.symbol.SimpleFillSymbol.STYLE_NULL);
defaultSymbol.outline.setStyle(esri.symbol.SimpleLineSymbol.STYLE_NULL);

    //create renderer
    var renderer = new esri.renderer.UniqueValueRenderer(defaultSymbol, "SUB_REGION");

    //add symbol for each possible value
    renderer.addValue("Pacific", new esri.symbol.SimpleFillSymbol().setColor(new dojo.Color([255, 0, 0, 0.5])));
    renderer.addValue("Mtn", new esri.symbol.SimpleFillSymbol().setColor(new dojo.Color([0, 255, 0, 0.5])));
    renderer.addValue("N Eng", new esri.symbol.SimpleFillSymbol().setColor(new dojo.Color([0, 0, 255, 0.5])));
    renderer.addValue("S Atl", new esri.symbol.SimpleFillSymbol().setColor(new dojo.Color([255, 0, 255, 0.5])));
    renderer.addValue("Mid Atl", new esri.symbol.SimpleFillSymbol().setColor(new dojo.Color([255, 255, 255, 0.75])));
    renderer.addValue("E N Cen", new esri.symbol.SimpleFillSymbol().setColor(new dojo.Color([0, 255, 255, 0.5])));
    renderer.addValue("W N Cen", new esri.symbol.SimpleFillSymbol().setColor(new dojo.Color([255, 255, 0, 0.5])));
    renderer.addValue("E S Cen", new esri.symbol.SimpleFillSymbol().setColor(new dojo.Color([127, 127, 127, 0.5])));
    renderer.addValue("W S Cen", new esri.symbol.SimpleFillSymbol().setColor(new dojo.Color([0, 0, 0, 0.5])));

    var featureLayer = new esri.layers.FeatureLayer("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/1", {
      mode: esri.layers.FeatureLayer.MODE_ONDEMAND,
      outFields: ["SUB_REGION"]
    });

    featureLayer.setRenderer(renderer);
    map.addLayer(featureLayer);

答案 1 :(得分:0)

REST API是无状态的,因此您无法通过连接到RESTful服务来更改符号系统(尽管您可以使用图形层动态提取要以不同方式显示的功能)。

使用SOAP API(通过Web ADF或只是通过SOAP手动连接到服务)并在那里更改符号系统,您将获得更好的运气。有关这方面的更多信息,请访问:http://forums.esri.com/Thread.asp?c=158&f=2421&t=266974

答案 2 :(得分:0)

如果要更改地图服务中符号的外观,则需要使用WebADF或创建自己的使用SOAP API的服务。更改符号然后生成图像的实际位非常容易,然后硬件将获得打开的图层来消耗它。我要么不打算或者像迈克尔建议的那样做,并将图形带回客户端并使用OpenLayers绘制它们,可能将图层设置为在地图服务中不可见,这样它们就不会显示在图形下面。