ArcGisforJavascript 4.11基础功能实现

    xiaoxiao2022-07-04  158

    新手照的官方示例和API,实现了简单的查询和各种ArcGisforJavascript自带控件的放置

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no"> <title>种粮大户</title> <!-- 线上地址 <link rel="stylesheet" href="https://js.arcgis.com/4.11/esri/themes/light/main.css"/> <script src="https://js.arcgis.com/4.11/"></script> --> <!-- 本地js --> <link rel="stylesheet" href="http://localhost/arcgis_js_v411_sdk/arcgis_js_api/library/4.11/esri/css/main.css"/> <script src="http://localhost/arcgis_js_v411_sdk/arcgis_js_api/library/4.11/init.js"></script> <style> html, body, #viewDiv { padding: 0; margin: 0; height: 100%; width: 100%; } #optionsDiv { background-color: dimgray; color: white; padding: 10px; width: 350px; } .esri-popup .esri-popup-header .esri-title { font-size: 18px; font-weight: bolder; } .esri-popup .esri-popup-body .esri-popup-content { font-size: 14px; } .esri-basemap-toggle{ margin-right: -40px } .esri-compass{ margin-right: -80px; margin-bottom: 80px; } .esri-zoom{ margin-bottom: 125px; } #topbar { background: #fff; 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; } .esri-ui-top-left{ top:20px; left:30px; } </style> <script> require(["esri/Map", 'esri/views/MapView', 'esri/layers/WebTileLayer', 'esri/layers/support/TileInfo', 'esri/layers/FeatureLayer', "esri/widgets/Expand", "esri/widgets/BasemapToggle", "esri/geometry/SpatialReference", "esri/widgets/Search", "esri/widgets/Sketch", "esri/layers/GraphicsLayer", "esri/widgets/Compass", "esri/widgets/DistanceMeasurement2D", "esri/widgets/AreaMeasurement2D", "esri/tasks/QueryTask", "esri/tasks/support/Query", 'dojo/domReady!'], function(Map, MapView, WebTileLayer, TileInfo,FeatureLayer,Expand ,BasemapToggle,SpatialReference,Search,Sketch,GraphicsLayer,Compass,DistanceMeasurement2D ,AreaMeasurement2D,QueryTask,Query) { /* code goes here */ var tileInfo = new TileInfo({ dpi: 90.71428571427429, rows : 850, cols : 172, maxAllowableOffset:0, compressionQuality : 6, origin : { x : -180, y : 90 }, spatialReference : { wkid : 4326 }, lods : [ {level : 2,levelValue: 2, resolution : 0.3515625, scale : 147748796.52937502}, {level : 3,levelValue: 3, resolution : 0.17578125, scale : 73874398.264687508}, {level : 4,levelValue: 4,resolution : 0.087890625, scale : 36937199.132343754}, {level : 5,levelValue: 5, resolution : 0.0439453125, scale : 18468599.566171877}, {level : 6,levelValue: 6, resolution : 0.02197265625, scale : 9234299.7830859385}, {level : 7,levelValue: 7, resolution : 0.010986328125, scale : 4617149.8915429693}, {level : 8,levelValue: 8, resolution : 0.0054931640625, scale : 2308574.9457714846}, {level : 9,levelValue: 9, resolution : 0.00274658203125, scale : 1154287.4728857423}, {level : 10,levelValue: 10, resolution : 0.001373291015625, scale : 577143.73644287116}, {level : 11,levelValue: 11, resolution : 0.0006866455078125, scale : 288571.86822143558}, {level : 12,levelValue: 12, resolution : 0.00034332275390625, scale : 144285.93411071779}, {level : 13,levelValue: 13, resolution : 0.000171661376953125, scale : 72142.967055358895}, {level : 14,levelValue: 14, resolution : 8.58306884765625e-005, scale : 36071.483527679447}, {level : 15,levelValue: 15, resolution : 4.291534423828125e-005, scale : 18035.741763839724}, {level : 16,levelValue: 16, resolution : 2.1457672119140625e-005, scale : 9017.8708819198619}, {level : 17,levelValue: 17, resolution : 1.0728836059570313e-005, scale : 4508.9354409599309}, {level : 18,levelValue: 18, resolution : 5.3644180297851563e-006, scale : 2254.4677204799655}, { level: 19,levelValue: 19, resolution: 2.68220901489257815e-006, scale: 1127.23386023998275 }, { level: 20,levelValue: 20, resolution: 1.341104507446289075e-006, scale: 563.616930119991375 } ] }) // 天地图开发者key var tk = "53e7ce68eef9b582752cada22e254cc9"; // 基础地图 var layer = WebTileLayer('http://{subDomain}.tianditu.com/DataServer?T=vec_c&x={col}&y={row}&l={level}&tk='+tk,{ // subDomains: ['t0','t1','t2','t3','t4','t5','t6','t7'], subDomains: ['t0'], tileInfo: tileInfo }) var layer_anno = WebTileLayer('http://{subDomain}.tianditu.com/DataServer?T=cva_c&x={col}&y={row}&l={level}&tk='+tk,{ //subDomains: ['t0','t1','t2','t3','t4','t5','t6','t7'], subDomains: ['t0'], tileInfo: tileInfo }) // 影像图 var layerw = WebTileLayer('http://{subDomain}.tianditu.com/DataServer?T=img_c&x={col}&y={row}&l={level}&tk='+tk,{ // subDomains: ['t0','t1','t2','t3','t4','t5','t6','t7'], subDomains: ['t0'], tileInfo: tileInfo }) var layerw_anno = WebTileLayer('http://{subDomain}.tianditu.com/DataServer?T=cia_c&x={col}&y={row}&l={level}&tk='+tk,{ //subDomains: ['t0','t1','t2','t3','t4','t5','t6','t7'], subDomains: ['t0'], tileInfo: tileInfo }) const hlayer = new GraphicsLayer(); var resultsLayer = new GraphicsLayer(); // 创建地图,不设置底图,如果设置底图会造成坐标系无法被转换成 ESPG:4326 (WGS1984) var map = new Map({ logo:false, spatialReference : { wkid : 4326 }, basemap: { thumbnailUrl: "img/ditu.png", title: "基础地形", baseLayers: [layer, layer_anno] }, layers: [hlayer,resultsLayer] }); // 创建MapView var view = new MapView({ container: "viewDiv", spatialReference : { wkid : 4326 }, map: map, center: [120.243,30.256], //1:scale的图 level scale: 288571.86822143558 , popup: { dockEnabled: true, dockOptions: { position: "top-right", breakpoint: false } } }); view.ui.move("zoom", "bottom-right"); // 影像和基础地图切换 var toggle = new BasemapToggle({ view: view, nextBasemap:{ thumbnailUrl: "img/wditu.png", title: "影像地形", baseLayers: [layerw, layerw_anno] }, layers: [hlayer] }); view.ui.add(toggle, "bottom-right"); // 绘制图形控件 const sketch = new Sketch({ layer: hlayer, view: view }); view.ui.add(sketch, "top-right"); //数据属性模版 var popupTemplate = { title: " {DKID},{ZhenName} ,{CunName}", overwriteActions: true, content: [{ type: "fields", fieldInfos: [{ fieldName: "DKID", label: "地块名称", format: { places: 0, digitSeparator: true } }, { fieldName: "ZhenName", label: "镇名", format: { places: 0, digitSeparator: true } }, { fieldName: "CunName", label: "村名", format: { places: 0, digitSeparator: true } }, { fieldName: "name", label: "所属人", format: { places: 0, digitSeparator: true } },{ fieldName: "DKMJ", label: "地块面积", format: { places: 6, digitSeparator: true } },{ fieldName: "CBMJ", label: "承包面积", format: { // 小数位数 places: 6, digitSeparator: true } }] }] }; //地块 图层 var featureLayer = new FeatureLayer({ url: "http://localhost:6080/arcgis/rest/services/MapService/FeatureServer/0", outFields: ["*"], popupTemplate: popupTemplate }); map.add(featureLayer); var compassWidget = new Compass({ view: view }); // Add the Compass widget to the top left corner of the view view.ui.add(compassWidget, "bottom-right"); var activeWidget = null; // add the toolbar for the measurement widgets view.ui.add("topbar", "bottom-left"); document .getElementById("distanceButton") .addEventListener("click", function() { setActiveWidget(null); if (!this.classList.contains("active")) { setActiveWidget("distance"); } else { setActiveButton(null); } }); document .getElementById("areaButton") .addEventListener("click", function() { setActiveWidget(null); if (!this.classList.contains("active")) { setActiveWidget("area"); } else { setActiveButton(null); } }); // 测量 function setActiveWidget(type) { switch (type) { case "distance": activeWidget = new DistanceMeasurement2D({ view: view }); // skip the initial 'new measurement' button activeWidget.viewModel.newMeasurement(); view.ui.add(activeWidget, "top-right"); setActiveButton(document.getElementById("distanceButton")); break; case "area": activeWidget = new AreaMeasurement2D({ view: view }); // skip the initial 'new measurement' button activeWidget.viewModel.newMeasurement(); view.ui.add(activeWidget, "top-right"); setActiveButton(document.getElementById("areaButton")); break; case null: if (activeWidget) { view.ui.remove(activeWidget); activeWidget.destroy(); activeWidget = null; } break; } } function setActiveButton(selectedButton) { view.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"); } } // 监听搜索按钮 document .getElementById("searchdiv") .addEventListener("click", function searchAll(){ // 将地块图层隐藏 featureLayer.visible = false; // 清除上次查询 resultsLayer.removeAll(); var searchUrl = "http://localhost:6080/arcgis/rest/services/MapService/FeatureServer/0"; var txt = document.getElementById("searchtext").value; var queryTask = new QueryTask({ url:searchUrl }); // 查询条件 var query = new Query(); query.returnGeometry=true; query.outFields=["*"]; query.outSpatialReference = { wkid : 4326 }; if(txt!=null&&txt!=''&&txt!=""){ query.where =" CunName Like '%"+txt+"%' or ZhenName Like '%"+txt+"%' "; }else{ query.where =" 1=1 "; } // 执行query语句,完成后执行then中的方法 queryTask.execute(query) .then(getResults); }); // 监听清除按钮,如果不清除会导致一直显示 document .getElementById("qcdiv") .addEventListener("click", function qcAll(){ // 清空搜索框中的值 document.getElementById("searchtext").value=""; // 显示地块图层 featureLayer.visible = true; // 清除搜索图层 resultsLayer.removeAll(); }); // 展示数据方法 function getResults(response) { var peakResults = response.features.map(function(feature) { // 地块的样式 feature.symbol = { type: "simple-fill", // 填充颜色 color: [51, 204, 51, 0.3], style: "solid", // 边框线 outline: { color: [1, 4, 1, 0.3], width: 1 } }; // 数据展示格式 feature.popupTemplate = popupTemplate; return feature; }); resultsLayer.addMany(peakResults); // 将结果添加到地图后动画化 view.goTo(peakResults).then(function() { view.popup.open({ features: peakResults, featureMenuOpen: true, updateLocationEnabled: true }); }); } }); </script> </head> <body> <div id="viewDiv"> </div> <div id="topbar"> <button class="action-button esri-icon-minus" id="distanceButton" type="button" title="测量两个点或多个点的距离" ></button> <button class="action-button esri-icon-polygon" id="areaButton" type="button" title="测量面积" ></button> </div> <div class="esri-ui-top-left esri-ui-corner"> <div class="esri-component esri-search esri-widget" style="width: 400px;"> <div class="esri-search--multiple-sources esri-search__container"> <div class="esri-search__input-container"> <form class="esri-search__form" > <input type="text" placeholder="示例:镇名或村名" tabindex="0" class="esri-input esri-search__input" title="查询" id="searchtext" value=""> </form> </div> <div role="button" title="清除" class="esri-search__submit-button esri-widget--button" tabindex="0" id="qcdiv" > <span class=""><img src="img/qc.png"></span> </div> <div role="button" title="搜索" class="esri-search__submit-button esri-widget--button" tabindex="0" id="searchdiv" > <span class="esri-icon-search"></span> <span class="esri-icon-font-fallback-text">搜索</span> </div> </div> </div> </div> </body> </html>

    上面的地址改成自己的服务地址,我自己也踩过坑,如果有问题,可以问我

    最新回复(0)