技术标签: WebGIS地图开发 解读WebGIS应用开发与领域应用 ArcGIS API for JavaScript 4.6
能不能在地图上涂个鸦?我们先看下面这张图:
在上面这张图其实是用点、线和多边形几个图形来绘制出来。在地图上绘制点、线和多边形是基本的功能需求,对于开发者来说,经常会用到,譬如在地图上打点标注、绘制行进的线路、标绘安保区域等等,当然你也可以向我这样很二的来个素描。
言归正卷,要绘制简单的几何图形,就得有工具。目前API里提供了两个工具,一个是简单的,一个是高级的。
- 简单的用SketchViewModel。SketchViewModel简化了将临时几何图形添加到MapView的过程,它节省了大量编写不同几何类型的代码的工作量。要使用SketchViewModel,只需要配置对应的GraphicsLayer,以及点、线、多边形的符号。
- 复杂的用Draw。Draw接口提供针对节点进行编辑的高级功能,特别适合在线的要素编辑,对于传统的地信行业用户来说是一个福音。具体的Draw使用后续再专门讲解。
完整的代码如下:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no" />
<title>二维地图开发-素描点、线与多边形</title>
<link rel="stylesheet" href="http://192.168.1.144/4.6/esri/css/main.css" />
<style>
html,
body,
#mapViewDiv {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
color:#8E980F;
}
#sketchToolsDiv {
background: #fff;
position: absolute;
top: 15px;
right: 15px;
padding: 10px;
}
.action-button {
font-size: 16px;
background-color: transparent;
border: 1px solid #D3D3D3;
color: #6e6e6e;
height: 32px;
width: 32px;
text-align: center;
box-shadow: 0 0 1px rgba(0, 0, 0, 0.3);
}
.action-button:hover,
.action-button:focus {
background: #0079c1;
color: #e4e4e4;
}
.active {
background: #0079c1;
color: #e4e4e4;
}
</style>
<script src="http://192.168.1.144/4.6/dojo/dojo.js"></script>
<script>
var myMap, mapView;
require([
"esri/Basemap",
"esri/layers/TileLayer",
"esri/Map",
"esri/views/MapView",
"esri/widgets/Sketch/SketchViewModel",
"esri/Graphic",
"esri/layers/GraphicsLayer",
"dojo/domReady!"
], function (Basemap, TileLayer, Map, MapView, SketchViewModel, Graphic, GraphicsLayer){
// *************************************
// TileLayer接口负责加载ArcGIS Server发布的MapServer缓存切片服务
// http://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer是GeoQ提供的以中国区域为主的缓存切片服务
// TileLayer将作为Basemap对象的一个图层添加到Map对象中。
// *************************************
var layer = new TileLayer({
url: "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer"
});
// *************************************
// Basemap:负责管理所有自定义的基础地图
// 我们可以把所有的基础地图都放在Basemap对象中
// 每个基础地图服务在Basemap对象中都作为一个图层
// *************************************
var customBasemap = new Basemap({
baseLayers: [layer],
title: "基础地图",
id: "gisBasemap"
});
myMap = new Map({
basemap: customBasemap
});
mapView = new MapView({
center: [113.293701, 23.096313], //初始化地图居中时的中心经度、维度
container: "mapViewDiv", //地图展示区域,对应页面上的DIV
map: myMap, //MapView包含Map对象
zoom: 18 //初始显示地图级别
});
// *************************************
// 定义有一个GraphicsLayer,它的职能是作为存储在地图上绘制的点、线、多边形要素.
// GraphicsLayer简称客户端图层,它所保存的要素全部在浏览器端绘制。
// *************************************
sketchGraphicsLayer = new GraphicsLayer();
myMap.add(sketchGraphicsLayer);
//监听地图在加载完成之后,再初始化SketchViewModel
mapView.when(function() {
// *************************************
// SketchViewModel简化了将临时几何图形添加到MapView的过程,它节省了大量编写不同几何类型的代码的工作量。
// 要使用SketchViewModel,只需要配置对应的GraphicsLayer,以及点、线、多边形的符号。
// *************************************
var sketchViewModel = new SketchViewModel({
view: mapView,
sketchayer: sketchGraphicsLayer,
pointSymbol: { //配置点符号
type: "simple-marker", // autocasts as new SimpleMarkerSymbol()
style: "circle",
color: "#0413F9",
size: "26px",
outline: { // autocasts as new SimpleLineSymbol()
color: "#DBDBDB",
width: 1 // points
}
},
polylineSymbol: { // symbol used for polylines
type: "simple-line", // autocasts as new SimpleMarkerSymbol()
color: "#9D9C9B",
width: "4",
style: "dash"
},
polygonSymbol: { // symbol used for polygons
type: "simple-fill", // autocasts as new SimpleMarkerSymbol()
color: "#FCA800",
style: "solid",
outline: {
color: "white",
width: 1
}
}
});
//************************************************************
//监听鼠标绘制完成事件
//当绘制完成后,把绘制的图形添加到地图上
//注意,如果是绘制线的话,使用鼠标右键绘制,点击鼠标左键完成绘制
//***********************************************************
sketchViewModel.on("draw-complete", function(evt) {
// add the graphic to the graphics layer
sketchGraphicsLayer.add(evt.graphic);
setActiveButton();
});
// *************************************
// 监听绘制点按钮鼠标点击事件
// 当点击该按钮时,激活sketchViewModel的点绘制功能
// *************************************
var drawPointButton = document.getElementById("pointButton");
drawPointButton.onclick = function() {
// set the sketch to create a point geometry
sketchViewModel.create("point");
setActiveButton(this);
};
// ****************************************
// 监听绘制线按钮鼠标点击事件
// 当点击该按钮时,激活sketchViewModel的线绘制功能
// ****************************************
var drawLineButton = document.getElementById("polylineButton");
drawLineButton.onclick = function() {
// set the sketch to create a polyline geometry
sketchViewModel.create("polyline");
setActiveButton(this);
};
// ***************************************
// 监听绘制多边形按钮鼠标点击事件
// 当点击该按钮时,激活sketchViewModel的多边形绘制功能
// ***************************************
var drawPolygonButton = document.getElementById("polygonButton");
drawPolygonButton.onclick = function() {
// set the sketch to create a polygon geometry
sketchViewModel.create("polygon");
setActiveButton(this);
};
// **************
// 清除在地图上绘制的图形
// **************
document.getElementById("resetBtn").onclick = function() {
sketchGraphicsLayer.removeAll(); //删除GraphicsLayer中的所有要素
sketchViewModel.reset(); //重新恢复sketchViewModel的初始状态
setActiveButton();
};
/**
* 激活按钮,以提醒当前在使用的工具
* @param electedButton
*/
function setActiveButton(selectedButton) {
// focus the view to activate keyboard shortcuts for sketching
mapView.focus();
var elements = document.getElementsByClassName("active");
for (var i = 0; i < elements.length; i++) {
elements[i].classList.remove("active");
}
if (selectedButton) {
selectedButton.classList.add("active");
}
}
});
});
</script>
</head>
<body>
<div id="mapViewDiv">
</div>
<div id="sketchToolsDiv">
<button class="action-button esri-icon-blank-map-pin" id="pointButton" type="button"
title="绘制点"></button>
<button class="action-button esri-icon-polyline" id="polylineButton" type="button"
title="绘制线"></button>
<button class="action-button esri-icon-polygon" id="polygonButton" type="button"
title="绘制多边形"></button>
<button class="action-button esri-icon-trash" id="resetBtn" type="button" title="清除"></button>
</div>
</body>
</html>
代码量很少,都已经写了注释,所以这里就不过多阐述。需要提醒一点的是API中涉及到的组件按钮,Esri在设计之初都已经提供了相应的CSS样式,譬如下面这个按钮:
<button class="action-button esri-icon-blank-map-pin" id="pointButton" type="button" title="绘制点"></button>
就用到了action-button esri-icon-blank-map-pin这个样式,省去了再去设计按钮样式的麻烦,而且按钮的样式设计的也很美观,对于刚刚接入地图开发的开发者来说,是一个福音,先实现功能,界面还不错,先实现个小目标再说。
转自:http://blog.csdn.net/liangzhaoyang1/article/details/51036037HDOJ题目分类:模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 1049 1050 1057 1062 106
经历了几天的周折,近期才把项目完成,在这里与大家分享一下踩坑之路,也方便日后有类似项目,可以借阅一番 开发直播前先满足已下条件 1.开通视频直播功能 2.购买好了OSS存储 3.购买两个域名并且备案好,一个用来拉流,一个用来播流, 4.建议CNAM加速也设置好这样直播没那么卡 该项目是一个H5直播,采用m3u8格式完成直播的展示。通过推流地址,借助第三方推流工具实现直播效果,比如:OBS 或者一些微信小...
一、 实现工具——微信开发者工具为何使用微信小程序作为展示?(1)范围广且能跨平台访问;(2)小而快能够快速的访问;二、 实现步骤1、总体大概:(1)界面设计:数据直观展示+历史数据+物联网调试信息(2)连接服务器与回调利用wx.request(Object object)发起 HTTPS 网络请求。参数:url:开发者服务器接口地址;data:请求的参数;header:设置请求的 header,...
1. 问题Linux下利用gsoap开发web service客户端,服务器端为发送短信的功能。开发过程:https://blog.csdn.net/g1269420003/article/details/81317632可以成功发送短信,但发送中文接收到的是乱码,服务器端接收到的也是乱码。我的Linux环境locale设置为utf-8,多次修改locale设置,结果仍然无法发送中...
DDoS防御发展史DDoS(Distributed Denial of Service,分布式拒绝服务)主要通过大量合法的请求占用大量网络资源,从而使合法用户无法得到服务的响应,是目前最强大、最难防御的网络攻击之一。 有需要购买阿里云DDOS高防或其它任何产品,领取专属优惠代金券!领取地址:https://blog.csdn.net/qq_38461232/article/detail...
1 倒排索引1.1 书的目录和索引正排索引即目录页,根据页码去找内容倒排索引即索引页,根据关键词去找对应页码1.2 搜索引擎正排索引文档Id =》文档内容、单词的关联关系倒排索引单词 =》 文档Id的关联关系左:正排索引 =》 右:倒排索引倒排索引查询流程查询包含"搜索引擎”的文档通过倒排索引获得"搜索引擎”对应的文档Id有1和3通过正排索引查询1和3的完整内容返回最终结果1.3 倒排索引的组成1.3.1 单词词典( Term Dictionar
前言: 这个问题没有遇到过,但是面试当中很可能会被问到,当然也不主要是为了应对面试,学到知识才是王道为什么会慢: 在应用程序中定义的每个上下文,其首次使用时,JUST-INTIME编译器:Entity Framework都会根据数据库中的信息在内存中生成一个映射视图(mapping views),这个操作非常耗时。定义的每一个上下文都会受此困扰 1、Code First第一次启动
1、数据来源:自主计算2、时间跨度:无3、区域范围:无4、指标说明:部分数据如下:相关研究:[1]才国伟, 刘冬妍. 劳动合同对农民工收入的影响机制研究——基于内生转换回归模型的实证分析[J]. 中国社会科学院研究生院学报, 2014(4):54-64.[2]冯志坚, 莫旋. 养老保险对乡城流动人口劳动供给的影响——基于内生转换回归模型的分析[J]. 人口与经济, 2019, 000(004):14-29.[3]韩军辉, 李锦. 自选择、非农就业城乡转换及工资差距[J]. 云南财经大学学报, 2015, 0
SLD参考标准与GeoServer扩展最开始的SLD 1.0.0版本在《OGC Styled Layer Descriptor ImplementationSpecification》中定义,该文档的下载地址为:http://portal.opengeospatial.org/files/?artifact_id=1188。之后SLD 1.1.0分为两个规范:《OGC Symbology Encoding ImplementationSpecification》和《OGC Styled Layer
伊利诺伊大学厄本那-香槟分校电气与计算机工程系开设以下3个研究生学位项目:电气与计算机工程理学硕士(MASTER OF SCIENCE in ECE):为期1.5-2年,共计32个学分。要求申请者本科毕业,拥有电气与计算机工程相关专业背景,无工作经验要求亦无前置课程要求。该项目属于研究导向的项目,需要撰写毕业论文,申请者需提前联系导师确定研究方向,建议可选择相关研究领域的论文或文章阅读,可为进入电...
满意答案fkmhuc2013.04.25采纳率:43%等级:7已帮助:461人路由器备份出来的bin文件如何查看?路由器备份的配置文件一般是.bin格式,默认名称通常是conf.bin,如下图。这个备份的配置文件中,包含了宽带账号、宽带密码以及WiFi密码等信息,有时候,对我们找回宽带账号与密码或者WiFi密码很有很大的帮助。 bin文件怎么打开 路由器备份出来的bin文件如何查看? 不过...
Prologue前面陆陆续续写了几篇关于Flink的浅显的小文章,其中多次提到了“异步屏障快照(asychronous barrier snapshot, ABS)算法”这个词,并指出它是Flink检查点机制的基础。而ABS算法的渊源就是本文要说的Chandy-Lamport算法,它是目前在流式系统中广泛使用的分布式快照算法。这个算法在论文《Distributed Snapsh...