1. 程式人生 > >arcgis for javascript 幫助

arcgis for javascript 幫助

JS API3.4的要求

à(1)  IE9或以上版本

否則dijit1.8.3不匹配

1.如何釋出ArcgisJavascript API應用

0.準備工作:

       (1).有web應用:

       (2).有jsapi開發包

1.將jsapi目錄拷貝到自己的Web應用目錄下

2.在頁面中新增引用(2個css,1個js)

<link rel="stylesheet" type="text/css" href="jsapi/js/dojo/dijit/themes/claro/claro.css"

>

<link rel="stylesheet" href="jsapi/js/esri/css/esri.css">

<script src="jsapi/init.js"></script>

3.在頁面中新增載入地圖的指令碼

dojo.ready(function(){  

   mapObj=new esri.Map("map");

   var districtLayer = newesri.layers.ArcGISDynamicMapServiceLayer(“http://localhost:6080/arcgis/rest/services/TF/baseMap/MapServer”, { id: "districLayer"});

   mapObj.addLayer(districtLayer);  

});

3.釋出Web應用

web應用釋出的地址是:

  localost/webLab/layerOper

4.寫出訪問jsapi/js/dojo/dojo/dojo.js的url

在瀏覽器中檢查

確認地址正確後,擷取url一段

localhost/webLab/layerOper/jsapi/js/dojo/dojo

5.將Url片段替換init.js中的baseUrl:

在init.js中搜索 baseUrl:

baseUrl:(location.protocol === 'file:' ? 'http:' : location.protocol) + '//' + "[HOSTNAME_AND_PATH_TO_JSAPI]js/dojo/dojo"

將localhost/webLab/layerOper/jsapi/js/dojo/dojo替換掉

 [HOSTNAME_AND_PATH_TO_JSAPI]js/dojo/dojo

儲存init.js並退出。

5.將Url片段替換dojo.js的baseUrl:

對dojo/dojo/dojo.js施加同樣的操作。

6.釋出成功後,可以瀏覽地圖了

1. 如何部署本地sdk

什麼是sdk?

sdk=tutorials+API Referenc+Samples

如何部署sdk?

(1)下載sdk,解壓得到目錄arcgis_js_v37_sdk

(2)將arcgis_js_v37_sdk\ arcgis_js_api\sdk目錄拷貝到tomcat Webapp目錄下

(3)startUp tomcat, 訪問localhost/sdk

接下來存在的問題:

拔掉網線,會發現reference頁面,無法向下滾動. 解決方式:

(1)滑鼠左下向下拉動

釋出GIS應用常見問題

Init.js 和 dojo.js編碼

  預設使用的編碼是 ANSI

  不要改變編碼,否則 釋出後 載入init.js出問題

<script src=”Init.js”></script>提示ieDefineFailed

原因:頁面中引用了purl.js和xdate.js,衝突

服務端自帶的服務載入指令碼

使用方法:

-1將兩個css指向本地服務的css

2-將init.js指向本地服務的init.js

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

<meta http-equiv="X-UA-Compatible" content="IE=7" />

<title>ArcGIS JavaScript API: TF/newmap</title>

<style type="text/css"> @import "http://serverapi.arcgisonline.com/jsapi/arcgis/2.6/js/dojo/dijit/themes/tundra/tundra.css";

@import "/arcgis/rest/static/jsapi.css";

</style> <script type="text/javascript"> var djConfig = { parseOnLoad: true };

</script> <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=2.6"> </script> <script type="text/javascript"> dojo.require("dijit.layout.BorderContainer");

dojo.require("dijit.layout.ContentPane");

dojo.require("esri.map");

var map;

function init() {

    map = new esri.Map("map");

          var layer = new esri.layers.ArcGISDynamicMapServiceLayer("http://10.254.53.85:6080/arcgis/rest/services/TF/newmap/MapServer");

          map.addLayer(layer);

    var resizeTimer;

    dojo.connect(map, 'onLoad', function(theMap) {

      dojo.connect(dijit.byId('map'), 'resize', function() {

        clearTimeout(resizeTimer);

        resizeTimer = setTimeout(function() {

          map.resize();

          map.reposition();

         }, 500);

       });

     });

    }

dojo.addOnLoad(init);

</script> </head>

<body class="tundra">

 <div dojotype="dijit.layout.BorderContainer" design="headline" gutters="true" style="width: 100%; height: 100%; margin: 0;">

   <div dojotype="dijit.layout.ContentPane" region="top" id="navtable">

<div style="float:left;" id="breadcrumbs">ArcGIS JavaScript API: TF/newmap</div>

<div style="float:right;" id="help">

Built using the <a href="http://help.arcgis.com/en/webapi/javascript/arcgis/">ArcGIS JavaScript API</a>

</div> </div> <div id="map" dojotype="dijit.layout.ContentPane" region="center"> </div> </div> </body>

</html>

2. 圖層操作(layers)

Prerequirement:

必須新增的引用:

  <link rel="stylesheet" type="text/css" href="../gis/jsapi/3.4/js/dojo/dijit/themes/claro/claro.css"/><!--GISCSS-->

        <link rel="stylesheet" href="../gis/jsapi/3.4/js/esri/css/esri.css"/>

   <script type="text/javascript" src="../gis/jsapi/3.4/init.js" charset="utf-8"></script><!--GISAPI-->

        <script type="text/javascript">    var dojoConfig = { parseOnLoad: true };</script>

關鍵:4句。dojo.require(“esri.map”);

var map=new esri.map(“map”);

var layer=new esri.layer.DynamicLayer(“REST Service URL”)

map.addlaer(layer)

詳細:參見1.

圖層物件

向量圖:ArcGISDynamicMapServiceLayer

影像圖:ArcGISImageServiceLayer

GraphicsLayer

….

載入向量圖(mxd)

關鍵:esri.layers.ArcGISDynamicMapServiceLayer

     map.addLayer

var districtLayer = new esri.layers.ArcGISDynamicMapServiceLayer(gSettings.serviceUrl.districtMapUrl, { id: "baseMapLayer" }); mapAppObj.map.addLayer(districtLayer);

//url:

載入影像圖層

keyWord:esri.layers.ArcGISImageServiceLayer

var imageLayer = new esri.layers.ArcGISImageServiceLayer(gSettings.serviceUrl.imageServiceUrl, { id: "baseMapLayer" });

                   mapAppObj.map.addLayer(imageLayer);

備註:影像圖層有兩種方式

   (1)在arccatLog中,右鍵點選,share as imageService.如果這樣,使用ArcGISImageServiceLayer載入影像

   (2)在arcMap中,share as Service.如果這樣,使用ArcGISDynamicMapService載入。

載入GraphicsLayer

//建立graphicsLayer

var graphicLines=new esri.layers.GraphicsLayer();

var graphicLines=new esri.layers.GraphicsLayer({id:”graFun”});

//新增到地圖

map.addLayer(graphicLines)

//查詢line圖層,獲取feature

var queryTask = new esri.tasks.QueryTask(getQueryUrl(1));

         var query = new esri.tasks.Query();

         query.outSpatialReference = gSettings.spatialReference;

         query.returnGeometry = true;

         query.outFields = ["*"];

         query.where = "1=1";

         var tempAr = [queryTask.execute(query)];

         var deferList = new dojo.DeferredList(tempAr);

deferList.then(function (results) {

if (results[0][0] == false || results[0][1].features.length == 0) {

                console.log("獲取線路圖層失敗,請檢查GIS服務");

                 return;

             }

console.log("graphicLines get,count:"+results[0][1].features.length);

             var lineFeatures = results[0][1].features;

  //從feature生成graphic

for (var i = 0; i <= lineFeatures.length - 1; i++) {

   var lineName = lineFeatures[i].attributes.KEY_NAME;

var lineWidth = 4;

var lineSymbol = new esri.symbol.SimpleLineSymbol().setColor(new dojo.Color([255,255,0])).setWidth(lineWidth);

 //生成lineGraphic並放入graphicsLayer

_this.graphicLines.add(new esri.Graphic(lineFeatures[i].geometry, lineSymbol, lineFeatures[i].attributes, null));

}

GraphicsLayer添Graphic(點、線、面)

前提:從feature建立Graphic.

如果無feature,請參考從座標生成feature.

步驟:為feature設定symbol

關鍵句: var gra=new esri.Graphic(feature,symbol,attributes,infoTemplate);

       graphicsLayer.add(gra);

備註:-1.graphic的feature是傳址引用。

-2.如果需要從座標生成feature,參考feature操作。

設定點symbol,生成 graphic

var graphicLayer=new esri.layers.GraphicsLayer();

//方法1

feature.setSymbol(new esri.symbol.PictureMarkerSymbol(“start.png”, 21, 21));

feature.setInfoTemplate("起點資訊", "${NAME}");

graphicLayer.add(feature);

//方法2

var pointGra=new esri.Graphic(feature,symbol,attributes,infoTemplate);

graphicLayer.add(pointGra);

備註:建立graphic,feature是必須的.

必須有symbol才能顯示.

attributes,可選。

infoTemplate,點選graphic彈出的資訊窗體,可選.

設定線symbol,生成 graphic

var graphicLayer=new esri.layers.GraphicsLayer();

//方法1

var lineSymbol = new esri.symbol.SimpleLineSymbol().setColor(new dojo.Color([255,255,0])).setWidth(4);

var lineGra=new esri.Graphic(linefeature,lineSymbol,null,null);

graphicLayer.add(lineGra);

//方法2

var lineSymbol = new esri.symbol.SimpleLineSymbol().setColor(new dojo.Color([255,255,0])).setWidth(4);

linefeature.setSymbol(lineSymbol);

graphicLayer.add(linefeature);

設定面symbol,生成graphic

var ringPolygons=new esri.layers.GraphicsLayer();

//方法1:

polygonFeature.setSymbol(new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, newesri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_DASHDOT, new dojo.Color([255, 0, 0]), 2), newdojo.Color(colors.Yellow)));

graphicsLayer.add(polygonFeature);

方法2:

var graPolygon=new esri.Graphic(polygonFeature,symbol,null,null)

graphicsLayer.add(graPolygon);

載入自定義切片圖層

參考 reference, Layers->Creating a custom tiled layer type

舉例:

刪除圖層

關鍵:map.removeLayer(map.getLayer(id));

var targetLayer=mapAppObj.map.getLayer("baseMapLayer");

mapAppObj.map.removeLayer(targetLayer);

方法2:

var graFun=new esri.layers.GraphicsLayer();

map.addLayer(graFun);

 map.removeLayer(graFun)

圖層顯/隱

關鍵句:map.getLayer(id).show();

        map.getLayer(id).hide();

mapAppObj.map.getLayer("baseMapLayer").show()

mapAppObj.map.getLayer("baseMapLayer").hide()

設定圖層可見scale

說明:設定圖層可見比例尺。

引數:

minScale-最小比例尺-再遠就看不見;minScale設定為0,則在無窮遠也顯示

  maxScale-最大比例尺-再近就看不見;maxScale設定為0,在無窮近也顯示

關鍵句:

       Map.getLayer(“id”).setScaleRange(minScale,maxScale);

舉例:

   Map.getLayer(“baseMapLayer”).setScaleRange(1155600,0)

   Map.getLayer(“baseMapLayer”).setScaleRange(800,0)

備註:

tileMapService中控制maxLevel和minLevel,

map載入 dynamicMapService, 那麼dynamicMap的scale也會被限制.

設定圖層透明度

試用圖層:

 imageLayer,dynamicMapLayer,graphicsLayer,etc…

方法1:建立圖層時設定

  var stationLayer = new esri.layers.ArcGISDynamicMapServiceLayer("http://10.254.53.85:6080/arcgis/rest/services/TF/newmap/MapServer", { "opacity": 0.5 });

map.addLayer(stationLayer);

方法2:

layer.setOpacity(0.5);

應用:

通過JqueryUI 滾動條控制透明度;

   $(".testScroll").slider(

         {

            max:10,//最右側值           

            value:10,//初始值

            orientation:"horizonal",//朝向

            slide: function(event, ui) {//滑動回撥函式

            var value=ui.value;

            var type=event.target.getAttribute("data");

            var percent=(value/$(event.target).slider("option","max")).toFixed(1);

            var targetLayer=mapObj.getLayer(type);

            if(targetLayer==null){return;}

            targetLayer.setOpacity(percent);

            return;

         }

         });

圖層順序

dynamicLayer,imageLayer,tileLayer之間切換

引用:jquery-ui.js

前端:

<ul id="layerController" class="operUI">

<li class="layerItem" data="imageLayer">

   <div class="layerItemFirstRow"><div class="layerCb operUI layerOn" title="顯隱圖層" data="imageLayer"></div><div class="layerText"title="拖拽,改變圖層順序">影像圖</div></div>

   <div class="testScroll" data="imageLayer" title="改變影像圖透明度"></div>

</li>

<li class="layerItem" data="districtLayer">

<div class="layerCb operUI layerOn" data="districtLayer" title="顯隱圖層"></div><div class="layerText" title="拖拽,改變圖層順序">行政圖</div>

      <div class="testScroll" data="districtLayer" title="改變行政圖透明度"></div>

</li>

<li class="layerItem" data="titleLayer">

   <div class="layerCb operUI layerOn" data="tileLayer" title="顯隱圖層"></div><div class="layerText" title="拖拽,改變圖層順序">百度圖</div>

   <div class="testScroll" data="titleLayer" title="改變百度圖透明度"></div>

</li>

</ul>

js:

   //拖拽,改變圖層順序

   //拖拽,改變圖層順序

   $("#layerController").sortable({

      stop:function(event,ui){

         console.log("layerController.stop is triggered");

         var layerSortArr=[];

         var itemCount=$(".layerItem").length;

         $(".layerItem").each(function(i,item){

            var tempObj={layer:mapObj.getLayer(item.getAttribute("data")),index:itemCount-1-i};

            layerSortArr.push(tempObj);

         });

         resortMapLayers(layerSortArr);//重排序圖層        

      }

   });

//重排序圖層

//obj,Array[{layer:,index},{layer:,index}];

function resortMapLayers(obj){

   console.log("resortMapLayers is triggered");  

   var tempStr="[";  

   for(var i=0;i<=obj.length-1;i++){          

      if(obj[i].layer!=null){

         tempStr+="{id:"+obj[i].layer.id+",index:"+obj[i].index+"},";

         mapObj.reorderLayer(obj[i].layer,obj[i].index);//index越大,則優先順序越高

      }    

   }

   tempStr+="]";

   console.log(tempStr);

}

常見問題

新增圖層的步驟?

1.新增li標籤到ul中;

 2.將li下 所有data改成圖層的id;

dynamicLayer內部layers切換

背景:dynamicMapService 包含兩個圖層station,line

   MapServer/0,station

   MapServer/1,line

顯示效果:站在線上。

目標:jsAPI,讓站線上下。

mapObj.getLayer("themeLayer").setDynamicLayerInfos

獲取原始DynamicLayerInfos

var firstLayerInfo=mapObj.getLayer("themeLayer").createDynamicLayerInfosFromLayerInfos();

設定DynamicLayerInfos

setDynamicLayerInfos(dynamicLayerInfos, doNotRefresh)

//code snippets

var firstLayerInfo=mapObj.getLayer("themeLayer").createDynamicLayerInfosFromLayerInfos();

var newOrder=[firstLayerInfo[2],firstLayerInfo[1],firstLayerInfo[0]];

mapObj.getLayer("themeLayer").setDynamicLayerInfos(newOrder,false);

變更DynamicLayerInfo.id

背景:.id決定在上還是在下,0在最上,越小越下

圖層事件

graphicsLayer-onMouseOver

描述:mouseOver graphic時,顯示屬性資訊

總結:map.infoWindow.show(map.toScreenPoint(evt.mapPoint));

   if(equipMouseOverHandler==null){           

        equipMouseOverHandler=dojo.connect(equipmentGraphics,"onMouseOver",function(evt){           

            console.log("equipMouseOver triggered");         

            evt.graphic.setSymbol(highlightSymbol);

            mapAppObj.map.infoWindow.setTitle("裝置型別:"+evt.graphic.attributes.type);

            mapAppObj.map.infoWindow.setContent("裝置名稱:"+evt.graphic.attributes.NAME);         

            //x方向偏小

            mapAppObj.map.infoWindow.show(mapAppObj.map.toScreen(evt.mapPoint));

         });

         console.log("equipMouseOver binded");

      }

graphicsLayer點選,顯示屬性資訊框

說明:graphicsLayer={graphic};

esri.Graphic物件

       graphic.setInfoTemplate(infoTemplate).點選時會則彈出屬性視窗。

      無需繫結graphic.onclick.

var infoTemplate = new esri.InfoTemplate("Attributes", "<tr>State Name: <td>${STATE_NAME}
  </tr></td><br><tr>Population:<td>${Pop2001}</tr></td>");

graphic.setInfoTemplate(infoTemplate);

其它細節

map.graphics 和GraphicsLayer

map.graphics:

map.graphcis物件:map物件預設的一層graphicsLayer.

//map.graphics=GraphicsLayer of a map;

//map.graphics.graphics  = all the graphics of map.graphics

graphicsLayer:

esri.layers.GraphicsLayer

={graA,graB,….};

備註:graEle的geometry type可以是任意的。即,允許同時存放lineGra,pointGra,

sectionGra

3.要素操作(geometry)

geometry的型別

String,type.

The type of geometry.

Known values: point | multipoint | polyline | polygon | extent

相關推薦

arcgis for javascript 幫助

JS API3.4的要求 à(1)  IE9或以上版本 否則dijit1.8.3不匹配 1.如何釋出ArcgisJavascript API應用 0.準備工作:        (1).有web應用:     

arcgis for javascript--鷹眼

<!DOCTYPE html> <html>   <head>     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  

關於Arcgis for JavaScript API 4.5本地配置與相關變化的探索

    最近由於學習需求對於Arcgis JavaScript API需要一定的運用。翻看了一下官方網站的版本,已經更新到4.7版本。為了方便前端的開發,對4.5的版本進行了一番研究。     首先,我們要執行一個簡單的網頁地圖,必須獲得Arcgis JavaScript

arcgis for javascript 本地部署

本地目錄 C:\inetpub\wwwroot\arcgis4.9\js 該資料夾下是下載的js api  C:\inetpub\wwwroot\arcgis4.9\sdk 該檔案加下是sdk 將init.js的"[HOSTNAME_AND_PATH_TO_JSAPI]

ArcGIS For JavaScript API Overview Map(鷹眼/概覽圖) ————(二十五)

轉載自:http://blog.csdn.net/xiaokui_wingfly/article/details/8508026 描述: 此示例顯示瞭如何新增一個的地形底圖層到您的應用程式和使用OverviewMap的dijit顯示的主要地圖右上角的總覽圖。總覽

arcgis for javascript 二次開發視訊教程-地址

全國首部arcgis for javascript 二次開發視訊教程 百度傳課:http://www.chuanke.com/2873165-137674.html 51cto:http://edu.51cto.com/course/course_id-3949.htm

Angular(4)中載入Arcgis for JavaScript地圖

背景 近期我司專案的需要,採用Angular(4)+SpringBoot前後端分離的架構。並且在需要在專案中實現Arcgis地圖。 本人之前有過Arcgis for JavaScript的小小填坑經驗,並且在公司一直有前後端都會做點的,所以我的任務

ArcGIS For JavaScript API Drawing Tool(繪圖工具)————(十七)

描述:                    您可以使用繪圖工具欄繪製在地圖上的多種幾何形狀。. esri.toolbars.Draw 常量 常量 描述 ARROW 繪製箭頭. UP_ARROW 繪製一個上箭頭. DOWN_ARROW 繪製一個下箭頭 LEFT_AR

ArcGIS For JavaScript API 新增一個dynamic Service(動態服務)————(一)

描述: 此示例演示如何新增一個地圖繪製的伺服器在使用者每次縮放或平移。這樣的地圖不具有快取記憶體的瓦片,被稱為動態地圖服務層。在ArcGISJavaScript API的動態地圖服務為代表的ArcGISDynamicMapServiceLayer。 下面的程式碼行建

Arcgis for Javascript之featureLayer圖和屬性的互操作

說明:主要實現載入FeatureLayer與顯示屬性表,並實現屬性表與地圖的聯動,首先,看看實現後的效果: 顯示效果 如上圖所示,本文章主要實現了以下幾個功能:1、FeatureLayer屬性表的分頁載入與顯示;2、屬性表和地圖的互操作,包括滑鼠經過時在地圖上顯示名稱並高

ArcGIS For JavaScript API Feature layer hover(功能圖層的懸浮)————(二十六)

描述:  在”South Carolina南卡羅來納州“的縣上進行滑鼠懸浮,跳出提示框。滑鼠事件進行控制其顯示方式。 重要程式碼: (1)控制顯示的州 var southCarolinaCounties=new esri.layers.FeatureLayer("ht

arcgis for javascript之ArcGISDynamicMapServiceLayer圖層控制的實現

圖層控制是很多GIS系統裡面必須的一個小功能,本文就說說arcgis for javascript下ArcGISDynamicMapServiceLayer圖層控制的實現方式。首先看圖: 實現效果 重點有以下兩點:1、獲取ArcGISDynamicMapServiceLa

ArcGIS for javascript 構建GraphicsLayer

1)首先獲取平面座標,根據對應的座標系,例項化座標物件,如下:       var point = new esri.geometry.Point(xpoint,ypoint,new esri.SpatialReference({wkid:4326}));      wki

利用Arcgis for javascript API繪製GeoJSON並同時彈出多個Popup

1.引言   由於Arcgis for javascript API不可以繪製Geojson,並且提供的Popup一般只可以彈出一個,在很多專題圖製作中,會遇到不少的麻煩。因此本文結合了兩個現有的Arcgis for javascript API擴充庫,對其進行改造達到

使用Arcgis Api for Javascript 調用 本地Portal發布的WebMap

pla basemap 步驟 reat 地址 dap toc cli 配置 步驟: 安裝Arcgis Portal 10.4,Server 10.4,DataStore ,WebAdaptor for IIS,搭建arcgis api for javascript 4

ArcGIS API for JavaScript學習(1):第一個地圖

樣式表 參數 資源 charset 底層 arcgis 順序 api navi 1.簡介 ArcGIS API for JavaScript跟隨ArcGIS 9.3同時發布,是ESRI根據JavaScript技術實現的調用ArcGIS Server REST API接口的一

ArcGIS API for JavaScript 4.4學習筆記[新] AJS4.4和AJS3.21新特性

ack 讀取 port 不同 ide evel arc ges wfs ESRI官網悄無聲息突然更新4.4和3.21,公眾號也沒有什麽消息。照例,給大家看看這次更新有什麽新特性吧。 1. AJS 4.4 官方更新日誌:點我,比較詳細。我在這裏抽一些主幹作為說明。 1.1

Arcgis api for javascript學習筆記-三維地圖的飛行效果

com init viewport window eight put div speed null 其實就只是用到了 view.goTo() 函數,再利用 window.setInterval() 函數(定時器)定時執行goTo()。代碼如下: <!DOCTYP

ArcGIS API for JavaScript 4.6 版本加載高德地

地理信息ArcGIS API for JavaScript 4.X 版本升級後,API發生了很大的變化。 其中就支持了WebEarth展示,主要是通過 esri/views/SceneView 實現的。 在新版本中,默認都是加載Esri自己的地圖。 若想加載其他地圖,可以通過擴展BaseTileLayer實現

ArcGIS API for JavaScript 4.x 與 npm

resolved 進行 ali IE fun IT rop async creat 在4.7版本中,不僅增加了WebGL的渲染支持(渲染前端速度加快,渲染量也加大)、增強了ES6中的Promises語法支持,還支持了npm管理及webpack打包,實屬喜訊。 “意味著可以