前端入門(mén)ArcGIS教程(一)
本文適合對(duì)圖形、地圖、可視化感興趣的小伙伴閱讀。
歡迎關(guān)注前端早茶,與廣東靚仔攜手共同進(jìn)階~
作者:廣東靚仔
一、前言
本文基于ArcGIS官方文檔:
? ??在開(kāi)始講解ArcGIS內(nèi)容前,廣東靚仔從官網(wǎng)找來(lái)了幾張Demo效果圖,給小伙伴們一個(gè)直觀的了解。3D效果圖:https://developers.arcgis.com/javascript/latest/api-reference/


建筑效果圖:

關(guān)于ArcGIS的內(nèi)容,廣東靚仔后續(xù)會(huì)持續(xù)分享這個(gè)主題的內(nèi)容。
這篇文章先給大家來(lái)個(gè)初步認(rèn)識(shí)
二、使用場(chǎng)景
? ?ArcGIS 包括地圖、場(chǎng)景和應(yīng)用程序,允許整個(gè)組織探究、了解和測(cè)量地理數(shù)據(jù)。1、在地圖中查看數(shù)據(jù)ArcGIS 中查找到的交互式地圖可用于探究、可視化和了解 2D 中組織的數(shù)據(jù)。彈出窗口、圖例、過(guò)濾器和透明度等數(shù)據(jù)查看工具可用于重點(diǎn)查看對(duì)您重要的數(shù)據(jù)。2、在場(chǎng)景中查看數(shù)據(jù)將內(nèi)置場(chǎng)景查看器與桌面 Web 瀏覽器一同使用,以瀏覽符號(hào)化的地理空間內(nèi)容。場(chǎng)景可包括允許在直觀的交互式 3D 環(huán)境中顯示和分析地理信息的 2D 和 3D 圖層、樣式和配置的集合。3、執(zhí)行分析地圖可用于查找模式、評(píng)估趨勢(shì)和制定決策。但是僅通過(guò)查看地圖,許多模式和關(guān)系往往并不清晰。分析工具可用于量化數(shù)據(jù)模式和關(guān)系并將結(jié)果以地圖、表格和圖表的形式顯示出來(lái)。通過(guò)地圖查看器中提供的分析工具,您可以使用包括可視分析在內(nèi)的多種途徑來(lái)解決問(wèn)題并制定重要決策。4、編輯地圖中的要素采集數(shù)據(jù)、可視化時(shí)間、測(cè)量和查看坐標(biāo)、獲取方向
三、ArcGIS安裝
? ? 一、安裝ArcGIS License Manager溫馨提示ArcGIS 10.X系列軟件的安裝過(guò)程大同小異,大致的安裝步驟均為
安裝License加補(bǔ)丁
安裝Desktop然后加補(bǔ)丁
安裝中文語(yǔ)言
大家可以按照這個(gè)思路去安裝,如果安裝失?。?/span>關(guān)閉防火墻、徹底關(guān)閉Windows Defender,重啟。
另外,軟件正常安裝成功之后,運(yùn)行的時(shí)候可能會(huì)遇到殺毒軟件提示刪除補(bǔ)丁文件的情況,此時(shí)一定要添加信任,將補(bǔ)丁文件列入殺毒軟件信任列表,否則可能會(huì)遇到打不開(kāi)的情況。
1、解壓安裝包ArcGIS_Desktop_102_134924.iso2、打開(kāi)ESRI.exe,點(diǎn)擊ArcGIS License Manager中的Setup,如下圖所示:
3、點(diǎn)擊NEXT、NEXT、AGREE
4、選擇安裝路徑,這里默認(rèn)即可(當(dāng)然也可以自己定義安裝路徑,不要出現(xiàn)中文路徑,否則會(huì)出現(xiàn)wanming),點(diǎn)擊Next。

