esri/symbols/SimpleMarkerSymbol 点符号

本文介绍如何使用AMD模块加载Esri的SimpleMarkerSymbol,该符号用于在地图上绘制点或多点。提供了构造函数、常量、属性及方法等详细信息。

AMD模块要求 ]

require ([ “esri / symbols / SimpleMarkerSymbol” ],function (SimpleMarkerSymbol ){ / * code goes here * / });   

描述

标记符号用于在图形图层上绘制点和多点。SimpleMarkerSymbol用于将点显示为简单形状,例如圆形。此外,符号可以有一个可选的轮廓,由线符号(SimpleLineSymbol)定义。

 

构造函数

 

名称简述
new SimpleMarkerSymbol()创建一个空的点符号对象(无样式)
new SimpleMarkerSymbol(style, size, outline, color)通过参数创建一个点符号对象
new SimpleMarkerSymbol(json)使用JSON创建一个点符号对象

常量

NameDescription
STYLE_CIRCLE圆符号
STYLE_CROSSThe marker is a cross.
STYLE_DIAMONDThe marker is a diamond.
STYLE_PATHThe marker is a shape defined using an SVG Path string. See also the setPath method.
STYLE_SQUAREThe marker is a square.
STYLE_XThe marker is a diagonal cross.

 

属性

名称类型简述
angleNumberThe angle of the marker.
colorColorSymbol color.
outlineSimpleLineSymbolOutline of the marker.
sizeNumberSize of the marker in pixels.
styleStringThe marker style.
typeStringThe type of symbol.
xoffsetNumberThe offset on the x-axis in pixels.
yoffsetNumberThe offset on the y-axis in pixels.

 

方法

NameReturn typeSummary
setAngle(angle)MarkerSymbolRotates the symbol clockwise around its center by the specified angle.
setColor(color)SymbolSets the symbol color.
setOffset(x, y)MarkerSymbolSets the x and y offset of a marker in screen units.
setOutline(outline)SimpleMarkerSymbolSets the outline of the marker symbol.
setPath(path)SimpleMarkerSymbolSets the marker shape to the given path string and switches the marker style to STYLE_PATH.
setSize(size)MarkerSymbolSets the size of a marker in pixels.
setStyle(style)SimpleMarkerSymbolSets the marker symbol style.
toJson()ObjectConverts object to its ArcGIS Server JSON representation.

 

构造函数详细信息

 

require([
  "esri/symbols/SimpleMarkerSymbol", ... 
], function(SimpleMarkerSymbol, ... ) {
  var sms = new SimpleMarkerSymbol();
  ...
});

 

