ArcGIS API For JavaScript 开发(二)基础地图
有了开发环境,接下来的就是实践了,实践是检验真理的唯一标准!
多多练习,不要觉得自己能够想的出来就万事大吉了,还是得动手做才是最好的检验自己的能力。
基础地图,本节将通过arcgis api for javascript 实现——加载2D地图、鹰眼、比例尺、图例等基本的功能。
首先如何完成上面的功能?将用到哪些技术?哪些类?这些是我们先必须知道的:
dojo需引入的esri/map 资源或者说是类吧: dojo.request("esri/map"); 这个资源是加载地图的基本,Map类,继承了Accessor;它的子类:WebMap , WebScene;
The Map class contains properties and methods for storing, managing, and overlaying layers common to both 2D and 3D viewing. Layers can be added and removed from the map, but are rendered via a MapView (for viewing data in 2D) or a SceneView (for viewing data in 3D). Thus a map instance is a simple container that holds the layers, while the View is the means of displaying and interacting with a map's layers and basemap.
Map类包含用于存储、管理和覆盖在2D和3D视图中常见的层的属性和方法。可以从地图中添加和删除图层,但是通过MapView(在2D视图中查看数据)或SceneView(用于在3D中查看数据)呈现。因此,映射实例是一个简单的容器,它包含层,而视图则是显示和与映射层和basemap交互的方法。
A single map may be referenced by multiple views. This sample for example, contains a single Map that is visible in two separate views - one in 2D and the other in 3D. Because one map may be accessed by multiple views in the same application, all user interaction with a map's layers is handled on the View, not the Map.
单个映射可以被多个视图引用。例如,这个示例包含一个单独的映射,它可以在两个单独的视图中显示——一个在2D中,另一个在3D视图中。由于同一个应用程序中可以通过多个视图访问一个映射,所以在视图中处理所有与map层的用户交互,而不是映射。
An instance of Map is an essential component of the MapView and SceneView. A Map object should be created prior to a view so it can be passed into the map property of that view (e.g. MapView.map, SceneView.map).
加载地图
Map的实例是MapView和SceneView的重要组件。应该在视图之前创建一个Map对象,以便将其传递到该视图的映射属性(例如,MapView.map,SceneView.map)。
属性
| Name | Type | Summary | Class |
|---|---|---|---|
| allLayers | Collection<Layer> | 地图上所有图层的集合 | Map |
| basemap | Basemap | 指定地图 | Map |
| declaredClass | String |
The name of the class. more details |
Accessor |
| ground | Ground | 指定映射的表面属性。 | Map |
| layers | Collection<Layer> | 操作层的集合 | Map |
方法
| Name | Return Type | Summary | Class |
|---|---|---|---|
| add() | 在图层集合中添加一个图层。 | Map | |
| addMany() | 在图层集合中添加一层或一组图层。 | Map | |
| findLayerById() | Layer | 返回一个基于给定层id的层。 | Map |
| remove() | Layer | 从层集合中移除指定的层。 | Map |
| removeAll() | Layer[] | 删除所有层。 | Map |
| removeMany() | Layer[] | 删除指定的层。 | Map |
| reorder() | Layer | 更改图层的顺序。 | Map |
其中我们会用到的属性和方法有:
它的构造函数: var map = new Map();
其用法有
一种是:
require([
"esri/Map",
"esri/views/MapView",
"dojo/domReady!"
], function (Map, Mapview) {
var map = new Map({
//basemap:"http://www.arcgisonline.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer"
basemap: "streets"
});
var view = new Mapview({
container: "viewDiv",
map: map
});
});
还有一种是:require("esri/map",function(Map){
var map = new Map("viewDiv",{ basemap: "streets" });
});
加载鹰眼
鹰眼图主要方法
构造方法:esri.dijit.OverviewMap (params, srcNodeRef)
构造方法在创建一个鹰眼图的时候需要传入关联的地图对象和一个用于呈现鹰眼图控件的 HTML 元素,该元素可选,如果没有设置该 HTML 元素,将呈现在地图对象上,另外还包括很多可选参数,以下几个为常用的可选参数:
| attachTo | 指 定 鹰 眼 图 附 加 到 地 图 的 那 个 角 落 。 参 数 值 是"top-right","bottom-right","bottom-left" 和"top-left". |
| baseLayer | 指定鹰眼图空间地图的底图 |
| expandFactor | 设置鹰眼地图控件和矩形之间的比例,默认值是 2 |
| opacity | 指定鹰眼图控件上矩形的透明度 |
鹰眼图属性
|
属性 |
说明 |
|
hide |
隐藏鹰眼图控件 |
|
Show |
显示鹰眼图控件 |
|
startup |
当构造函数创建成功后,使用该方法后就可以进行用户交互了(几乎所有的控件(Map 除外)都有该方法 |
|
destroy |
当应用程序不再需要比例尺控件的时候,摧毁该对象。(几乎所有的控件都有该方法) |
关于 startup 方法
在 Dijit 一系列生命周期中,一个重要方法是启动方法 startup. 这个方法会在 DOM 节点被创建并
添加到网页之后执行,同时在这个方法也会等待当前小部件中所包含的子控件被创建并正确启动之后
才执行。
用法:
function OverviewMap() {
var over =
{
map: Map,
attachTo: "bottom-right",
color: "#D84E13",
expandFactor:,
baseLayer:new esri.layers.ArcGISTiledMapServiceLayer(MapServer)
};
var MapViewer = new esri.dijit.OverviewMap(over, dojo.byId("OverViewDiv"));
MapViewer.startup();
}
// 鹰眼
var overviewMapDijit = new OverviewMap({
map: map, // 必要的
visible: true, // 初始化可见,默认为false
attachTo: "bottom-right", // 默认右上角
width: , // 默认值是地图高度的 1/4th
height: , // 默认值是地图高度的 1/4th
opacity: ., // 透明度 默认0.5
maximizeButton: true, // 最大化,最小化按钮,默认false
expandFactor: 0.4, //概览地图和总览图上显示的程度矩形的大小之间的比例。默认值是2,这意味着概览地图将至少是两倍的大小的程度矩形。
color: "red" // 默认颜色为#000000
});
overviewMapDijit.startup();
加载比例尺
比例尺是通过Scalebar来实现的;
Scalebar 的主要方法
构造方法:esri.dijit. Scalebar(p (params, srcNodeRef)
构造方法在创建一个比例尺控件的时候需要传入关联的地图对象和一个用于呈现比例尺控件的 HTML
元素,该元素可选,如果没有设置该 HTML 元素,将呈现在地图对象上。另外还包括很多可选参数,
以下几个为常用的可选参数:
attachTo 比 例 尺 控 件 在 其 关 联 地 图 上 位 置 。 参 数 值 是"top-right","bottom-right","bottom-left" 和"top-left".
scalebarUnit 比例尺控件的单位
属性 说明
hide 隐藏比例尺控件
Show 显示比例尺控件
用法:
function Scalebar()
{
var scalebar = new esri.dijit.Scalebar({ map: Map, attachTo: "top-right" },
dojo.byId("scaleBarDiv"));
}
加载图例
图例
Legend 控件用于动态显示全部或者部分图层的标签和符号信息,图例控件支持下面四种图层:
ArcGISDynamicMapServiceLayer, ArcGISTiledMapServiceLayer, FeatureLayer 和 KMLLayer
图例的主要方法
构造方法:esri.dijit. Legend (params, srcNodeRef)
构造方法在创建一个图例的时候需要传入关联的地图对象和一个用于呈现图例控件的 HTML 元素。
另外还包括很多可选参数,以下几个为常用的可选参数:
autoUpdate 当地图的比例尺发生变化或者图层发生变化的时候,图例控件是否自动更新
respectCurrentMapScale 图例控件是否自动更新
layerInfos 指定一个图层子集用于在图例中显示
arrangement 指定图例在 HTML 元素中的对其方式
方法 说明
refresh 当在构造函数中用了 layerInfos,用这个方法刷新图例以替换构造函数中的图层
用法:
function Maplegend() {
var legendPar = {map:Map,
arrangment: esri.dijit.Legend.ALIGN_RIGHT,
autoUpdate:true
};
var legendDijit = new esri.dijit.Legend(legendPar, "legendDiv");
legendDijit.startup();
}
然后就是融合在一起看看效果,比较单独的知道还是得用出来才行,执行我们的实践精神!
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>基础地图</title> <link rel="stylesheet" href="https://js.arcgis.com/3.12/dijit/themes/claro/claro.css">
<link rel="stylesheet" href="https://js.arcgis.com/3.12/esri/css/esri.css">
<script src="https://js.arcgis.com/3.12/"></script>
<style>
html, body { height: %; width: %; margin: %; padding: ; }
#rightPane {
width:%;
}
#legendPane {
border:solid #97DCF2 1px;
}
</style>
<script>
var map;
require([
"esri/map", "esri/dijit/OverviewMap", "esri/dijit/Scalebar", "esri/arcgis/utils",
"esri/layers/FeatureLayer", "esri/dijit/Legend", "dojo/_base/array",
"dojo/parser",
"dijit/layout/BorderContainer", "dijit/layout/ContentPane", "dijit/TitlePane",
"dijit/layout/AccordionContainer", "dojo/domReady!"
], function (
Map, OverviewMap, Scalebar, arcgisUtils, FeatureLayer, Legend, arrayUtils,
parser
) {
parser.parse();
//创建地图,并添加"topo"为底图
map = new Map("map", {
basemap: "topo",
center: [-96.53, 38.374],
zoom: ,
logo:false
});
//新建rivers图层
var rivers = new FeatureLayer("https://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Hydrography/Watershed173811/MapServer/1", {
mode: FeatureLayer.MODE_ONDEMAND,
outFields: ["*"]
});
//新建waterbodies图层
var waterbodies = new FeatureLayer("https://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Hydrography/Watershed173811/MapServer/0", {
mode: FeatureLayer.MODE_ONDEMAND,
outFields: ["*"]
});
//把图层加入到地图
map.addLayers([waterbodies, rivers]); //添加图例
map.on("layers-add-result", function (evt) {
var layerInfo = arrayUtils.map(evt.layers, function (layer, index) {
return { layer: layer.layer, title: layer.layer.name };
});
if (layerInfo.length > ) {
var legendDijit = new Legend({
map: map,
layerInfos: layerInfo
}, "legendDiv");
legendDijit.startup();
}
}); //添加鹰眼图
var overviewMapDijit = new OverviewMap({
//设置鹰眼控件的地图
map: map,
//设置是否可见
visible: true,
//鹰眼控件放置的位置
attachTo: "bottom-left"
});
overviewMapDijit.startup(); //添加比例尺
var scalebar = new Scalebar({
map: map,
//比例尺单位
scalebarUnit: "dual",
//放置的位置
attachTo: "bottom-right"
});
}); </script> </head>
<body>
<div id="content"
data-dojo-type="dijit/layout/BorderContainer"
data-dojo-props="design:'headline', gutters:true"
style="width: 100%; height: 100%; margin:0;">
<div id="rightPane"
data-dojo-type="dijit/layout/ContentPane"
data-dojo-props="region:'right'"> <div data-dojo-type="dijit/layout/AccordionContainer">
<div data-dojo-type="dijit/layout/ContentPane" id="legendPane"
data-dojo-props="title:'Legend',selected:true">
<div id="legendDiv"></div>
</div>
<div data-dojo-type="dijit/layout/ContentPane"
data-dojo-props="title:'Pane 2'">
This pane could contain tools or additional content
</div>
</div>
</div>
<div id="map"
data-dojo-type="dijit/layout/ContentPane"
data-dojo-props="region:'center'"
style="overflow:hidden;">
</div>
<div id="bookmarks"></div>
</div>
</body>
</html>
ArcGIS API For JavaScript 开发(二)基础地图的更多相关文章
- ArcGIS API for JavaScript开发初探——基础知识
1.前言 在ArcGIS Web API开发体系中一共有四大类,分别为: ArcGIS API for Flex ArcGIS API for JavaScript ArcGIS API for RE ...
- ArcGIS API for JavaScript开发初探——基本地图组件使用
1.前言 在上一篇我们已经我们已经讲述了第一个地图应用程序的HelloMap的创建过程,这一篇我们来讲述基本地图组件:Home Button.比例尺.鹰眼图的使用方法. 2.基本地图组件 在ArcGI ...
- ArcGIS API for javascript开发笔记(二)——解决ArcGIS Service中的服务在内网环境下无法进行javascript预览问题
感谢一路走来默默支持和陪伴的你~~~ ----------------------------拒绝转载-------------------------------- 1.问题说明 在使用ArcGIS ...
- ArcGIS API for JavaScript开发环境搭建及第一个实例demo
原文:ArcGIS API for JavaScript开发环境搭建及第一个实例demo ESRI公司截止到目前已经发布了最新的ArcGIS Server for JavaScript API v3. ...
- ArcGis API for JavaScript学习——加载地图
ArcGis API for JavaScript开发笔记——加载地图 在这个例子中使用的离线部署的API(请参见 http://note.youdao.com/noteshare?id=f42865 ...
- ArcGIS API for JavaScript开发初探——HelloMap
1.前言 在开始ArcGIS API for JavaScript开发之前我们需要了解一些基本的知识: 1.开发工具选什么? 前端技术的开发工具选择是一个仁者见仁智者见智的问题,有人喜欢Hbuilde ...
- ArcGIS API for JavaScript开发环境搭建与发布以及基本功能实现
1.背景介绍 ArcGIS API for JavaScript 咱这就不介绍了,具体可看ESRI中国的介绍:http://support.esrichina.com.cn/2011/0223/960 ...
- ArcGIS API For JavaScript 开发(一)环境搭建
标签:B/S结构开发,Asp.Net开发,WebGIS开发 前言:为什么写这个,一是学习:二是分享,共同进步,毕竟也是在这个园子里学到了很多: (一)环境搭建 集成开发环境:VS2013 Ultima ...
- ArcGIS API For JavaScript 开发(五)要素图层的编辑
2018-4-3 这篇博客主要讲述要素的层的编辑功能,是基于FeatureLayer的applyEdit方法.由于自己目前正在学习当中,有许多不足之处请各位指出,欢迎指导学习! 主要功能是 1.将地图 ...
随机推荐
- Qt给应用程序添加版本信息(对rc文件的设置,可利用QT内置变量)
作者:daodaoliang 时间:2016年7月11日16:12:09 版本:V 0.0.4 邮箱:daodaoliang@yeah.net 0. 环境说明 系统环境: win10 64位 Qt环境 ...
- [android自动化构建]之centos安装gradle
这是android自动化构建系列之环境配置 这里只记录部分gradle相关的配置 下载并解压 下载地址参考这里:https://services.gradle.org/distributions/,未 ...
- ubuntu 14.04搭建tensorflow-gpu开发环境
一.安装nvidia显卡驱动 去navidia官网查看最新的驱动版本号:navidia官网:http://www.geforce.cn/drivers 找到显卡对应的驱动下载,例如下载的驱动为 NVI ...
- 你真的懂printf么?
自从你进入程序员的世界,就开始照着书本编写着各种helloworld,大笔一挥: printf("Hello World!\n"); 于是控制台神奇地出现了一行字符串,计算机一句温 ...
- 测试链接服务器sql 语句
sp_addlinkedsrvlogin 创建或更新本地 Microsoft® SQL Server™ 实例上的登录与链接服务器上远程登录之间的映射. 语法 sp_addlinkedsrvlogin ...
- 接口和抽象类是否继承了Object
我们先看一下Java的帮助文档对于Object的描述: Class Object is the root of the class hierarchy. Every class has Object ...
- Spring_One
Spring_01 Spring概述 Spring是分层的Java2E应用full-stack轻量级开源框架,,以IoC(Inverse Of Control:反转控制)和AOP(Aspect Ori ...
- 附008.Kubernetes TLS证书介绍及创建
一 Kubernetes证书 1.1 TLS Kubernetes系统的各个组件需要使用TLS证书对其通信加密以及授权认证,建议在部署之前先生成相关的TLS证书. 1.2 CA证书创建方式 kuber ...
- Scala 学习之路(六)—— 常用集合类型之 List & Set
一.List字面量 List是Scala中非常重要的一个数据结构,其与Array(数组)非常类似,但是List是不可变的,和Java中的List一样,其底层实现是链表. scala> val l ...
- Storm 学习之路(四)—— Storm集群环境搭建
一.集群规划 这里搭建一个3节点的Storm集群:三台主机上均部署Supervisor和LogViewer服务.同时为了保证高可用,除了在hadoop001上部署主Nimbus服务外,还在hadoop ...