arcgis api for js 關於layers圖層的理解


概述:Arcgis for Javasctipt中常見的layer有動態圖層(ArcGISDynamicMapServiceLayer

)、切片圖層(ArcGISTiledMapServiceLayer)、特征圖層(FeatureLayer)、圖象圖層(GraphicsLayer)、標注圖層(LabelLayer)、wms圖層(WMSLayer)和切片wms圖層(WMTSLayer)等幾種。本文結合SVG技術,詳細介紹Arcgis for Javasctipt中常見的layer。

1、Arcgis for Javasctipt中常見的layer簡介

1.1 ArcGISDynamicMapServiceLayer

       ArcGISDynamicMapServiceLayer為動態地圖服務圖層,可以理解為一個mxd的所有內容。

var dynamicMapServiceLayer = new ArcGISDynamicMapServiceLayer("http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Petroleum/KSFields/MapServer");
map.addLayer(dynamicMapServiceLayer);

1.2 ArcGISTiledMapServiceLayer

       ArcGISTiledMapServiceLayer為切片地圖服務圖層,是將一個MXD根據不同的級別切成不同的圖片。

var tiledMapServiceLayer = new ArcGISTiledMapServiceLayer(  
  "http://server.arcgisonline.com/ArcGIS/rest/services/NGS_Topo_US_2D/MapServer");
map.addLayer(tiledMapServiceLayer);

1.3 FeatureLayer

       FeatureLayer為特征圖層,可以理解為mxd中的圖層,通過FeatureLayer可以修改圖層的空間信息與屬性信息。

var featureLayer = new FeatureLayer("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Petroleum/KGS_OilGasFields_Kansas/MapServer/0",{
    mode: FeatureLayer.MODE_ONDEMAND,
    infoTemplate: infoTemplate,
    outFields: ["*"]
  });
map.addLayer(featureLayer);

1.4 GraphicsLayer

       GraphicsLayer為圖象圖層,是一個客戶端展示的圖層,可以將客戶端繪制的圖形、標記、文字等通過graphic的方式展示。

var graphicsLayer = new GraphicsLayer();
map.addLayer(graphicsLayer);

1.5 LabelLayer

       LabelLayer是一個標注圖層,可以展示FeatureLayer或者GraphicsLayer圖形中根據特定的字段、特定的形式標注出來展現給客戶。

var symbol = new TextSymbol();
var renderer = new SimpleRenderer(symbol);
var labelLayer = new LabelLayer();
labelLayer.addFeatureLayer(featureLayer, renderer, "${CITY_NAME}");
map.addLayer(labelLayer);

1.6 WMSLayer

       WMSLayer為符合OGC標准的WMS圖層。

var wmsLayer = new esri.layers.WMSLayer(wmsURL, {
    resourceInfo: resourceInfo,
    visibleLayers: ['1','2']
  });
map.addLayer(wmsLayer);

1.7 WMTSLayer

       WMTSLayer為符合OGC標准的WMTS圖層。

var layerInfo = new WMTSLayerInfo({
    identifier: "world",
    tileMatrixSet: "EPSG:4326",
    format: "gif"
  });
var options = {
    serviceMode: "KVP",
    layerInfo: layerInfo
  };
var wmtsLayer = new WMTSLayer("http://v2.suite.opengeo.org/geoserver/gwc/service/wmts", options);
map.addLayer(wmtsLayer);

2、SVG簡介

可縮放矢量圖形是基於可擴展標記語言標准通用標記語言的子集),用於描述二維矢量圖形的一種圖形格式。它由萬維網聯盟制定,是一個開放標准。

ü  SVG 指可伸縮矢量圖形 (Scalable Vector Graphics);

ü  SVG 用來定義用於網絡的基於矢量的圖形;

ü  SVG 使用 XML 格式定義圖形;

ü  SVG 圖像在放大或改變尺寸的情況下其圖形質量不會有所損失;

ü  SVG 是萬維網聯盟的標准;

ü  SVG 與諸如 DOM 和 XSL 之類的 W3C 標准是一個整體。

2.1 SVG常用標簽

① 直線

<?xml version="1.0"standalone="no"?>

<!DOCTYPE svg PUBLIC"-//W3C//DTD SVG 1.1//EN"