检查一下:<!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%; } </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", ], function(Map, ArcGISDynamicMapServiceLayer, Scalebar, SimpleMarkerSymbol, Draw, Graphic, GraphicsLayer, Color ) { var map = new Map("mapDiv", { center: [-95.625,39.243], zoom:2, basemap: "hybrid" , isPan:false,//禁止平移 }); //调用动态地图服务 var layer = new ArcGISDynamicMapServiceLayer( "https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer",{ "opacity": 0.75 }) map.addLayer(layer) ; //添加比例尺 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,//的大小 new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color([255,0,0]), 1),//轮廓线的样式 new Color([0,255,0,0.25])//的颜色 ); // 添加图形到地图 if (type === "point") { var graphic=new Graphic(geometry,pointSymbol); } var graphicslayer=new GraphicsLayer(); graphicslayer.add(graphic); map.addLayer(graphicslayer); } }); </script> </head> <body> <button class='btn-info' aria-label="POINT"></button> <button class='btn-info' aria-label="disabledraw">结束绘制</button> <div id="mapDiv"></div> </body> </html>
06-07
require(["dojo/parser", "dijit/registry", "dojo/_base/array", "dojo/string", "esri/map", "esri/geometry/Extent", "esri/SpatialReference", "esri/layers/ArcGISTiledMapServiceLayer", "esri/toolbars/draw", "esri/graphic", "esri/symbols/SimpleMarkerSymbol", "esri/symbols/SimpleLineSymbol", "esri/symbols/SimpleFillSymbol", "esri/Color", "esri/tasks/Geoprocessor", "esri/tasks/FeatureSet", "esri/InfoTemplate", "CustomModules/geomUtils", "dijit/layout/BorderContainer", "dijit/layout/ContentPane", "dijit/form/Button", "dojo/domReady!"], function (parser, registry, array, string, Map, Extent, SpatialReference, ArcGISTiledMapServiceLayer, Draw, Graphic, SimpleMarkerSymbol, SimpleLineSymbol, SimpleFillSymbol, Color, Geoprocessor, FeatureSet, InfoTemplate, geomUtils) { parser.parse(); var wgs84 = new SpatialReference({ wkid: 4326 }); var extent = new Extent(-117.38917350769043, 32.499704360961914, -116.51026725769043, 33.02292823791504, wgs84) var map = new esri.Map("map", { extent: extent }); map.infoWindow.resize(620, 300); var streetMap = new ArcGISTiledMapServiceLayer("https://server.arcgisonline.com/arcgis/rest/services/World_Street_Map/MapServer"); map.addLayer(streetMap); // 创建符号 var inputSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASH, new Color([255, 0, 0]), 2); var profileSymbol = new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([0, 0, 255]), 3); // 地理处理服务 gpTask_SurfaceProfile = new Geoprocessor("https://elevation.arcgis.com/arcgis/rest/services/Tools/ElevationSync/GPServer/Profile"); var drawToolbar = new Draw(map); drawToolbar.on("draw-end", onDrawEnd); registry.byId("ProfileTool").on("click", function () { activateGPTask('LINE'); }); registry.byId("ExecuteProfileTool").on("click", function () { activateGPTask('POLYLINE'); }); registry.byId("ClearProfilesTool").on("click", function () { map.infoWindow.hide(); map.graphics.clear(); }); // ACTIVATE THE DRAW TOOLBAR function activateGPTask(geomType) { map.infoWindow.hide(); switch (geomType) { case 'LINE': drawToolbar.activate(Draw.LINE); break; case 'POLYLINE': drawToolbar.activate(Draw.POLYLINE); break; } } // CALLED WHEN USER FINISHES DRAWING ON THE SCREEN function onDrawEnd(evt) { // CREATE GRAPHIC FEATURE var userGraphic = new Graphic(evt.geometry, inputSymbol); // ADD GRAPHIC FEATURE TO MAP map.graphics.add(userGraphic); // CREATE PROFILE //executeGPTask(); var features = []; features.push(userGraphic); var featureSet = new FeatureSet(); featureSet.features = features; // TASK PARAMETERS var taskParams = { 'Input_Polylines': featureSet, 'Image_Width': 600, 'Image_Height': 250, 'Display_Segments': 'true' }; // EXECUTE GP TASK gpTask_SurfaceProfile.setOutputSpatialReference(wgs84); gpTask_SurfaceProfile.execute(taskParams, getGPResultsAsFeatures); // DEACTIVATE drawToolbar.deactivate(); } // GET GP RESULTS function getGPResultsAsFeatures(results, messages) { // PROFILE RESULTS var profileFeatures = results[0].value.features; for (var fIdx = 0; fIdx < profileFeatures.length; fIdx++) { var resultFeature = profileFeatures[fIdx]; var imgHTML = string.substitute('<img id="profileImage_${FID}" src="${profileURL}"></img>', resultFeature.attributes); resultFeature.setSymbol(profileSymbol); resultFeature.setInfoTemplate(new InfoTemplate("剖面线长:${length2D} 米", imgHTML)); map.graphics.add(resultFeature); } // SHOW INFO WINDOW FOR FIRST RESULT FEATURE if (profileFeatures.length > 0) { var firstFeature = profileFeatures[0]; map.infoWindow.setTitle(firstFeature.getTitle()); map.infoWindow.setContent(firstFeature.getContent()); var midPnt = geomUtils.getMidPoint(firstFeature.geometry); var scrPnt = map.toScreen(midPnt); map.infoWindow.show(scrPnt, map.getInfoWindowAnchor(scrPnt)); } } });
05-21
根据以下内容写设计说明文档: 基于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>
06-08
不改变以下代码基础上添加上面的功能:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>07-1 findtask</title> <!-- 用来引入esri.css和tundra.css样式表 --> <link rel="stylesheet" type="text/css" href="https://js.arcgis.com/3.45/dijit/themes/tundra/tundra.css"/> <link rel="stylesheet" type="text/css" href="https://js.arcgis.com/3.45/esri/css/esri.css"/> <!-- 用来引入init.js,即可引入ArcGIS API for Javascript--> <script src="https://js.arcgis.com/3.45/init.js"></script> <!-- style标签用来设定页面显示外观,其中width和hight分别用来设置组件mapDiv的宽和高,border用来设置mapdiv的边框样式 .mapclass根据元素的id属性值,来精准的选中元素--> <style> .MapClass{ width:100%; height: 500px; border: 1px solid #000; } </style> </head> <body class="tundra"> <div id="mapDiv" class="MapClass"></div> <!-- 通过input标签,设置文本输入框 --> Name:<input id="searchInput" type="text"> <!-- 设置button按钮 --> <button id="btn">查询</button> <!-- 利用table标签写表格,thead标签表示表头,tr表示一行,th表示单元格,tbody表示表身 --> <table > <thead> <tr> <th width="100px">名称</th> <th width="100px">类型</th> <th width="100px">面积</th> </tr> </thead> <tbody id="infoBody"></tbody> </table> <!-- script标签用来书写Javascript代码 --> <script> /** *思路: * 1. 创建查询对象FindTask,对查询对象实例化 2. 创建属性查询参数 3.给findTask查询按钮添加一个click事件 (1)获取HTML页文本框所输入的查询名称。 (2)实例化FindParameters参数 (3)调用execute函数,执行查询 4.处理查询结果 (1)将获得的要素定位高亮显示,在回调函数中新建图形符号,设置获得fintask查询得到的geometry。 (2)在table面板中展示信息,利用数组获得查询信息,并在 table中展示信息 */ require(["esri/map", "esri/layers/ArcGISDynamicMapServiceLayer", "esri/tasks/FindTask", "esri/tasks/FindParameters", "esri/symbols/SimpleMarkerSymbol", "esri/symbols/SimpleLineSymbol", "esri/symbols/SimpleFillSymbol", "esri/geometry/Point", "esri/Color", "esri/graphic", ], // function用来表示回调函数,function中的参数要与require中的类一一对应。 function(Map,ArcGISDynamicMapServiceLayer,FindTask,FindParameters,SimpleMarkerSymbol, SimpleLineSymbol,SimpleFillSymbol,Point,Color,Graphic){ //添加动态地图服务图层 var map = new Map("mapDiv"); var layer=new ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/MyMapService/MapServer"); map.addLayer(layer); //创建属性查询对象,对查询对象实例化,FindTask构造函数需要一个ArcGIS Server地图服务的URL var findTask = new FindTask("http://localhost:6080/arcgis/rest/services/MyMapService/MapServer"); //实例化查询参数, var findParams = new FindParameters(); //给属性查询按钮添加一个click事件 document.getElementById("btn").onclick=function funFind(){ var name=document.getElementById("searchInput").value;//获得输入框的值,即当击id="btn"的查询按钮时,获取到id=searchInput输入框的输入值。 map.graphics.clear();//清除上一次的高亮显示,若不写这个代码,选中的图层不会清空 findParams.returnGeometry = true; //注意 returnGeometry被设置为true以便结果能被显示在地图上。 //FindParameters指出哪些图层和字段将被搜索。如果多个图层包含相同的字段名称(例如"NAME")两个字段都要被搜索。 findParams.layerIds = [0,1];//对省级行政区和省级行政区-线查询 findParams.searchFields = ["name"];//匹配图层中的name属性 findParams.searchText = name;//searchText参数是任务将要搜索什么。这个文本来自输入框并且当单击查询,按钮时被发送到execute函数。 //name为击查询按钮时获得的输入框的值 findParams.returnGeometry = true; //注意 returnGeometry被设置为true以便结果能被显示在地图上。 /*进行查询,当任务执行结束,showResults函数循环访问FindResult里的graphics数组, 并增加每个图形到地图。函数也增加每个结果的属性到表格。 */ findTask.execute(findParams,showFindResult) // console.log(findParams); } //处理属性查询返回给我们的数据 function showFindResult(findResult) { //初始化信息暂存数组 nameArr=[];//用于存储查询地名称 shapeArr=[];//用于存储查询shape AREAArr=[];//用于存储查询shape console.log(findResult); if (findResult.length === 0) { alert("查询无结果"); return; } for (var i = 0; i < findResult.length; i++) { nameArr[i]=findResult[i].feature.attributes.name; shapeArr[i]=findResult[i].feature.attributes.Shape; AREAArr[i]=findResult[i].feature.attributes.AREA; //定义高亮图形的符号 var lineSymbol= new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASHDOT,new Color([255, 0, 0]), 1); //定义面的边界线符号 var PolygonSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, lineSymbol,new Color([0, 255, 0, 1])); //定义面符号 //获得图形graphic var graphic=findResult[i].feature; //赋予相应符号 graphic.setSymbol(PolygonSymbol); //将graphic添加到地图中,从而实现高亮效果 map.graphics.add(graphic); } //通过循环写入表格主体数据,tr标签为行,td标签为单元格。 var html=""; for(var i=0;i<nameArr.length;i++){ html+="<tr>" + " <td >"+nameArr[i]+"</td>" + "<td >"+shapeArr[i]+"</td>" + "<td >"+AREAArr[i]+"</td>" + "</tr>"; } //将属性绑定在infoBody的表格上,即修改表格主体的内容。 document.getElementById("infoBody").innerHTML =html; } } ) </script> </body> </html>
06-12
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Feature Layer Integration</title> <!-- 引入样式 --> <link rel="stylesheet" href="https://js.arcgis.com/4.25/esri/themes/light/main.css"> <!-- 引入ArcGIS API --> <script src="https://js.arcgis.com/4.25/"></script> <style> #viewDiv { padding: 0; margin: 0; height: 600px; width: 100%; } .measureButtons { margin-top: 10px; } </style> </head> <body> <div id="viewDiv"></div> Name:<input id="searchInput" type="text"> <button id="btn">查询</button> <div class="measureButtons"> <button id="measureLengthBtn">测量距离</button> <button id="measureAreaBtn">测量面积</button> <button id="clearMeasureBtn">清除测量</button> </div> <table> <thead> <tr> <th>名称</th> <th>类型</th> <th>面积 (平方米)</th> </tr> </thead> <tbody id="infoBody"></tbody> </table> <p><strong>总面积:</strong><span id="totalArea">0 平方米</span></p> <script> require([ "esri/Map", "esri/views/MapView", "esri/layers/FeatureLayer", "esri/tasks/support/Query", "esri/tasks/QueryTask", "esri/widgets/AreaMeasurement2D", "esri/widgets/DistanceMeasurement2D", "esri/Graphic", "esri/symbols/SimpleFillSymbol", "esri/symbols/SimpleLineSymbol", "esri/Color", "dojo/domReady!" ], function( Map, MapView, FeatureLayer, Query, QueryTask, AreaMeasurement2D, DistanceMeasurement2D, Graphic, SimpleFillSymbol, SimpleLineSymbol, Color ) { // 创建地图实例 var map = new Map({ basemap: "streets-navigation-vector" }); // 创建视图实例 var view = new MapView({ container: "viewDiv", map: map, center: [105, 25], // WGS_1984_UTM_zone_48N 的中心 zoom: 7, spatialReference: { wkid: 32648 } // WGS_1984_UTM_zone_48N 投影坐标 }); // 加载文件地理数据库要素类 var featureLayer = new FeatureLayer({ url: "http://localhost/arcgis/rest/services/gzlx_FeatureToPolygon1/FeatureServer/0", outFields: ["*"] }); map.add(featureLayer); // 查询功能 document.getElementById("btn").onclick = function() { var name = document.getElementById("searchInput").value.trim(); if (!name) { alert("请输入查询名称"); return; } view.graphics.removeAll(); var query = new Query(); query.where = `name = '${name}'`; query.returnGeometry = true; query.outFields = ["*"]; var queryTask = new QueryTask({ url: featureLayer.url }); queryTask.execute(query).then(function(response) { if (response.features.length === 0) { alert("查询无结果"); return; } var totalArea = 0; response.features.forEach(function(feature) { var area = feature.geometry.getArea(); totalArea += area; var symbol = new SimpleFillSymbol({ color: [0, 255, 0, 0.5], outline: { color: [255, 0, 0], width: 2 } }); var graphic = new Graphic({ geometry: feature.geometry, symbol: symbol, attributes: feature.attributes }); view.graphics.add(graphic); }); document.getElementById("totalArea").textContent = totalArea.toFixed(2) + " 平方米"; var html = ""; response.features.forEach(function(feature) { html += `<tr> <td>${feature.attributes.name || "未知名称"}</td> <td>${feature.geometry.type}</td> <td>${feature.geometry.getArea().toFixed(2)}</td> </tr>`; }); document.getElementById("infoBody").innerHTML = html; }); }; // 测量距离功能 var distanceMeasurement = new DistanceMeasurement2D({ view: view }); view.ui.add(distanceMeasurement, "top-right"); document.getElementById("measureLengthBtn").onclick = function() { distanceMeasurement.start(); }; // 测量面积功能 var areaMeasurement = new AreaMeasurement2D({ view: view }); view.ui.add(areaMeasurement, "top-right"); document.getElementById("measureAreaBtn").onclick = function() { areaMeasurement.start(); }; // 清除测量 document.getElementById("clearMeasureBtn").onclick = function() { view.graphics.removeAll(); distanceMeasurement.clear(); areaMeasurement.clear(); }; }); </script> </body> </html>结合以下代码:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>07-1 findtask</title> <!-- 用来引入esri.css和tundra.css样式表 --> <link rel="stylesheet" type="text/css" href="https://js.arcgis.com/3.45/dijit/themes/tundra/tundra.css"/> <link rel="stylesheet" type="text/css" href="https://js.arcgis.com/3.45/esri/css/esri.css"/> <!-- 用来引入init.js,即可引入ArcGIS API for Javascript--> <script src="https://js.arcgis.com/3.45/init.js"></script> <!-- style标签用来设定页面显示外观,其中width和hight分别用来设置组件mapDiv的宽和高,border用来设置mapdiv的边框样式 .mapclass根据元素的id属性值,来精准的选中元素--> <style> .MapClass{ width:100%; height: 500px; border: 1px solid #000; } </style> </head> <body class="tundra"> <div id="mapDiv" class="MapClass"></div> <!-- 通过input标签,设置文本输入框 --> Name:<input id="searchInput" type="text"> <!-- 设置button按钮 --> <button id="btn">查询</button> <!-- 利用table标签写表格,thead标签表示表头,tr表示一行,th表示单元格,tbody表示表身 --> <table > <thead> <tr> <th width="100px">名称</th> <th width="100px">类型</th> <th width="100px">面积</th> </tr> </thead> <tbody id="infoBody"></tbody> </table> <!-- script标签用来书写Javascript代码 --> <script> /** *思路: * 1. 创建查询对象FindTask,对查询对象实例化 2. 创建属性查询参数 3.给findTask查询按钮添加一个click事件 (1)获取HTML页文本框所输入的查询名称。 (2)实例化FindParameters参数 (3)调用execute函数,执行查询 4.处理查询结果 (1)将获得的要素定位高亮显示,在回调函数中新建图形符号,设置获得fintask查询得到的geometry。 (2)在table面板中展示信息,利用数组获得查询信息,并在 table中展示信息 */ require(["esri/map", "esri/layers/ArcGISDynamicMapServiceLayer", "esri/tasks/FindTask", "esri/tasks/FindParameters", "esri/symbols/SimpleMarkerSymbol", "esri/symbols/SimpleLineSymbol", "esri/symbols/SimpleFillSymbol", "esri/geometry/Point", "esri/Color", "esri/graphic", ], // function用来表示回调函数,function中的参数要与require中的类一一对应。 function(Map,ArcGISDynamicMapServiceLayer,FindTask,FindParameters,SimpleMarkerSymbol, SimpleLineSymbol,SimpleFillSymbol,Point,Color,Graphic){ //添加动态地图服务图层 var map = new Map("mapDiv"); var layer=new ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/MyMapService/MapServer"); map.addLayer(layer); //创建属性查询对象,对查询对象实例化,FindTask构造函数需要一个ArcGIS Server地图服务的URL var findTask = new FindTask("http://localhost:6080/arcgis/rest/services/MyMapService/MapServer"); //实例化查询参数, var findParams = new FindParameters(); //给属性查询按钮添加一个click事件 document.getElementById("btn").onclick=function funFind(){ var name=document.getElementById("searchInput").value;//获得输入框的值,即当击id="btn"的查询按钮时,获取到id=searchInput输入框的输入值。 map.graphics.clear();//清除上一次的高亮显示,若不写这个代码,选中的图层不会清空 findParams.returnGeometry = true; //注意 returnGeometry被设置为true以便结果能被显示在地图上。 //FindParameters指出哪些图层和字段将被搜索。如果多个图层包含相同的字段名称(例如"NAME")两个字段都要被搜索。 findParams.layerIds = [0,1];//对省级行政区和省级行政区-线查询 findParams.searchFields = ["name"];//匹配图层中的name属性 findParams.searchText = name;//searchText参数是任务将要搜索什么。这个文本来自输入框并且当单击查询,按钮时被发送到execute函数。 //name为击查询按钮时获得的输入框的值 findParams.returnGeometry = true; //注意 returnGeometry被设置为true以便结果能被显示在地图上。 /*进行查询,当任务执行结束,showResults函数循环访问FindResult里的graphics数组, 并增加每个图形到地图。函数也增加每个结果的属性到表格。 */ findTask.execute(findParams,showFindResult) // console.log(findParams); } //处理属性查询返回给我们的数据 function showFindResult(findResult) { //初始化信息暂存数组 nameArr=[];//用于存储查询地名称 shapeArr=[];//用于存储查询shape AREAArr=[];//用于存储查询shape console.log(findResult); if (findResult.length === 0) { alert("查询无结果"); return; } for (var i = 0; i < findResult.length; i++) { nameArr[i]=findResult[i].feature.attributes.name; shapeArr[i]=findResult[i].feature.attributes.Shape; AREAArr[i]=findResult[i].feature.attributes.AREA; //定义高亮图形的符号 var lineSymbol= new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASHDOT,new Color([255, 0, 0]), 1); //定义面的边界线符号 var PolygonSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, lineSymbol,new Color([0, 255, 0, 1])); //定义面符号 //获得图形graphic var graphic=findResult[i].feature; //赋予相应符号 graphic.setSymbol(PolygonSymbol); //将graphic添加到地图中,从而实现高亮效果 map.graphics.add(graphic); } //通过循环写入表格主体数据,tr标签为行,td标签为单元格。 var html=""; for(var i=0;i<nameArr.length;i++){ html+="<tr>" + " <td >"+nameArr[i]+"</td>" + "<td >"+shapeArr[i]+"</td>" + "<td >"+AREAArr[i]+"</td>" + "</tr>"; } //将属性绑定在infoBody的表格上,即修改表格主体的内容。 document.getElementById("infoBody").innerHTML =html; } } ) </script> </body> </html>
06-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值