有了开发环境,接下来的就是实践了,实践是检验真理的唯一标准!

多多练习,不要觉得自己能够想的出来就万事大吉了,还是得动手做才是最好的检验自己的能力。


基础地图,本节将通过arcgis api for javascript 实现——加载2D地图、鹰眼、比例尺、图例等基本的功能。

首先如何完成上面的功能?将用到哪些技术?哪些类?这些是我们先必须知道的:

dojo需引入的esri/map 资源或者说是类吧: dojo.request("esri/map"); 这个资源是加载地图的基本,Map类,继承了Accessor;它的子类:WebMap , WebScene

Since: ArcGIS API for JavaScript 4.0

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 开发(二)基础地图的更多相关文章

  1. ArcGIS API for JavaScript开发初探——基础知识

    1.前言 在ArcGIS Web API开发体系中一共有四大类,分别为: ArcGIS API for Flex ArcGIS API for JavaScript ArcGIS API for RE ...

  2. ArcGIS API for JavaScript开发初探——基本地图组件使用

    1.前言 在上一篇我们已经我们已经讲述了第一个地图应用程序的HelloMap的创建过程,这一篇我们来讲述基本地图组件:Home Button.比例尺.鹰眼图的使用方法. 2.基本地图组件 在ArcGI ...

  3. ArcGIS API for javascript开发笔记(二)——解决ArcGIS Service中的服务在内网环境下无法进行javascript预览问题

    感谢一路走来默默支持和陪伴的你~~~ ----------------------------拒绝转载-------------------------------- 1.问题说明 在使用ArcGIS ...

  4. ArcGIS API for JavaScript开发环境搭建及第一个实例demo

    原文:ArcGIS API for JavaScript开发环境搭建及第一个实例demo ESRI公司截止到目前已经发布了最新的ArcGIS Server for JavaScript API v3. ...

  5. ArcGis API for JavaScript学习——加载地图

    ArcGis API for JavaScript开发笔记——加载地图 在这个例子中使用的离线部署的API(请参见 http://note.youdao.com/noteshare?id=f42865 ...

  6. ArcGIS API for JavaScript开发初探——HelloMap

    1.前言 在开始ArcGIS API for JavaScript开发之前我们需要了解一些基本的知识: 1.开发工具选什么? 前端技术的开发工具选择是一个仁者见仁智者见智的问题,有人喜欢Hbuilde ...

  7. ArcGIS API for JavaScript开发环境搭建与发布以及基本功能实现

    1.背景介绍 ArcGIS API for JavaScript 咱这就不介绍了,具体可看ESRI中国的介绍:http://support.esrichina.com.cn/2011/0223/960 ...

  8. ArcGIS API For JavaScript 开发(一)环境搭建

    标签:B/S结构开发,Asp.Net开发,WebGIS开发 前言:为什么写这个,一是学习:二是分享,共同进步,毕竟也是在这个园子里学到了很多: (一)环境搭建 集成开发环境:VS2013 Ultima ...

  9. ArcGIS API For JavaScript 开发(五)要素图层的编辑

    2018-4-3 这篇博客主要讲述要素的层的编辑功能,是基于FeatureLayer的applyEdit方法.由于自己目前正在学习当中,有许多不足之处请各位指出,欢迎指导学习! 主要功能是 1.将地图 ...

随机推荐

  1. python中的函数名,闭包,迭代器

    一.函数名 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量,单纯print()出的是一个内存地址. def func(): print('你说你有点难追') print(func ...

  2. python自动化测试之mysql5.0版本数据库查询数据时出现乱码问题分析

    1.确保数据库编码是utf8编码.若不是,请将my.ini的client,mysql,mysqld三个字段下面添加default-character-set = utf8,这样可以永久改变在新建数据库 ...

  3. 【springBoot】SpringBoot修改启动logo图案

    修改boot启动banner logo看到比较好玩,就存一下~ (1)我们在src/main/resources下新建一个banner.txt文件. (2)通过http://patorjk.com/s ...

  4. JS的第一天,精彩内容

    1.JS 介绍 js的全称是JavaScript,它是一门前台语言 Java是一门后台语言 ,它们两个之间毫无关系 JavaScript的作者是布兰登,艾奇 前台语言:运行在客户端 后台语言:与数据库 ...

  5. vue随笔

    1.vue基础 Vue 是一个mvvm 的渐进式框架.Angular 是一个mvc的.所以vue的重点更偏向于mv 他的使用方式 大家会发现里面带有大量的$的属性. 学习vue的指令 V-for  用 ...

  6. Ural 2070:Interesting Numbers(思维)

    http://acm.timus.ru/problem.aspx?space=1&num=2070 题意:A认为如果某个数为质数的话,该数字是有趣的.B认为如果某个数它分解得到的因子数目是素数 ...

  7. Vue技术点整理-安装引入

    Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架 所谓渐进式是指: 1,如果你有一个现成的web应用,你可以将vue作为该应用的一部分嵌入其中,带来更丰富的交互体验 ...

  8. [AI开发]目标跟踪之行为分析

    基于视频结构化的应用中,目标在经过跟踪算法后,会得到一个唯一标识和它对应的运动轨迹,利用这两个数据我们可以做一些后续工作:测速(交通类应用场景).计数(交通类应用场景.安防类应用场景)以及行为检测(交 ...

  9. http文件传输

    上传端: File uploadFile =new File(); PostMethod mPost = null; try{ String targetURL ="; HttpClient ...

  10. Dijkstra算法与堆(C++)

    Dijkstra算法用于解决单源最短路径问题,通过逐个收录顶点来确保得到以收录顶点的路径长度为最短.      图片来自陈越姥姥的数据结构课程:https://mooc.study.163.com/l ...