ArcGIS API For JavaScript官方文档(六)之设置范围

简介: ArcGIS API For JavaScript官方文档(六)之设置范围

使用地图的一个常见操作是设置地图的extent(范围)或获取在其他操作中使用的extent。在map上设置新extent的简单替代方案是调用map的centerAndZoom()方法,该方法基于给定中心点和细节级别(level of detail-LOD)设置新的extent。


1、默认的extent

如果在初始化map时不包含extent信息,默认extent作为初始化extent信息,即上次在地图文档中保存时地图的extent。


如果您使用的服务不止一个,默认的extent是base map(底图)或者添加的第一层layer的初始extent。


2、设置一个新的起始extent

如果您希望起始extent不是默认的extent,您有几个方式可用于设置此新的extent

①在Map 构造器中设置extent

function init() {
var startExtent = new Extent(-95.271, 38.933, -95.228, 38.976,
new SpatialReference({ wkid:4326 }) );
var myMap = new Map("mapDiv", { extent: startExtent });
var mapServiceURL = "https://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer";
myMap.addLayer(new ArcGISTiledMapServiceLayer(mapServiceURL));
}


②使用Map.setExtent()方法设置extent

function init() {
myMap = new Map("mapDiv");
var startExtent = new Extent(-95.271, 38.933, -95.228, 38.976,
new SpatialReference({ wkid:4326 }) );
myMap.setExtent(startExtent);
var mapServiceURL = "https://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer";
myMap.addLayer(new ArcGISTiledMapServiceLayer(mapServiceURL));
}


3、使用多个服务时设置起始extent

当您在同一应用程序中包含多个服务时,默认的extent是base layer的初始extent。如果您希望初始extent是新的,并且提前知道extent,则可以将该extent包含在map的构造函数中。


在某些情况下,您可能无法提前知道extent。在其他情况下,您希望使用第二层的layer。例如,ArcGIS Online services(ArcGIS在线服务)都有一个world extent,您可能希望您的地图extent是本地数据的extent,而不是world extent。


在下面的示例中,使用了两个服务或layers。base layer是具有world extent的ArcGIS Online layer,第二个layer具有堪萨斯州的extent,这是所需的extent。initLayers()函数用于创建两个layers。您必须创建第二个函数来设置extent,因为不能在类被加载之前调用属性或事件。在本例中,触发了对两个地图服务的onLoad事件之后调用函数createMapAddLayers()。该函数创建map,设置myService2的extent,然后将两个map服务添加到map中。初始map的extent使用map服务定义的Layer.fullExtent属性,如果要使用初始extent,可以使用Layer.initialExtent。

function initLayers() {
var primaryMapServiceURL = "https://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer";
var myService1 = new ArcGISTiledMapServiceLayer(primaryMapServiceURL);
var secondaryMapServiceURL = "https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Petroleum/KGS_OilGasFields_Kansas/MapServer";
var myService2 = new ArcGISDynamicMapServiceLayer(secondaryMapServiceURL, {opacity:0.75});
var layerLoadCount = 0;
//When both layers have loaded, run addLayersSetExtent
myService1.on("load", function(service) {
layerLoadCount += 1;
if (layerLoadCount === 2) {
createMapAddLayers(myService1,myService2);
}
});
myService2.on("load", function(service) {
layerLoadCount += 1;
if (layerLoadCount === 2) {
createMapAddLayers(myService1,myService2);
}
});
}
//Create a map, set the extent, and add the services to the map.
function createMapAddLayers(myService1,myService2) {
//create map
myMap = new Map("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页面中显示。

function init(){
var myMap = new Map("mapDiv");
var mapServiceURL = "https://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer";
myMap.addLayer(new ArcGISTiledMapServiceLayer(mapServiceURL));
myMap.addLayer(mapServiceURL);
myMap.on("extent-change", showExtent);
}
function showExtent(ext){
var extentString = "";
extentString = "XMin: " + ext.xmin +
" YMin: " + ext.ymin +
" XMax: " + ext.xmax +
" YMax: " + ext.ymax;
document.getElementById("onExtentChangeInfo").innerHTML = extentString;
}


5、使用Map.extent属性获取当前extent

您可以通过Map.extent属性获取当前extent,这个属性是只读的。如果您向设置当前extent,您需要使用Map.setExtent()方法


相关文章
|
8天前
|
API
阿里云短信服务文档与实际API不符
阿里云短信服务文档与实际API不符
|
3月前
|
Java API 开发者
在Spring Boot中集成Swagger API文档
在Spring Boot中集成Swagger API文档
|
2月前
|
Java API 数据中心
百炼平台Java 集成API上传文档到数据中心并添加索引
本文主要演示阿里云百炼产品,如何通过API实现数据中心文档的上传和索引的添加。
|
3月前
|
安全 Java API
Nest.js 实战 (三):使用 Swagger 优雅地生成 API 文档
这篇文章介绍了Swagger,它是一组开源工具,围绕OpenAPI规范帮助设计、构建、记录和使用RESTAPI。文章主要讨论了Swagger的主要工具,包括SwaggerEditor、SwaggerUI、SwaggerCodegen等。然后介绍了如何在Nest框架中集成Swagger,展示了安装依赖、定义DTO和控制器等步骤,以及如何使用Swagger装饰器。文章最后总结说,集成Swagger文档可以自动生成和维护API文档,规范API标准化和一致性,但会增加开发者工作量,需要保持注释和装饰器的准确性。
111 0
Nest.js 实战 (三):使用 Swagger 优雅地生成 API 文档
|
3月前
|
开发框架 Java 测试技术
Spring Boot中的API文档生成
Spring Boot中的API文档生成
|
3月前
|
JSON Java API
Spring Boot中使用OpenAPI生成API文档
Spring Boot中使用OpenAPI生成API文档
|
4月前
|
自然语言处理 安全 API
触发邮件接口有哪些?邮件API文档
**触发邮件接口**如AokSend、Mailgun、Amazon SES、Postmark和Sendinblue是自动化企业通信的关键。这些接口在特定事件时自动发送邮件,提高效率和客户体验。例如,AokSend提供详细的API文档,支持事件触发、模板管理和多语言集成;Mailgun以灵活性著称;Amazon SES适合大规模发送;Postmark专注于事务邮件;Sendinblue则提供邮件、短信和营销自动化功能。每种服务都有示例代码展示如何使用API发送邮件。选择合适的接口能提升企业通信效率和客户满意度。
|
4月前
|
Java API Spring
Spring Boot中配置Swagger用于API文档
Spring Boot中配置Swagger用于API文档
|
4月前
|
API 开发工具 git
ShowDoc自动生成api接口文档
ShowDoc自动生成api接口文档
127 0
|
4月前
|
前端开发 Java API
Java中的API设计与文档生成最佳实践
Java中的API设计与文档生成最佳实践