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.将地图 ...
随机推荐
- 新玩法,CentOS7中LVM通过扩展逻辑卷扩展swap空间
在我们日常运维工作中,偶尔也会遇到需要扩展swap空间的操作.扩展swap空间的方法很多,现在让我们一起来探讨一下,在LVM下扩展swap空间的方法. 1.查看一下卷组,是否还有空闲空间能用于扩展sw ...
- 快速开发平台 WebBuilder 8.4 发布
WebBuilder是一款强大,全面和高效的应用开发和运行平台.基于浏览器的集成开发环境,可视化和智能化的设计,能轻松完成常规应用和面向手机的移动应用开发.高效.稳定和可扩展的特点,适合复杂企业级应用 ...
- WebGL场景的两种地面构造方法
总述:大部分3D编程都涉及到地面元素,在场景中我们使用地面作为其他物体的承载基础,同时也用地面限制场景使用者的移动范围,还可以在通过设置地块的属性为场景的不同位置设置对应的计算规则.本文在WebGL平 ...
- UI-grid 表格内容可编辑(enableCellEdit可指定列编辑)
在网上搜索了很多关于UI-Grid的问题 很遗憾好少啊啊啊 不过有API还是比较欣慰的 官方API:UI Grid 还有一位大佬的翻译的中文API:angularjs ui-grid中文api 行编辑 ...
- 机器学习经典算法之KNN
一.前言 KNN 的英文叫 K-Nearest Neighbor,应该算是数据挖掘算法中最简单的一种. 先用一个例子体会下. /*请尊重作者劳动成果,转载请标明原文链接:*/ /* https://w ...
- AJAX异步提交form表单
记录: 网上有说怎么做,没说怎么接收,打印了一下数据,记录一下取值: 比如说有如下form: <form id="form1" name="form1" ...
- Enter passphrase
提示“Enter passphrase for key /root/.ssh/id_rsa.pub”让输入私钥,可不论输与不输都不能直接登录 解决方法: 在本地执行: eval `ssh-agent` ...
- CSS中属性的详细运用(新手必看)
=不同的浏览器有不同的默认字体大小font-size 这里以谷歌浏览器为准字体大小为10px (其他浏览器是12px) 1.这里强调一个备注:属性继承 a 是特殊的,要改变a里面的颜色,必须在它后 ...
- hdoj2037 贪心算法——今年暑假不AC
所谓“贪心算法”是指:在对问题求解时,总是作出在当前看来是最好的选择.也就是说,不从整体上加以考虑,它所作出的仅仅是在某种意义上的局部最优解(是否是全局最优,需要证明). 经典问题:时间序列问题 ...
- 安装R和Rstudio后,Rstudio出现空白和fatal error问题
解决方法: 1.一定要以管理员方式启动Rstudio 2.只能安装一个R版本,之前安装的其他版本需要卸载干净 3.R和Rstudio需要安装在同一目录下