用于JavaScript的ArcGIS API是在web应用程序中嵌入地图和任务的轻量级方法。您可以从ArcGIS Online、您自己的ArcGIS Server或其他服务器获取这些地图。
描述
此示例演示如何创建一个完整的页面映射应用程序。此示例创建一个以旧金山市为中心的新地图,并将其中一个预定义的基本地图添加到地图中。
DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
<title>Simple Maptitle>
<link rel="stylesheet" href="https://js.arcgis.com/3.44/esri/css/esri.css">
<style>
html, body, #map {
height: 100%;
margin: 0;
padding: 0;
}
style>
<script src="https://js.arcgis.com/3.44/">script>
<script>
var map;
require(["esri/map", "dojo/domReady!"], function(Map) {
map = new Map("map", {
basemap: "topo-vector", //For full list of pre-defined basemaps, navigate to http://arcg.is/1JVo6Wd
center: [-122.45, 37.75], // longitude, latitude
zoom: 13
});
});
script>
head>
<body>
<div id="map">div>
body>
html>
描述
使用BasemapGallery小部件可以选择地图的基础地图。这个小部件提供了一个基本地图库,这些地图可以由用户定义,也可以由ArcGIS.com的查询生成。
您可以向库中添加其他基础地图,但是添加到基础地图库中的所有基础地图必须位于同一投影中。如果您正在通过设置从ArcGIS.com显示棒球地图
showArcGISBasemaps = true
那么附加的基本地图必须在Web-Mercator投影中
DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
<title>Basemap gallerytitle>
<link rel="stylesheet" href="https://js.arcgis.com/3.44/dijit/themes/claro/claro.css">
<link rel="stylesheet" href="https://js.arcgis.com/3.44/esri/css/esri.css">
<style>
html, body { height: 100%; width: 100%; margin: 0; padding: 0; }
#map{
padding:0;
}
style>
<script src="https://js.arcgis.com/3.44/">script>
<script>
var map;
require([
"esri/map", "esri/dijit/BasemapGallery", "esri/arcgis/utils",
"dojo/parser",
"dijit/layout/BorderContainer", "dijit/layout/ContentPane", "dijit/TitlePane",
"dojo/domReady!"
], function(
Map, BasemapGallery, arcgisUtils,
parser
) {
parser.parse();
map = new Map("map", {
basemap: "topo-vector",
center: [-105.255, 40.022],
zoom: 13
});
//add the basemap gallery, in this case we'll display maps from ArcGIS.com including bing maps
var basemapGallery = new BasemapGallery({
showArcGISBasemaps: true,
map: map
}, "basemapGallery");
basemapGallery.startup();
basemapGallery.on("error", function(msg) {
console.log("basemap gallery error: ", msg);
});
});
script>
head>
<body class="claro">
<div data-dojo-type="dijit/layout/BorderContainer"
data-dojo-props="design:'headline', gutters:false"
style="width:100%;height:100%;margin:0;">
<div id="map"
data-dojo-type="dijit/layout/ContentPane"
data-dojo-props="region:'center'"
style="padding:0;">
<div style="position:absolute; right:20px; top:10px; z-Index:999;">
<div data-dojo-type="dijit/TitlePane"
data-dojo-props="title:'Switch Basemap', open:true">
<div data-dojo-type="dijit/layout/ContentPane" style="width:380px; height:280px; overflow:auto;">
<div id="basemapGallery">div>
div>
div>
div>
div>
div>
body>
html>
描述
书签小部件可以配置为允许用户创建、更新和删除书签。
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>Bookmark Widget (Editable)title>
<link rel="stylesheet" href="https://js.arcgis.com/3.44/esri/themes/calcite/dijit/calcite.css">
<link rel="stylesheet" href="https://js.arcgis.com/3.44/esri/themes/calcite/esri/esri.css">
<style>
html, body, #map {
height: 100%;
margin: 0;
padding: 0;
}
.bookmark-container {
position: absolute;
top: 100px;
left: 15px;
padding: 1rem;
background: #ffffff;
border-radius: 4px;
border: 1px solid #eeeeee;
}
style>
<script src="https://js.arcgis.com/3.44/">script>
<script>
require([
"esri/map",
"esri/dijit/Bookmarks",
"dojo/domReady!"
],
function (Map, Bookmarks){
var map = new Map("map", {
basemap: "topo-vector",
center: [-100, 40],
zoom: 4
});
// Create the bookmark widget
// specify "editable" as true to enable editing
var bookmarks = new Bookmarks({
map: map,
bookmarks: [],
editable: true
}, "bookmarks");
// Bookmark data objects
var bookmarkJSON = {
first: {
"extent": {
"xmin": -12975100,
"ymin": 3993900,
"xmax": -12964100,
"ymax": 4019500,
"spatialReference": {
"wkid": 102100,
"latestWkid": 3857
}
},
"name": "Palm Springs, CA"
},
second: {
"extent": {
"xmin": -13052100,
"ymin": 4024900,
"xmax": -13041100,
"ymax": 4050500,
"spatialReference": {
"wkid": 102100,
"latestWkid": 3857
}
},
"name": "Redlands, California"
},
third: {
"extent": {
"xmin": -13048800,
"ymin": 3844800,
"xmax": -13037800,
"ymax": 3870400,
"spatialReference": {
"wkid": 102100,
"latestWkid": 3857
}
},
"name": "San Diego, CA"
},
};
// Add bookmarks to the widget
Object.keys(bookmarkJSON).forEach(function (bookmark){
bookmarks.addBookmark(bookmarkJSON[bookmark]);
});
});
script>
head>
<body class="calcite">
<div id="map">div>
<div class="bookmark-container">
<div id="bookmarks">div>
div>
body>
html>
描述
使用HomeButton小部件快速返回到地图的默认起始范围。创建小部件时,开发人员指定一个将用作“主扩展区”的扩展区。当用户在地图上平移和缩放时,他们可以单击主页按钮返回到指定的起始范围。
DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>Home Extenttitle>
<link rel="stylesheet" href="https://js.arcgis.com/3.44/esri/css/esri.css">
<style>
html, body, #map {
padding:0;
margin:0;
height:100%;
}
#HomeButton {
position: absolute;
top: 95px;
left: 20px;
z-index: 50;
}
style>
<script src="https://js.arcgis.com/3.44/">script>
<script>
require([
"esri/map",
"esri/dijit/HomeButton",
"dojo/domReady!"
], function(
Map, HomeButton
) {
var map = new Map("map", {
center: [-56.049, 38.485],
zoom: 3,
basemap: "streets-vector"
});
var home = new HomeButton({
map: map
}, "HomeButton");
home.startup();
});
script>
head>
<body>
<div id="map" class="map">
<div id="HomeButton">div>
div>
body>
html>
描述
此示例演示如何创建用于切换可见性的简单LayerList。在这个特定的示例中,小部件包含在一个侧面板中。该小部件使用ArcGIS Onlineweb地图中的图层。
DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>Layer List Dijittitle>
<link rel="stylesheet" href="https://js.arcgis.com/3.44/dijit/themes/claro/claro.css">
<link rel="stylesheet" href="https://js.arcgis.com/3.44/esri/css/esri.css">
<style>
html, body, .container, #map {
height:100%;
width:100%;
margin:0;
padding:0;
margin:0;
font-family: "Open Sans";
}
#map {
padding:0;
}
#layerListPane{
width:25%;
}
.esriLayer{
background-color: #fff;
}
.esriLayerList .esriList{
border-top:none;
}
.esriLayerList .esriTitle {
background-color: #fff;
border-bottom:none;
}
.esriLayerList .esriList ul{
background-color: #fff;
}
style>
<script>var dojoConfig = { parseOnLoad: true };script>
<script src="https://js.arcgis.com/3.44/">script>
<script>
require([
"esri/arcgis/utils",
"esri/dijit/LayerList",
"dijit/layout/BorderContainer",
"dijit/layout/ContentPane",
"dojo/domReady!"
], function(
arcgisUtils,
LayerList
) {
//Create a map based on an ArcGIS Online web map id
arcgisUtils.createMap("f1027161650b4741a2482df6e975908c", "map").then(function(response){
var myWidget = new LayerList({
map: response.map,
layers: arcgisUtils.getLayerList(response)
},"layerList");
myWidget.startup();
});
});
script>
head>
<body class="claro">
<div class="container" data-dojo-type="dijit/layout/BorderContainer"
data-dojo-props="design:'headline',gutters:false">
<div id="layerListPane" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'right'">
<div id="layerList">div>
div>
<div id="map" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'center'">div>
div>
body>
html>
描述
此示例显示如何将Measurement小部件添加到应用程序中。2.3版新增的Measurement小部件提供了用于确定x、y位置以及测量区域和距离的工具。此示例显示如何创建新的Measurement小部件并将其与地图关联。
(可选)您可以定义自定义线和点符号,测量小部件在地图上绘制时将使用该符号。启用捕捉后,测量工具将执行此操作并捕捉到地图中的要素。
DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>Measure Tooltitle>
<link rel="stylesheet" href="https://js.arcgis.com/3.44/esri/themes/calcite/dijit/calcite.css">
<link rel="stylesheet" href="https://js.arcgis.com/3.44/esri/themes/calcite/esri/esri.css">
<style>
html,body {
height:100%;
width:100%;
margin:0;
}
body {
background-color:#FFF;
overflow:hidden;
font-family:"Trebuchet MS";
}
#map {
border:solid 2px #808775;
border-radius:4px;
margin:5px;
padding:0px;
}
#titlePane{
width:280px;
}
style>
<script src="https://js.arcgis.com/3.44/">script>
<script>
var map;
require([
"dojo/dom",
"esri/Color",
"dojo/keys",
"dojo/parser",
"esri/config",
"esri/sniff",
"esri/map",
"esri/SnappingManager",
"esri/dijit/Measurement",
"esri/layers/FeatureLayer",
"esri/renderers/SimpleRenderer",
"esri/tasks/GeometryService",
"esri/symbols/SimpleLineSymbol",
"esri/symbols/SimpleFillSymbol",
"esri/dijit/Scalebar",
"dijit/layout/BorderContainer",
"dijit/layout/ContentPane",
"dijit/TitlePane",
"dijit/form/CheckBox",
"dojo/domReady!"
], function(
dom, Color, keys, parser,
esriConfig, has, Map, SnappingManager, Measurement, FeatureLayer, SimpleRenderer, GeometryService, SimpleLineSymbol, SimpleFillSymbol
) {
parser.parse();
//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 GeometryService("https://utility.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
map = new Map("map", {
basemap: "satellite",
center: [-117.447, 33.902],
zoom: 18
});
var sfs = new SimpleFillSymbol(
"solid",
new SimpleLineSymbol("solid", new Color([195, 176, 23]), 2),
null
);
var layerToSnapTo = new FeatureLayer("https://sampleserver6.arcgisonline.com/arcgis/rest/services/PoolPermits/MapServer/0", {
mode: FeatureLayer.MODE_ONDEMAND,
outFields: ["*"]
});
layerToSnapTo.setRenderer(new SimpleRenderer(sfs));
map.addLayers([layerToSnapTo]);
//dojo.keys.copyKey maps to CTRL on windows and Cmd on Mac., but has wrong code for Chrome on Mac
var snapManager = map.enableSnapping({
snapKey: has("mac") ? keys.META : keys.CTRL
});
var layerInfos = [{
layer: layerToSnapTo
}];
snapManager.setLayerInfos(layerInfos);
var measurement = new Measurement({
map: map
}, dom.byId("measurementDiv"));
measurement.startup();
});
script>
head>
<body class="calcite">
<div id="mainWindow" data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="design:'headline',gutters:false"
style="width:100%; height:100%;">
<div id="map" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'center'">
<div style="position:absolute; right:20px; top:10px; z-Index:999;">
<div id="titlePane" data-dojo-type="dijit/TitlePane" data-dojo-props="title:'Measurement', closable:false">
<div id="measurementDiv">div>
<span style="font-size:smaller;padding:5px 5px;">Press <b>CTRLb> to enable snapping.span>
div>
div>
div>
div>
body>
html>
描述
使用OverviewMap小部件在主地图的右上角显示一个小地图。
DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>Overview Maptitle>
<link rel="stylesheet" href="https://js.arcgis.com/3.44/dijit/themes/claro/claro.css">
<link rel="stylesheet" href="https://js.arcgis.com/3.44/esri/css/esri.css">
<style>
html, body { height: 100%; width: 100%; margin: 0; padding: 0; }
style>
<script src="https://js.arcgis.com/3.44/">script>
<script>
var map;
require([
"esri/map", "esri/dijit/OverviewMap",
"dojo/parser",
"dijit/layout/BorderContainer", "dijit/layout/ContentPane", "dojo/domReady!"
], function (
Map, OverviewMap,
parser
) {
parser.parse();
map = new Map("map", {
basemap: "satellite",
center: [-122.445, 37.752],
zoom: 14
});
var overviewMapDijit = new OverviewMap({
map: map,
visible: true
});
overviewMapDijit.startup();
});
script>
head>
<body class="claro">
<div data-dojo-type="dijit/layout/BorderContainer"
data-dojo-props="design:'headline', gutters:false"
style="width: 100%; height: 100%; margin:0;">
<div id="map"
data-dojo-type="dijit/layout/ContentPane"
data-dojo-props="region:'center'"
style="padding:0">
div>
div>
body>
html>
描述
此示例显示如何将比例尺添加到地图中。比例尺可以添加到地图或用户指定的位置。下面的代码显示了显示在地图左下角的默认比例尺。您可以通过将attachTo选项设置为以下值之一来修改比例尺的位置:右上角、右下角、上中心、下中心、左下角、左上角。
DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>Map with scalebartitle>
<link rel="stylesheet" href="https://js.arcgis.com/3.44/esri/themes/calcite/dijit/calcite.css">
<link rel="stylesheet" href="https://js.arcgis.com/3.44/esri/themes/calcite/esri/esri.css">
<style>
html, body { height: 100%; width: 100%; margin: 0; padding: 0; }
#map{padding:0;}
style>
<script src="https://js.arcgis.com/3.44/">script>
<script>
var map;
require([
"esri/map", "esri/dijit/Scalebar",
"dojo/parser",
"dijit/layout/BorderContainer", "dijit/layout/ContentPane", "dojo/domReady!"
], function(
Map, Scalebar,
parser
) {
parser.parse();
map = new Map("map", {
basemap: "topo-vector",
center: [-116.093, 34.218],
zoom: 7
});
var scalebar = new Scalebar({
map: map,
// "dual" displays both miles and kilometers
// "english" is the default, which displays miles
// use "metric" for kilometers
scalebarUnit: "dual"
});
});
script>
head>
<body class="calcite">
<div data-dojo-type="dijit/layout/BorderContainer"
data-dojo-props="design:'headline', gutters:false"
style="width: 100%; height: 100%; margin: 0;">
<div id="map"
data-dojo-type="dijit/layout/ContentPane"
data-dojo-props="region:'center'"
style="overflow:hidden;">
div>
div>
body>
html>
描述
此示例演示如何将基本要素图层添加到地图中。FeatureLayer至少必须指向ArcGIS Server或ArcGIS Online上托管的有效要素服务,或者使用要素集合对象构建。要了解有关功能服务的更多信息,请阅读本文档。
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
<title>FeatureLayertitle>
<link rel="stylesheet" href="https://js.arcgis.com/3.44/esri/css/esri.css">
<script src="https://js.arcgis.com/3.44/">script>
<style>
html, body, #map {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
style>
<script>
require([
"esri/map",
"esri/layers/FeatureLayer",
"dojo/domReady!"
],
function(
Map,
FeatureLayer
) {
var map = new Map("map", {
basemap: "hybrid",
center: [-82.44109, 35.6122],
zoom: 17
});
/****************************************************************
* Add feature layer - A FeatureLayer at minimum should point
* to a URL to a feature service or point to a feature collection
* object.
***************************************************************/
// Carbon storage of trees in Warren Wilson College.
var featureLayer = new FeatureLayer("https://services.arcgis.com/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Landscape_Trees/FeatureServer/0");
map.addLayer(featureLayer);
});
script>
head>
<body>
<div id="map">div>
body>
html>
描述
可以使用“绘制”工具栏在地图上绘制形状。
工具栏不是您在页面上自动看到的用户界面组件。相反,它是一个辅助类,可以用来让人们在地图上绘制几何图形。它省去了编写用于绘制每种几何图形类型的代码的工作量。您只需激活希望人们绘制的几何图形类型。在本例中,每个按钮都会激活不同的几何图形类型。
单击按钮时,工具栏将激活相应的工具。或者,您可以允许从下拉列表、一组单选按钮或其他控件中选择几何图形类型。
当工具栏的“draw-end”事件触发时,将调用一个函数,以确保在绘制完要素后在地图上看到某些内容。addGraphic函数为几何图形类型设置适当的符号。有关符号,请参阅API参考,以了解有关定义不同符号的更多信息。
DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>Shapes and Symbolstitle>
<link rel="stylesheet" href="https://js.arcgis.com/3.44/esri/css/esri.css">
<style>
#info {
top: 20px;
color: #444;
height: auto;
font-family: arial;
right: 20px;
margin: 5px;
padding: 10px;
position: absolute;
width: 115px;
z-index: 40;
border: solid 2px #666;
border-radius: 4px;
background-color: #fff;
}
html, body, #mapDiv {
padding:0;
margin:0;
height:100%;
}
button {
display: block;
}
style>
<script src="https://js.arcgis.com/3.44/">script>
<script>
var map, tb;
require([
"esri/map", "esri/toolbars/draw",
"esri/symbols/SimpleMarkerSymbol", "esri/symbols/SimpleLineSymbol",
"esri/symbols/PictureFillSymbol", "esri/symbols/CartographicLineSymbol",
"esri/graphic",
"esri/Color", "dojo/dom", "dojo/on", "dojo/domReady!"
], function(
Map, Draw,
SimpleMarkerSymbol, SimpleLineSymbol,
PictureFillSymbol, CartographicLineSymbol,
Graphic,
Color, dom, on
) {
map = new Map("mapDiv", {
basemap: "topo-vector",
center: [-25.312, 34.307],
zoom: 2
});
map.on("load", initToolbar);
// markerSymbol is used for point and multipoint, see http://raphaeljs.com/icons/#talkq for more examples
var markerSymbol = new SimpleMarkerSymbol();
markerSymbol.setPath("M16,4.938c-7.732,0-14,4.701-14,10.5c0,1.981,0.741,3.833,2.016,5.414L2,25.272l5.613-1.44c2.339,1.316,5.237,2.106,8.387,2.106c7.732,0,14-4.701,14-10.5S23.732,4.938,16,4.938zM16.868,21.375h-1.969v-1.889h1.969V21.375zM16.772,18.094h-1.777l-0.176-8.083h2.113L16.772,18.094z");
markerSymbol.setColor(new Color("#00FFFF"));
// lineSymbol used for freehand polyline, polyline and line.
var lineSymbol = new CartographicLineSymbol(
CartographicLineSymbol.STYLE_SOLID,
new Color([255,0,0]), 10,
CartographicLineSymbol.CAP_ROUND,
CartographicLineSymbol.JOIN_MITER, 5
);
// fill symbol used for extent, polygon and freehand polygon, use a picture fill symbol
// the images folder contains additional fill images, other options: sand.png, swamp.png or stiple.png
var fillSymbol = new PictureFillSymbol(
"images/mangrove.png",
new SimpleLineSymbol(
SimpleLineSymbol.STYLE_SOLID,
new Color('#000'),
1
),
42,
42
);
function initToolbar() {
tb = new Draw(map);
tb.on("draw-end", addGraphic);
// event delegation so a click handler is not
// needed for each individual button
on(dom.byId("info"), "click", function(evt) {
if ( evt.target.id === "info" ) {
return;
}
var tool = evt.target.id.toLowerCase();
map.disableMapNavigation();
tb.activate(tool);
});
}
function addGraphic(evt) {
//deactivate the toolbar and clear existing graphics
tb.deactivate();
map.enableMapNavigation();
// figure out which symbol to use
var symbol;
if ( evt.geometry.type === "point" || evt.geometry.type === "multipoint") {
symbol = markerSymbol;
} else if ( evt.geometry.type === "line" || evt.geometry.type === "polyline") {
symbol = lineSymbol;
}
else {
symbol = fillSymbol;
}
map.graphics.add(new Graphic(evt.geometry, symbol));
}
});
script>
head>
<body>
<div id="info">
<div>Select a shape then draw on map to add graphicdiv>
<button id="Point">Pointbutton>
<button id="Multipoint">Multipointbutton>
<button id="Line">Linebutton>
<button id="Polyline">Polylinebutton>
<button id="FreehandPolyline">Freehand Polylinebutton>
<button id="Triangle">Trianglebutton>
<button id="Extent">Rectanglebutton>
<button id="Circle">Circlebutton>
<button id="Ellipse">Ellipsebutton>
<button id="Polygon">Polygonbutton>
<button id="FreehandPolygon">Freehand Polygonbutton>
div>
<div id="mapDiv">div>
body>
html>
注明:翻译自esri,仅供个人查阅使用,侵删