使用地图的一个常见操作是设置地图的extent(范围)或获取在其他操作中使用的extent。在map上设置新extent的简单替代方案是调用map的centerAndZoom()方法,该方法基于给定中心点和细节级别(levelofdetailLOD)设置新的extent。 1、默认的extent 如果在初始化map时不包含extent信息,默认extent作为初始化extent信息,即上次在地图文档中保存时地图的extent。 如果您使用的服务不止一个,默认的extent是basemap(底图)或者添加的第一层layer的初始extent。 2、设置一个新的起始extent 如果您希望起始extent不是默认的extent,您有几个方式可用于设置此新的extent 在Map构造器中设置extent functioninit(){ varstartExtentnewExtent(95。271,38。933,95。228,38。976, newSpatialReference({wkid:4326})); varmyMapnewMap(mapDiv,{extent:startExtent}); varmapServiceURLhttps:server。arcgisonline。comArcGISrestservicesESRIStreetMapWorld2DMapServer; myMap。addLayer(newArcGISTiledMapServiceLayer(mapServiceURL)); } 使用Map。setExtent()方法设置extent functioninit(){ myMapnewMap(mapDiv); varstartExtentnewExtent(95。271,38。933,95。228,38。976, newSpatialReference({wkid:4326})); myMap。setExtent(startExtent); varmapServiceURLhttps:server。arcgisonline。comArcGISrestservicesESRIStreetMapWorld2DMapServer; myMap。addLayer(newArcGISTiledMapServiceLayer(mapServiceURL)); } 3、使用多个服务时设置起始extent 当您在同一应用程序中包含多个服务时,默认的extent是baselayer的初始extent。如果您希望初始extent是新的,并且提前知道extent,则可以将该extent包含在map的构造函数中。 在某些情况下,您可能无法提前知道extent。在其他情况下,您希望使用第二层的layer。例如,ArcGISOnlineservices(ArcGIS在线服务)都有一个worldextent,您可能希望您的地图extent是本地数据的extent,而不是worldextent。 在下面的示例中,使用了两个服务或layers。baselayer是具有worldextent的ArcGISOnlinelayer,第二个layer具有堪萨斯州的extent,这是所需的extent。initLayers()函数用于创建两个layers。您必须创建第二个函数来设置extent,因为不能在类被加载之前调用属性或事件。在本例中,触发了对两个地图服务的onLoad事件之后调用函数createMapAddLayers()。该函数创建map,设置myService2的extent,然后将两个map服务添加到map中。初始map的extent使用map服务定义的Layer。fullExtent属性,如果要使用初始extent,可以使用Layer。initialExtent。 functioninitLayers(){ varprimaryMapServiceURLhttps:server。arcgisonline。comArcGISrestservicesESRIStreetMapWorld2DMapServer; varmyService1newArcGISTiledMapServiceLayer(primaryMapServiceURL); varsecondaryMapServiceURLhttps:sampleserver1。arcgisonline。comArcGISrestservicesPetroleumKGSOilGasFieldsKansasMapServer; varmyService2newArcGISDynamicMapServiceLayer(secondaryMapServiceURL,{opacity:0。75}); varlayerLoadCount0; Whenbothlayershaveloaded,runaddLayersSetExtent myService1。on(load,function(service){ layerLoadCount1; if(layerLoadCount2){ createMapAddLayers(myService1,myService2); } }); myService2。on(load,function(service){ layerLoadCount1; if(layerLoadCount2){ createMapAddLayers(myService1,myService2); } }); } Createamap,settheextent,andaddtheservicestothemap。 functioncreateMapAddLayers(myService1,myService2){ createmap myMapnewMap(mapDiv,{extent:myService2。fullExtent}); myMap。addLayer(myService1); myMap。addLayer(myService2); } 4、使用地图事件获取当前extent 您可以使用Map。onExtentChange事件获取map当前extent。 在下面的例子中,map。onExtentChange在inti()函数中被引用。当用户对地图进行平移或缩放时,会对showExtent()函数进行回调。onExtentChange事件构建了对象,第一个对象是extent。在本例中,该对象被命名为ext,对象属性包括xmin、ymin、xmax和ymax。在ShowExtent()函数中,四个extent值被连接成一个字符串并在HTML页面中显示。 functioninit(){ varmyMapnewMap(mapDiv); varmapServiceURLhttps:server。arcgisonline。comArcGISrestservicesESRIStreetMapWorld2DMapServer; myMap。addLayer(newArcGISTiledMapServiceLayer(mapServiceURL)); myMap。addLayer(mapServiceURL); myMap。on(extentchange,showExtent); } functionshowExtent(ext){ varextentString; extentStringXMin:ext。xmin YMin:ext。ymin XMax:ext。xmax YMax:ext。ymax; document。getElementById(onExtentChangeInfo)。innerHTMLextentString; } 5、使用Map。extent属性获取当前extent 您可以通过Map。extent属性获取当前extent,这个属性是只读的。如果您向设置当前extent,您需要使用Map。setExtent()方法