"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

 <svg width="100%"height="100%" version="1.1"

xmlns="http://www.w3.org/2000/svg"> 

<line x1="0" y1="0"x2="300" y2="300"

style="stroke:rgb(99,99,99);stroke-width:2"/> 

</svg>

代碼解釋:

x1 屬性在 x軸定義線條的開始;

y1 屬性在 y軸定義線條的開始;

x2 屬性在 x軸定義線條的結束;

y2 屬性在 y軸定義線條的結束;

② 折線

<?xml version="1.0"standalone="no"?>

<!DOCTYPE svgPUBLIC "-//W3C//DTD SVG 1.1//EN"

"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

 <svg width="100%"height="100%" version="1.1"

xmlns="http://www.w3.org/2000/svg">

 <polyline points="0,00,20 20,20 20,40 40,40 40,60"

style="fill:white;stroke:red;stroke-width:2"/>

 </svg>

③ 矩形

<?xml version="1.0"standalone="no"?>

<!DOCTYPE svgPUBLIC "-//W3C//DTD SVG 1.1//EN"

"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

 <svg width="100%"height="100%" version="1.1"

xmlns="http://www.w3.org/2000/svg">

 <rect x="20"y="20" rx="20" ry="20" width="250"

height="100"style="fill:red;stroke:black;

stroke-width:5;opacity:0.5"/> 

</svg>

代碼解釋:

rect 元素的 width 和height 屬性可定義矩形的高度和寬度;

style 屬性用來定義 CSS 屬性;

CSS 的 fill 屬性定義矩形的填充顏色(rgb 值、顏色名或者十六進制值);

CSS 的 stroke-width屬性定義矩形邊框的寬度;

CSS 的 stroke 屬性定義矩形邊框的顏色;

x 屬性定義矩形的左側位置(例如,x="0"定義矩形到瀏覽器窗口左側的距離是 0px);

y 屬性定義矩形的頂端位置(例如,y="0"定義矩形到瀏覽器窗口頂端的距離是 0px);

CSS 的 fill-opacity屬性定義填充顏色透明度(合法的范圍是:0 - 1);

CSS 的 stroke-opacity屬性定義筆觸顏色的透明度(合法的范圍是:0 - 1);

CSS 的 opacity 屬性定義整個元素的透明值(合法的范圍是:0 - 1);

rx 和 ry 屬性可使矩形產生圓角。

④ 圓

<?xml version="1.0"standalone="no"?>

<!DOCTYPE svgPUBLIC "-//W3C//DTD SVG 1.1//EN"

"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 

<svg width="100%"height="100%" version="1.1"

xmlns="http://www.w3.org/2000/svg"> 

<circle cx="100"cy="50" r="40" stroke="black"

stroke-width="2"fill="red"/> 

</svg>

代碼解釋:

cx 和 cy 屬性定義圓點的 x 和 y 坐標。如果省略 cx 和 cy,圓的中心會被設置為 (0, 0)

r 屬性定義圓的半徑。

⑤ 橢圓

<?xml version="1.0"standalone="no"?>

<!DOCTYPE svgPUBLIC "-//W3C//DTD SVG 1.1//EN"

"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 

<svg width="100%"height="100%" version="1.1"

xmlns="http://www.w3.org/2000/svg"> 

<ellipse cx="300"cy="150" rx="200" ry="80"

style="fill:rgb(200,100,50);

stroke:rgb(0,0,100);stroke-width:2"/> 

</svg>

代碼解釋:

cx 屬性定義圓點的 x坐標;

cy 屬性定義圓點的 y坐標;

rx 屬性定義水平半徑

ry 屬性定義垂直半徑

⑥ 多邊形

<?xml version="1.0"standalone="no"?>

<!DOCTYPE svgPUBLIC "-//W3C//DTD SVG 1.1//EN"

"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 

<svg width="100%"height="100%" version="1.1"

xmlns="http://www.w3.org/2000/svg"> 

<polygon points="220,100300,210 170,250"

style="fill:#cccccc;

stroke:#000000;stroke-width:1"/> 

</svg>

代碼解釋:

points 屬性定義多邊形每個角的 x和 y 坐標

⑦ 路徑

使用path標簽時,就像用指令的方式來控制一只畫筆,path支持的指令有: 

