根据以下内容写设计说明文档: 基于ArcGIS API for JavaScript3.46,设计一个WebGIS的地图应用,需包括以下功能:1. 基础地图:调用hybrid底图,设置地图初始中心点坐标为[-95.625,39.243]。2. 地图小部件:添加线性样式的比例尺控件,通过布局配置将比例尺定位至地图左下角。3. 地图绘制工具:实现点要素绘制工具,默认符号采用20px尺寸的三角形。4. 独立值专题图:加载要素服务,并根据sub_region字段创建独立值专题图,需完整包含以下枚举值:Pacific、Mtn、N Eng、S Atl、Mid Atl、E N Cen、W N Cen、E S Cen、W S Cen。REST服务地址如下:“https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer/2”
5. 代码及设计文档提交:提交完整的代码及电子版设计说明文档。
设计文档须系统阐述开发过程与技术方案,最终形成结构严谨、图文并茂的技术文档! 代码如下:<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>添加地图小部件</title>
<link rel="stylesheet" href="https://js.arcgis.com/3.45/esri/css/esri.css">
<script src="https://js.arcgis.com/3.45/init.js"></script>
<style>
html, body, #mapDiv {
padding: 0;
margin: 0;
width: 100%;
height: 100%;
}
#legendDiv{
width: 150px;
height: 500px;
top:250px;
left:100px;
position: absolute !important;
max-height:100x; /* 限制高度 */
overflow-y: auto; /* 添加滚动条 */
font-size: 20px; /* 减小字体大小 */
}
</style>
<script>
/*在arcgis api for javascript中,提供了一个类叫做esri/toolbars/navigation,
通过这个类,用户可以实现对地图的基本操作。
*/
require([
"esri/map",
"esri/layers/ArcGISDynamicMapServiceLayer",
"esri/dijit/Scalebar",
"esri/symbols/SimpleMarkerSymbol",
"esri/toolbars/draw",
"esri/graphic",
"esri/layers/GraphicsLayer",
"esri/Color",
"esri/layers/FeatureLayer",
"esri/InfoTemplate",
"esri/renderers/UniqueValueRenderer",
"esri/symbols/SimpleFillSymbol",
"esri/dijit/Legend"
],
function(
Map,
ArcGISDynamicMapServiceLayer,
Scalebar,
SimpleMarkerSymbol,
Draw,
Graphic,
GraphicsLayer,
Color,
FeatureLayer,
InfoTemplate,
UniqueValueRenderer,
SimpleFillSymbol,
Legend
) {
var map = new Map("mapDiv", {
center: [-95.625,39.243],
zoom:2,
basemap: "hybrid"
});
//添加比例尺
var scalebar = new Scalebar({
map: map,// 参考底图,必选项
attachTo: "bottom-left", // 指定比例尺在地图上的位置
scalebarStyle:"line",// 比例尺类型,比例尺以线性显示
scalebarUnit: "english",// 比例尺单位
});
// 声明一个draw工具条
var toolBar = new Draw(map);
// 绑定激活绘图工具的函数
function activate_tool() {
// 根据class获取所有按钮
var btns = document.getElementsByClassName('btn-info');
console.log('btns',btns)
for(var i = 0; i < btns.length; ++ i) {
var type = btns[i].getAttribute('aria-label');
// 绘制点
if (type === "POINT") {
btns[i].onclick = function() {
toolBar.activate(Draw.POINT)
};
// 结束绘制
} else if (type === "disabledraw") {
btns[i].onclick = function() {
toolBar.deactivate();
}
}
}};
// 调用函数
activate_tool();
// 为声明的draw工具添加了一个draw-complete事件,绘图结束后将图形显示在地图上
toolBar.on("draw-complete", drawEndEvent)
function drawEndEvent(evt) {
var geometry=evt.geometry;
console.log("geometry",geometry)
var type=geometry.type;
console.log("type",type)
// 创建点符号
var pointSymbol = new SimpleMarkerSymbol(
SimpleMarkerSymbol.STYLE_TRIANGLE,//点的形状
20,//点的大小
null,//轮廓线的样式
new Color([255,0,127,0.5])//点的颜色
);
// 添加图形到地图
var graphic=new Graphic(geometry,pointSymbol);
var graphicslayer=new GraphicsLayer();
graphicslayer.add(graphic);
map.addLayer(graphicslayer);
}
var featurelayer=new FeatureLayer('https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer/2',//必选参数
{
mode:FeatureLayer.MODE_SNAPSHOT,//指定构造要素图层时显示的模式
outFields:["*"],//指定返回的数据值,*表示返回所有值
infoTemplate:new InfoTemplate(" ", "${sub_region}"),
}
)
var defaultSymbol=new SimpleFillSymbol().setStyle(SimpleFillSymbol.STYLE_NULL);
//声明独立值专题图
var renderer = new UniqueValueRenderer(
defaultSymbol, //默认符号
"sub_region"//渲染器用于匹配值的属性字段
);
//为独立值指定不同的符号
renderer.addValue("Pacific",new SimpleFillSymbol().setColor(new Color([255,0,0,0.5])))
renderer.addValue("Mtn",new SimpleFillSymbol().setColor(new Color([255,128,0,0.5])))
renderer.addValue("N Eng",new SimpleFillSymbol().setColor(new Color([255,255,0,0.5])))
renderer.addValue("S Atl",new SimpleFillSymbol().setColor(new Color([0,255,0,0.5])))
renderer.addValue("Mid Atl",new SimpleFillSymbol().setColor(new Color([0,255,255,0.5])))
renderer.addValue("E N Cen",new SimpleFillSymbol().setColor(new Color([0,0,255,0.5])))
renderer.addValue("W N Cen",new SimpleFillSymbol().setColor(new Color([128,0,128,0.5])))
renderer.addValue("E S Cen",new SimpleFillSymbol().setColor(new Color([75,0,130,0.5])))
renderer.addValue("W S Cen",new SimpleFillSymbol().setColor(new Color([138,43,226,0.5])))
//调用要素图层的setRenderer的方法,生成专题图
featurelayer.setRenderer(renderer)
map.addLayer(featurelayer)
var legend = new Legend({
map: map
}, "legendDiv");
legend.startup();
});
</script>
</head>
<body>
<button class='btn-info' aria-label="POINT">点</button>
<button class='btn-info' aria-label="disabledraw">结束绘制</button>
<div id="mapDiv"></div>
<div id="legendDiv"></div>
</body>
</html>