<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
<title>Pinpoint Example</title>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link rel="stylesheet" href="https://js.arcgis.com/4.21/esri/css/main.css">
<script src="https://js.arcgis.com/4.21/"></script>
<script>
require([
"esri/Map",
"esri/views/MapView",
"esri/layers/FeatureLayer",
"esri/popup/content/CustomContent"
], function (Map, MapView, FeatureLayer, CustomContent) {
const data = [
{
lat: 32.727482,
lon: -117.1560632,
name: "Automotive Museum",
addrs: "2080 Pan American Plaza, San Diego, CA 92101, United States",
url: "http://sdautomuseum.org/"
},
{
lat: 32.7136902,
lon: -117.1763293,
name: "USS Midway Museum",
addrs: "910 N Harbor Dr, San Diego, CA 92101, United States",
url: "http://www.midway.org/"
},
{
lat: 32.7641112,
lon: -117.2284536,
name: "SeaWorld",
addrs: "500 Sea World Dr, San Diego, CA 92109, United States",
url: "https://seaworld.com/san-diego"
},
{
lat: 32.7360032,
lon: -117.1557741,
name: "Zoo",
addrs: "2920 Zoo Dr, San Diego, CA 92101, United States",
url: "https://zoo.sandiegozoo.org/"
}
];
const map = new Map({
basemap: "streets-navigation-vector"
});
const view = new MapView({
container: "viewDiv",
map: map,
zoom: 12,
center: {
latitude: 32.7353,
longitude: -117.1490
}
});
const layer = new FeatureLayer({
source: data.map((d, i) => (
{
geometry: {
type: "point",
longitude: d.lon,
latitude: d.lat
},
attributes: {
ObjectID: i,
...d
}
}
)),
fields: [
{
name: "ObjectID",
alias: "ObjectID",
type: "oid"
},
{
name: "name",
alias: "Name",
type: "string"
},
{
name: "addrs",
alias: "addrs",
type: "string"
},
{
name: "url",
alias: "url",
type: "string"
},
{
name: "lat",
alias: "Latitude",
type: "double"
},
{
name: "lon",
alias: "Longitude",
type: "double"
},
],
objectIDField: ["ObjectID"],
geometryType: "point",
renderer: {
type: "simple",
symbol: {
type: "text",
color: "red",
text: "\ue61d",
font: {
size: 30,
family: "CalciteWebCoreIcons"
}
}
},
popupTemplate: {
title: "{name}",
content: [
{
type: "fields",
fieldInfos: [
{
fieldName: "addrs",
label: "Address"
},
{
fieldName: "lat",
label: "Latitude",
format: {
places: 2
}
},
{
fieldName: "lon",
label: "Longitude",
format: {
places: 2
}
}
]
},
new CustomContent({
outFields: ["*"],
creator: (event) => {
const a = document.createElement("a");
a.href = event.graphic.attributes.url;
a.target = "_blank";
a.innerText = event.graphic.attributes.url;
return a;
}
})
],
outFields: ["*"]
}
});
map.add(layer);
});
</script>
</head>
<body>
<div id="viewDiv"></div>
</body>
</html>