Я думаю, что ваша проблема может быть при звонке applyEdits
. Эти функции принимают в качестве параметра объект с функциями и приложениями для добавления, обновления или удаления. Так что в вашем примере это должно быть,
app.featureLayer.applyEdits({addFeatures: graphics});
ArcGIS API - FeatureLayer applyEdits
В любом случае, основываясь на одном из примеров, я сделал этот код. Это может помочь вам
1010 *
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="initial-scale=1,maximum-scale=1,user-scalable=no"
/>
<title>FeatureLayer Points Icons - 4.15</title>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link
rel="stylesheet"
href="https://js.arcgis.com/4.15/esri/themes/light/main.css"
/>
<script src="https://js.arcgis.com/4.15/"></script>
<script>
require([
"esri/Map",
"esri/views/MapView",
"esri/layers/FeatureLayer",
"esri/core/promiseUtils",
"esri/Graphic",
"esri/geometry/Point",
], function(
Map,
MapView,
FeatureLayer,
promiseUtils,
Graphic,
Point
) {
function getRandomNumber(min, ref) {
return Math.random() * ref + min;
}
function getGraphics() {
const graphics = [];
let location = null;
// generate 6 random points features
for (let i = 0; i <= 5; i++) {
location = new Point({
latitude: getRandomNumber(10, 50),
longitude: -getRandomNumber(50, 50)
});
graphics.push(
new Graphic({
geometry: location,
attributes: {
OBJECTID: i,
name: `F${i}`
}
})
);
}
return graphics;
}
const graphics = getGraphics();
function popupTemplateContent(feature) {
const location = feature.graphic.geometry;
return `lat:${location.latitude.toFixed(2)} lon:${location.longitude.toFixed(2)}`;
}
const view = new MapView({
map: new Map({
basemap: "gray-vector"
}),
container: "viewDiv",
zoom: 2,
center: [-75, 35]
});
view
.when()
.then(createLayer)
.then(addToView)
.catch(function(e) {
console.error("Creating FeatureLayer failed", e);
});
function createLayer() {
return new FeatureLayer({
source: graphics,
objectIdField: "OBJECTID",
fields: [
{
name: "OBJECTID",
type: "oid"
},
{
name: "name",
type: "string"
}
],
popupTemplate: {
title: '{name}',
content: popupTemplateContent
},
renderer: {
type: "unique-value",
field: "OBJECTID",
defaultSymbol: { type: "simple-fill" },
uniqueValueInfos: [{
value: "0",
symbol: {
type: "picture-marker",
url: " http://static.arcgis.com/images/Symbols/Cartographic/esriCartographyMarker_98.png",
width: "32px",
height: "32px"
}
}, {
value: "1",
symbol: {
type: "picture-marker",
url: " http://static.arcgis.com/images/Symbols/Cartographic/esriCartographyMarker_98_Red.png",
width: "32px",
height: "32px"
}
}, {
value: "2",
symbol: {
type: "picture-marker",
url: " http://static.arcgis.com/images/Symbols/Cartographic/esriCartographyMarker_98_Green.png",
width: "32px",
height: "32px"
}
}, {
value: "3",
symbol: {
type: "picture-marker",
url: " http://static.arcgis.com/images/Symbols/Cartographic/esriCartographyMarker_98_Blue.png",
width: "32px",
height: "32px"
}
}, {
value: "4",
symbol: {
type: "picture-marker",
url: " http://static.arcgis.com/images/Symbols/Cartographic/esriCartographyMarker_98_White.png",
width: "32px",
height: "32px"
}
}, {
value: "5",
symbol: {
type: "picture-marker",
url: " http://static.arcgis.com/images/Symbols/Cartographic/esriCartographyMarker_98_Yellow.png",
width: "32px",
height: "32px"
}
}]
}
});
}
function addToView(layer) {
view.map.add(layer);
}
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>
Наконец, в моем комментарии я на мгновение растерялся, поэтому я спрашиваю вас об использовании FeatureLayer
вместо GraphicLayer
. Мой плохой :) .. Это рекомендуемый способ с новым API.