M = moveto(M X,Y) :將畫筆移動到指定的坐標位置

L = lineto(L X,Y) :畫直線到指定的坐標位置

H = horizontal lineto(H X):畫水平線到指定的X坐標位置

V = vertical lineto(V Y):畫垂直線到指定的Y坐標位置

C = curveto(CX1,Y1,X2,Y2,ENDX,ENDY):三次貝賽曲線

S = smooth curveto(SX2,Y2,ENDX,ENDY)

Q = quadratic Belzier curve(Q X,Y,ENDX,ENDY):二次貝賽曲線

T = smooth quadratic Belziercurveto(T ENDX,ENDY):映射

A = elliptical Arc(ARX,RY,XROTATION,FLAG1,FLAG2,X,Y):弧線

Z = closepath():關閉路徑

 其中藍色的指令是常用的,綠色的目前為止還沒有用到

a、L H V指令 

M 起點X,起點Y L(直線)終點X,終點Y H(水平線)終點X V(垂直線)終點Y

如:M 10,20 L 80,50 M 10,20 V 50 M 10,20H 90


 b、A指令 

允許不閉合。可以想像成是橢圓的某一段,共七個參數:

ARX,RY,XROTATION,FLAG1,FLAG2,X,Y

RX,RY指所在橢圓的半軸大小

XROTATION指橢圓的X軸與水平方向順時針方向夾角,可以想像成一個水平的橢圓繞中心點順時針旋轉XROTATION的角度。

FLAG1只有兩個值,1表示大角度弧線,0為小角度弧線。

FLAG2只有兩個值,確定從起點至終點的方向,1為順時針,0為逆時針

X,Y為終點坐標

如:m200,250 a 150,30 0 1 0 0,70


⑧ 文本

<?xml version="1.0" standalone="no"?>

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 

<svg viewBox = "0 0 200 200" version = "1.1">

<text x = "10" y = "25" fill = "navy" font-size = "15">

        It was the best of times

    </text>

    <text x = "10" y = "25" dx = "5" dy = "15" fill = "navy" font-size = "15">

        It was the worst of times.

    </text>

</svg>

3Arcgis for Javasctipt中常見layer詳解

       上面簡單的介紹了常見的layer和SVG中一些常見的標簽,常見的layer中,ArcGISTiledMapServiceLayer、WMSLayer和WMTSLayer為柵格圖層,ArcGISDynamicMapServiceLayer、FeatureLayer、GraphicsLayer、LabelLayer為矢量圖層。柵格圖層用柵格圖片的方式展示,矢量圖層用SVG(Scalable Vector Graphic)的方式展示,下面就結合SVG對常見的layer做一個詳細的介紹與說明。

3.1 Arcgis for Javascript的頁面組織

       打開一個地圖,點擊右鍵->審查元素,可查看生成完成后的地圖的頁面組織形式,如下:

如上圖,Arcgis for Javascript的頁面組織形式如下圖:

下面就上面的組織形式做一個簡單的介紹:

a、map_root

map_root是地圖的顯示容器,里面包含了地圖、地圖控制、Popup、縮放控件等。

b、esriControlsBR

esriControlsBR是地圖控制控件。

c、  esriPopup

esriPopup是地圖Popup,地圖的InfoWindow是出現在這個div中。

d、 map_zoom_slider

map_zoom_slider是地圖縮放控件。

e、map_tiled

       map_tiled是切片顯示的div

f、svg

       svg是一些矢量圖層的展示的。

3.2柵格圖層

3.2.1切片圖層和WMTSLayer

如上圖所示,切片圖層和WMTSLayer就是通過上述形式在前段展示的。Arcgis切片的是將圖片按照256*256的大小將圖片切的。

3.2.2WMSLayer

       WMSLayer沒有進行切片,直接將整個圖片顯示。

3.3矢量圖層

       ArcGISDynamicMapServiceLayer、FeatureLayer、GraphicsLayer、LabelLayer等矢量圖層通過svg實現的,其中:

PictureMarkerSymbol是通過<image>實現的。

SimpleMarkerSymbol是通過<circle>或者<path>等實現的。

線對象是通過<path>來實現的。

面對象是通過<circle>、閉合<path>等實現的。

LabelLayer是通過<text>實現的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM