我希望每個用戶都能夠繪製自己的區域,並且他們下次登錄時可以自動加載該區域。如何使用ArcGIS JavaScript API和ArcGIS Server實現此功能?如何使用ArcGIS JavaScript API在地圖上繪製自定義圖形?
1
A
回答
1
那麼,很顯然,要在地圖上繪製一些功能,並存儲該somwhere所以當使用訪問,他/她可以在地圖上看到最後繪製的功能,下一次。
首先,您需要在arcgis服務器中發佈可編輯的要素圖層,以便保存所有的功能。
下面是公司招聘
var map;
require([
"esri/map",
"esri/toolbars/draw",
"esri/toolbars/edit",
"esri/graphic",
"esri/config",
"esri/layers/FeatureLayer",
"esri/symbols/SimpleMarkerSymbol",
"esri/symbols/SimpleLineSymbol",
"esri/symbols/SimpleFillSymbol",
"esri/dijit/editing/TemplatePicker",
"dojo/_base/array",
"dojo/_base/event",
"dojo/_base/lang",
"dojo/parser",
"dijit/registry",
"dijit/layout/BorderContainer", "dijit/layout/ContentPane",
"dijit/form/Button", "dojo/domReady!"
], function(
Map, Draw, Edit, Graphic, esriConfig,
FeatureLayer,
SimpleMarkerSymbol, SimpleLineSymbol, SimpleFillSymbol,
TemplatePicker,
arrayUtils, event, lang, parser, registry
) {
parser.parse();
// refer to "Using the Proxy Page" for more information: https://developers.arcgis.com/javascript/3/jshelp/ags_proxy.html
esriConfig.defaults.io.proxyUrl = "/proxy/";
// This service is for development and testing purposes only. We recommend that you create your own geometry service for use within your applications.
esriConfig.defaults.geometryService = new esri.tasks.GeometryService("https://utility.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
map = new Map("map", {
basemap: "streets",
center: [-83.244, 42.581],
zoom: 15
});
map.on("layers-add-result", initEditing);
var landusePointLayer = new FeatureLayer("https://sampleserver6.arcgisonline.com/arcgis/rest/services/Military/FeatureServer/6", {
mode: FeatureLayer.MODE_SNAPSHOT,
outFields: ["*"]
});
var landuseLineLayer = new FeatureLayer("https://sampleserver6.arcgisonline.com/arcgis/rest/services/Military/FeatureServer/8", {
mode: FeatureLayer.MODE_SNAPSHOT,
outFields: ["*"]
});
var landusePolygonLayer = new FeatureLayer("https://sampleserver6.arcgisonline.com/arcgis/rest/services/Military/FeatureServer/9", {
mode: FeatureLayer.MODE_SNAPSHOT,
outFields: ["*"]
});
map.addLayers([landusePointLayer, landuseLineLayer, landusePolygonLayer]);
function initEditing(evt) {
console.log("initEditing", evt);
// var map = this;
var currentLayer = null;
var layers = arrayUtils.map(evt.layers, function(result) {
return result.layer;
});
console.log("layers", layers);
var editToolbar = new Edit(map);
editToolbar.on("deactivate", function(evt) {
currentLayer.applyEdits(null, [evt.graphic], null);
});
arrayUtils.forEach(layers, function(layer) {
var editingEnabled = false;
layer.on("dbl-click", function(evt) {
event.stop(evt);
if (editingEnabled === false) {
editingEnabled = true;
editToolbar.activate(Edit.EDIT_VERTICES , evt.graphic);
} else {
currentLayer = this;
editToolbar.deactivate();
editingEnabled = false;
}
});
layer.on("click", function(evt) {
event.stop(evt);
if (evt.ctrlKey === true || evt.metaKey === true) { //delete feature if ctrl key is depressed
layer.applyEdits(null,null,[evt.graphic]);
currentLayer = this;
editToolbar.deactivate();
editingEnabled=false;
}
});
});
var templatePicker = new TemplatePicker({
featureLayers: layers,
rows: "auto",
columns: 2,
grouping: true,
style: "height: auto; overflow: auto;"
}, "templatePickerDiv");
templatePicker.startup();
var drawToolbar = new Draw(map);
var selectedTemplate;
templatePicker.on("selection-change", function() {
if(templatePicker.getSelected()) {
selectedTemplate = templatePicker.getSelected();
}
switch (selectedTemplate.featureLayer.geometryType) {
case "esriGeometryPoint":
drawToolbar.activate(Draw.POINT);
break;
case "esriGeometryPolyline":
drawToolbar.activate(Draw.POLYLINE);
break;
case "esriGeometryPolygon":
drawToolbar.activate(Draw.POLYGON);
break;
}
});
drawToolbar.on("draw-end", function(evt) {
drawToolbar.deactivate();
editToolbar.deactivate();
var newAttributes = lang.mixin({}, selectedTemplate.template.prototype.attributes);
var newGraphic = new Graphic(evt.geometry, null, newAttributes);
selectedTemplate.featureLayer.applyEdits([newGraphic], null, null);
});
}
});
html, body {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
overflow:hidden;
}
#header {
border:solid 2px #462d44;
background:#fff;
color:#444;
-moz-border-radius: 4px;
border-radius: 4px;
font-family: sans-serif;
font-size: 1.1em
padding-left:20px;
}
#map {
padding:1px;
border:solid 2px #444;
-moz-border-radius: 4px;
border-radius: 4px;
}
#rightPane {
border:none;
padding: 0;
width:228px;
}
.templatePicker {
border: solid 2px #444;
}
<link rel="stylesheet" href="https://js.arcgis.com/3.20/dijit/themes/claro/claro.css">
<link rel="stylesheet" href="https://js.arcgis.com/3.20/esri/css/esri.css">
<script src="https://js.arcgis.com/3.20/"></script>
<body class="claro">
<div data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="gutters:true, design:'headline'" style="width:100%;height:100%;">
<div data-dojo-type="dijit/layout/ContentPane" id="header" data-dojo-props="region:'top'">Use ctrl or cmd + click on graphic to delete. Double click on graphic to edit vertices. </div>
<div id="map" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'center'"></div>
<div id="rightPane" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'right'">
<div id="templatePickerDiv"></div>
</div>
</div>
</body>
更新啓動消費這個樣品之前代理的工作樣本。
實時運行的樣本 -https://developers.arcgis.com/javascript/3/sandbox/sandbox.html?sample=ed_feature_creation
希望這將幫助你:)
相關問題
- 1. 使用MongoDB繪製自定義地圖
- 2. 在iOS中繪製自定義圖形
- 3. 如何使用谷歌地圖API在谷歌地圖上繪製矩形
- 4. 谷歌地圖自定義繪圖Android API v2(弧形折線)
- 5. 如何在Apple Watch上繪製自定義圖形?
- 6. 在世界地圖上繪製圖形
- 7. 如何在視圖上繪製自定義視圖(例如圓形)?
- 8. 在iOS中繪製自定義條形圖圖(PowerPlot vs Core圖)
- 9. 如何在沒有OSMDroid API的情況下繪製自定義地圖圖塊?
- 10. 使用java圖形API繪製圖層
- 11. 使用ArcGIS API for JavaScript在地圖上顯示KMZ圖層的單個圖層
- 12. 自定義圖形控件[Google地圖v3繪圖庫]
- 13. 如何在谷歌地圖中繪製自定義航點v3
- 14. ArcGIS Javascript API - 如何使用jQuery獲取地圖URL ajax
- 15. 繪製定義一些固定節點的網絡圖,以在地圖上繪製圖形
- 16. 在iPhone上繪製自定義圖形:CALayer與CGContext
- 17. 如何在旋轉的自定義圖像地圖上繪製GPS標記
- 18. 如何使用Google map api在Google地圖上繪製路線?
- 19. 使用ArcGIS服務器緩存Google地圖API中的繪製圖表
- 20. GeoTools:在地圖上繪製多邊形
- 21. javascript在圖像上繪製矩形
- 22. 在Google地圖上繪製矩形
- 23. 如何使用ArcGIS JavaScript API直接繪製點和文本
- 24. 在arcgis java script api中添加圖形圖層地圖
- 25. osmdroid在地圖上繪製多邊形
- 26. 使用ggplot2在地圖上繪製條形圖?
- 27. 如何自定義限制ArcGIS底圖的範圍?
- 28. Android如何繪製自定義視圖
- 29. 在地圖上繪製矩形
- 30. 如何在Google地圖中繪製自定義路線?
看起來你要我們寫一些代碼給你。儘管許多用戶願意爲遇險的編碼人員編寫代碼,但他們通常只在海報已嘗試自行解決問題時才提供幫助。證明這一努力的一個好方法是包含迄今爲止編寫的代碼,示例輸入(如果有的話),期望的輸出以及實際獲得的輸出(控制檯輸出,回溯等)。您提供的細節越多,您可能會收到的答案就越多。檢查[常見問題]和[問] –
我的意思是我不知道解決的方向。我只是想,如果一些人做同樣的事情可以給我一些建議。像書籍或其他東西 – merin