6、點(diǎn)擊Stop,再點(diǎn)擊OK。Tips:?如果不點(diǎn)擊Stop,那么服務(wù)會(huì)一直運(yùn)行,這樣會(huì)導(dǎo)致后面拷貝補(bǔ)丁文件的時(shí)候,無(wú)法正??截?。



二、安裝ArcGIS for Desktop1、點(diǎn)擊ESRI.exe中ArcGIS for Desktop中的Setup。



操作:開(kāi)始菜單→所有程序→ArcGIS→ArcGIS Administrator,如下所示,點(diǎn)擊“高級(jí)”。
四、2D demo分享
1.參考 ArcGIS API for JavaScript
1、設(shè)置一個(gè)類(lèi)似于以下示例的基本 HTML 文檔:
<!DOCTYPE?html>
<html>
??<head>
????<meta?charset="utf-8"?/>
????<meta?name="viewport"?content="initial-scale=1,?maximum-scale=1,?user-scalable=no"?/>
????<title>Intro?to?MapView?-?Create?a?2D?map</title>
??</head>
</html>
在<head>標(biāo)簽內(nèi),使用<script>和<link>標(biāo)簽引用 ArcGIS API for JavaScript?:
<link?rel="stylesheet"?href="https://js.arcgis.com/4.21/esri/themes/light/main.css"?/>
<script?src="https://js.arcgis.com/4.21/"></script>
該<script>標(biāo)簽從 CDN 加載 ArcGIS API for JavaScript。當(dāng) API 新版本發(fā)布時(shí),更新版本號(hào)以匹配新發(fā)布的版本。
該<link>標(biāo)簽引用main.css包含特定于 Esri 小部件和組件的樣式的樣式表。
2. 加載模塊
使用第二個(gè)<script>標(biāo)簽從 API 加載特定模塊。使用以下代碼段中的語(yǔ)法加載以下模塊:
esri/Map?- 加載特定于創(chuàng)建地圖的代碼
esri/views/MapView?- 加載允許以 2D 方式查看地圖的代碼
<script>
??require([?"esri/Map",?"esri/views/MapView"?],?(Map,?MapView)?=>?{
????//?Code?to?create?the?map?and?view?will?go?here
??});
</script>
在構(gòu)建簡(jiǎn)單頁(yè)面或進(jìn)行試驗(yàn)時(shí),將 JavaScript 放入腳本標(biāo)記中很有用,但不適用于較大的應(yīng)用程序。在構(gòu)建更大的應(yīng)用程序時(shí),所有 JavaScript 都應(yīng)該在單獨(dú)的.js文件中。
全局require()函數(shù)用于加載 API 的AMD模塊。要了解有關(guān) API 不同模塊的更多信息,請(qǐng)?jiān)L問(wèn)工具指南簡(jiǎn)介頁(yè)面。
3. 創(chuàng)建地圖
使用 來(lái)創(chuàng)建新地圖Map,它是對(duì)從esri/Map模塊加載的 Map 類(lèi)的引用。我們可以basemap通過(guò)將對(duì)象傳遞給 Map 構(gòu)造函數(shù)來(lái)指定地圖屬性,例如。
require(["esri/Map",?"esri/views/MapView"],?(Map,?MapView)?=>?{
??const?map?=?new?Map({
????basemap:?"topo-vector"
??});
});
其他底圖選項(xiàng)包括:satellite、hybrid、
gray-vector、dark-gray-vector、
oceans、streets-vector、osm、
national-geographic、
streets-night-vector。
通過(guò)修改沙箱中的basemap選項(xiàng)來(lái)使用備用底圖。查看Map 類(lèi)以獲取有關(guān)其他地圖選項(xiàng)的更多詳細(xì)信息。
4. 創(chuàng)建二維視圖
查看在 HTML 文件中充當(dāng)容器的參考節(jié)點(diǎn),允許用戶(hù)查看 HTML 頁(yè)面內(nèi)的地圖。MapView通過(guò)將對(duì)象傳遞給其構(gòu)造函數(shù)來(lái)創(chuàng)建一個(gè)新對(duì)象并設(shè)置其屬性:
require(["esri/Map",?"esri/views/MapView"],?(Map,?MapView)?=>?{
??const?map?=?new?Map({
????basemap:?"topo-vector"
??});
??const?view?=?new?MapView({
????container:?"viewDiv",?//?Reference?to?the?DOM?node?that?will?contain?the?view
????map:?map?//?References?the?map?object?created?in?step?3
??});
});
在這個(gè)片段中,我們將container屬性設(shè)置為將保存地圖的 DOM 節(jié)點(diǎn)的名稱(chēng),在這種情況下,我們使用元素的id屬性<div>。該map屬性引用了我們?cè)谏弦徊街袆?chuàng)建的地圖對(duì)象。請(qǐng)參閱MapView 文檔,可以在視圖上設(shè)置的其他屬性,包括center和zoom,可用于定義視圖的初始范圍。
5.定義頁(yè)面內(nèi)容
現(xiàn)在創(chuàng)建地圖和視圖所需的 JavaScript 已完成!下一步是添加相關(guān)的 HTML 以查看地圖。對(duì)于這個(gè)例子,HTML 非常簡(jiǎn)單:添加一個(gè)<body>標(biāo)簽,它定義了在瀏覽器中可見(jiàn)的內(nèi)容,以及<div>將在其中創(chuàng)建視圖的主體內(nèi)的單個(gè)元素。
<body>
??<div?id="viewDiv"></div>
</body>
該<div>有一個(gè)id“viewDiv”的匹配id傳遞到MapView類(lèi)的container構(gòu)造函數(shù)屬性。
6. 設(shè)計(jì)頁(yè)面
使用<style>.css 文件中的標(biāo)簽設(shè)置頁(yè)面內(nèi)容的樣式<head>。要使地圖填滿(mǎn)瀏覽器窗口,請(qǐng)?jiān)陧?yè)面的 中添加以下 CSS?<style>:
<style>
??html,
??body,
??#viewDiv?{
????padding:?0;
????margin:?0;
????height:?100%;
????width:?100%;
??}
</style>
如果現(xiàn)在已經(jīng)使用 ArcGIS API for JavaScript 4.0 在 2D 中構(gòu)建了我們的第一個(gè) Web 應(yīng)用程序!最終 HTML 代碼應(yīng)如下所示:
<!DOCTYPE?html>
<html>
??<head>
????<meta?charset="utf-8"?/>
????<meta?name="viewport"?content="initial-scale=1,?maximum-scale=1,?user-scalable=no"?/>
????<title>Intro?to?MapView?-?Create?a?2D?map</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/themes/light/main.css"?/>
????<script?src="https://js.arcgis.com/4.21/"></script>
????<script>
??????require(["esri/Map",?"esri/views/MapView"],?(Map,?MapView)?=>?{
????????const?map?=?new?Map({
??????????basemap:?"topo-vector"
????????});
????????const?view?=?new?MapView({
??????????container:?"viewDiv",?//?Reference?to?the?view?div?created?in?step?5
??????????map:?map,?//?Reference?to?the?map?object?created?before?the?view
??????????zoom:?4,?//?Sets?zoom?level?based?on?level?of?detail?(LOD)
??????????center:?[15,?65]?//?Sets?center?point?of?view?using?longitude,latitude
????????});
??????});
????</script>
??</head>
??<body>
????<div?id="viewDiv"></div>
??</body>
</html>五、3D demo分享
1.參考 ArcGIS API for JavaScript
1.1、首先,設(shè)置一個(gè)類(lèi)似于以下示例的基本 HTML 文檔
<!DOCTYPE?html>
<html>
??<head>
????<meta?charset="utf-8"?/>
????<meta?name="viewport"?content="initial-scale=1,?maximum-scale=1,?user-scalable=no"?/>
????<title>廣東靚仔實(shí)現(xiàn)2D?demo</title>
??</head>
</html>
1.2、在<head>標(biāo)簽內(nèi),使用<script>和<link>標(biāo)簽引用 ArcGIS API for JavaScript :
<link?rel="stylesheet"?href="https://js.arcgis.com/4.21/esri/themes/light/main.css"?/>
<script?src="https://js.arcgis.com/4.21/"></script>
該<script>標(biāo)簽從 CDN 加載 ArcGIS API for JavaScript。當(dāng) API 新版本發(fā)布時(shí),更新版本號(hào)以匹配新發(fā)布的版本。
該<link>標(biāo)簽引用main.css包含特定于 Esri 小部件和組件的樣式的樣式表。
2. 加載模塊
使用第二個(gè)<script>標(biāo)簽從 API 加載特定模塊。使用以下代碼段中的語(yǔ)法加載以下模塊:
esri/Map - 加載特定于創(chuàng)建地圖的代碼
esri/views/SceneView - 加載允許以 3D 方式查看地圖的代碼
<script>
??require([?"esri/Map",?"esri/views/SceneView"?],?(Map,?SceneView)?=>?{
????//?Code?to?create?the?map?and?view?will?go?here
??});
</script>在構(gòu)建簡(jiǎn)單頁(yè)面或進(jìn)行試驗(yàn)時(shí),將 JavaScript 放入腳本標(biāo)記中很有用,但不適用于較大的應(yīng)用程序。在構(gòu)建更大的應(yīng)用程序時(shí),所有 JavaScript 都應(yīng)該在單獨(dú)的.js文件中。
全局require()函數(shù)用于加載 API 的AMD模塊。要了解有關(guān) API 不同模塊的更多信息,請(qǐng)?jiān)L問(wèn)工具指南簡(jiǎn)介頁(yè)面。
3. 創(chuàng)建地圖
使用 來(lái)創(chuàng)建新地圖Map,它是對(duì)從esri/Map模塊加載的 Map 類(lèi)的引用。我們可以basemap通過(guò)將對(duì)象傳遞給 Map 構(gòu)造函數(shù)來(lái)指定地圖屬性,例如和 'ground。
require(["esri/Map",?"esri/views/SceneView"],?(Map,?SceneView)?=>?{
??const?map?=?new?Map({
????basemap:?"topo-vector",
????ground:?"world-elevation"
??});
});
其他底圖選項(xiàng)包括:satellite、hybrid、
gray-vector、dark-gray-vector、
oceans、streets-vector、osm、
national-geographic、
streets-night-vector。
通過(guò)修改沙箱中的basemap選項(xiàng)來(lái)使用備用底圖。查看Map 類(lèi)以獲取有關(guān)其他地圖選項(xiàng)的更多詳細(xì)信息。
'Map' 的 'ground' 屬性指定地圖的表面屬性。僅在將地圖添加到 3D SceneView 時(shí)才相關(guān)。字符串“world-elevation”指定使用 World Elevation Service 的地面實(shí)例。
4. 創(chuàng)建 3D 視圖
查看在 HTML 文件中充當(dāng)容器的參考節(jié)點(diǎn),允許用戶(hù)查看 HTML 頁(yè)面內(nèi)的地圖。SceneView通過(guò)將對(duì)象傳遞給其構(gòu)造函數(shù)來(lái)創(chuàng)建一個(gè)新對(duì)象并設(shè)置其屬性:
require(["esri/Map",?"esri/views/SceneView"],?(Map,?SceneView)?=>?{
??const?map?=?new?Map({
????basemap:?"topo-vector",
????ground:?"world-elevation"
??});
??const?view?=?new?SceneView({
????container:?"viewDiv",?//?Reference?to?the?DOM?node?that?will?contain?the?view
????map:?map?//?References?the?map?object?created?in?step?3
??});
});
在這個(gè)片段中,我們將container屬性設(shè)置為將保存地圖的 DOM 節(jié)點(diǎn)的名稱(chēng),在這種情況下,我們使用元素的id屬性<div>。該map屬性引用了我們?cè)谏弦徊街袆?chuàng)建的地圖對(duì)象。請(qǐng)參閱SceneView 文檔可以在視圖上設(shè)置的其他屬性,包括center和scale,可用于定義視圖的初始范圍。
5.定義頁(yè)面內(nèi)容
現(xiàn)在創(chuàng)建地圖和視圖所需的 JavaScript 已完成!下一步是添加相關(guān)的 HTML 以查看地圖。對(duì)于這個(gè)例子,HTML 非常簡(jiǎn)單:添加一個(gè)<body>標(biāo)簽,它定義了在瀏覽器中可見(jiàn)的內(nèi)容,以及<div>將在其中創(chuàng)建視圖的主體內(nèi)的單個(gè)元素。
<body>
??<div?id="viewDiv"></div>
</body>
該<div>有一個(gè)id“viewDiv”的匹配id傳遞給SceneView的container在constructor屬性。
6. 設(shè)計(jì)頁(yè)面
使用<style>.css 文件中的標(biāo)簽設(shè)置頁(yè)面內(nèi)容的樣式<head>。要使地圖填滿(mǎn)瀏覽器窗口,請(qǐng)?jiān)陧?yè)面的 中添加以下 CSS?<style>:
<style>
??html,
??body,
??#viewDiv?{
????padding:?0;
????margin:?0;
????height:?100%;
????width:?100%;
??}
</style>
我們現(xiàn)在已經(jīng)使用 ArcGIS API for JavaScript 構(gòu)建了我們的第一個(gè) 3D 網(wǎng)絡(luò)應(yīng)用程序。最終 HTML 代碼應(yīng)如下所示:
<!DOCTYPE?html>
<html>
??<head>
????<meta?charset="utf-8"?/>
????<meta?name="viewport"?content="initial-scale=1,?maximum-scale=1,?user-scalable=no"?/>
????<title>Intro?to?SceneView?-?Create?a?3D?map</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/themes/light/main.css"?/>
????<script?src="https://js.arcgis.com/4.21/"></script>
????<script>
??????require(["esri/Map",?"esri/views/SceneView"],?(Map,?SceneView)?=>?{
????????const?map?=?new?Map({
??????????basemap:?"topo-vector",
??????????ground:?"world-elevation"
????????});
????????const?view?=?new?SceneView({
??????????container:?"viewDiv",?//?Reference?to?the?scene?div?created?in?step?5
??????????map:?map,?//?Reference?to?the?map?object?created?before?the?scene
??????????scale:?50000000,?//?Sets?the?initial?scale?to?1:50,000,000
??????????center:?[-101.17,?21.78]?//?Sets?the?center?point?of?view?with?lon/lat
????????});
??????});
????</script>
??</head>
??<body>
????<div?id="viewDiv"></div>
??</body>
</html>六、總結(jié)
在我們閱讀完官方文檔后,我們一定會(huì)進(jìn)行更深層次的學(xué)習(xí),比如看下框架底層是如何運(yùn)行的,以及源碼的閱讀。? ? 這里廣東靚仔給下一些小建議:- 在看源碼前,我們先去官方文檔復(fù)習(xí)下框架設(shè)計(jì)理念、源碼分層設(shè)計(jì)
- 閱讀下框架官方開(kāi)發(fā)人員寫(xiě)的相關(guān)文章
- 借助框架的調(diào)用棧來(lái)進(jìn)行源碼的閱讀,通過(guò)這個(gè)執(zhí)行流程,我們就完整的對(duì)源碼進(jìn)行了一個(gè)初步的了解
- 接下來(lái)再對(duì)源碼執(zhí)行過(guò)程中涉及的所有函數(shù)邏輯梳理一遍
關(guān)注我,一起攜手進(jìn)階
歡迎關(guān)注前端早茶,與廣東靚仔攜手共同進(jìn)階~
