动态更改图层符号系统的首选方法是什么?我的 Web 应用程序通过 REST API 使用地图服务,但我不介意使用 SOAP API 或 ArcObjects (.NET)。
3 回答
从 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);
REST API 是无状态的,因此您无法通过与 RESTful 服务的连接来更改符号系统(尽管您可以使用图形图层来动态提取要以不同方式显示的要素)。
使用 SOAP API(通过 Web ADF 或简单地通过 SOAP 手动连接到服务)并在那里更改符号系统,您将获得更好的运气。有关这方面的更多信息,请访问:http: //forums.esri.com/Thread.asp?c=158&f=2421& t=266974
如果您想更改地图服务中符号的外观,则需要使用 WebADF 或创建自己的使用 SOAP API 的服务。更改符号然后生成图像的实际位非常容易,困难的部分是然后打开层来使用它。我要么不打扰,要么按照 Michael 的建议做,将图形带回客户端并使用 OpenLayers 按您希望的方式绘制它们,也许在地图服务中将图层设置为不可见,这样它们就不会显示在图形下。