展示如何使用图层定义来限制显示在地图上的图层信息。为了了解本例做了什么,看看用于这个地图的 ESRI_Census_USA 服务的服务目录页是有帮助的。检查地图中的图层列表。现在
代码限制了显示图层为州和县。
namicMapServiceLayer.setVisibleLayers([5,4,3]);
数据覆盖了美国,那么为什么当运行示例时仅仅 Kansas 周被显示?这是因为图层定义,通过 SQL 表达式限制数据在地图上的显示。本例中,图层定义限制了州为 Kansas 并且 Kansas 中
人口超过 25000。
的代码增加图层定义到数组,然后使用 ArcGISDynamicMapServiceLayer.setLayerDefinitions()方法应用这些定义。注意在数组中,定义的索引和地图中图层的索引匹配:
r layerDefs = [];
yerDefs[5] = "STATE_NAME='Kansas'";
yerDefs[4] = "STATE_NAME='Kansas' and POP2007>25000";
yerDefs[3] = "STATE_NAME='Kansas' and POP2007>25000";
namicMapServiceLayer.setLayerDefinitions(layerDefs);
建立 SQL 表达式的帮助资源,见 ArcGIS Desktop 帮助里的 About building an SQL expression 。
不能在 ArcGISTiledMapServiceLayers 上设置图层定义。这些图层使用预先渲染的图片切片的缓存。虽然切片地图服务更快,但是被限制在切片上查看地图图片。
码
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=7" />
<title>Create Map with Custom ArcGISDynamicMapServiceLayer Layer Definitions</title>
<link rel="stylesheet" type="text/css"
ref="http://serverapi.arcgisonline.com/jsapi/arcgis/1.5/js/dojo/dijit/themes/tundra/tundra.css
<script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=1.5"></script>
<script type="text/javascript">
dojo.require("esri.map");
function init() {
var startExtent = new esri.geometry.Extent(-103, 36.8, -94, 40.2, new esri.SpatialReference({wkid:4326}) );
var map = new esri.Map("map", {extent:startExtent});
var tiledMapServiceLayer = n
esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer");
map.addLayer(tiledMapServiceLayer);
//Use the ImageParameters to set map service layer definitions and map service visible layers before adding to the client map.
var imageParameters = new esri.layers.ImageParameters();
//layer.setLayerDefinitions takes an array. The index of the array corresponds to the layer id.
//In the sample below I add an element in the array at 3,4, and 5.
//Those array elements correspond to the layer id within the remote ArcGISDynamicMapServiceLayer
var layerDefs = [];
layerDefs[5] = "STATE_NAME='Kansas'";
layerDefs[4] = "STATE_NAME='Kansas' and POP2007>25000";
layerDefs[3] = "STATE_NAME='Kansas' and POP2007>25000";
imageParameters.layerDefinitions = layerDefs;
//I want layers 5,4, and 3 to be visible
imageParameters.visibleLayers = [5,4,3];
imageParameters.transparent = true;
//construct ArcGISDynamicMapServiceLayer with imageParameters from above
var dynamicMapServiceLayer = n
esri.layers.ArcGISDynamicMapServiceLayer("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI
Census
USA/MapSer
r", {"imageParameters":imageParameters});
map.addLayer(dynamicMapServiceLayer);
}
dojo.addOnLoad(init);
</script>
</head>