google-code-prettify

星期二, 1月 27, 2015

[ArcGIS Server API for JavaScript] 利用 Label Layer 改變圖層 Label 的顯示


話說 ArcGIS Server for Javascript 怎麼改變圖層 Label 文字的顯示?

口白:
主要是跟 ArcGIS Server for Javascript API 所發生的糾葛?
卜朧共生命中對 GIS Coding 命運的糾結?
或是一場命中註定的糾纏?
結果如何?讓我們看下去....

Html:
<!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></title>
    <link rel="stylesheet" href="http://js.arcgis.com/3.12/esri/css/esri.css">
    <script src="http://js.arcgis.com/3.12/"></script>
  </head>
  <body>
    <div id="map"></div>
  </body>
</html>
說明:
 1. 引用 CSS 需插入  
    <link rel="stylesheet" href="http://js.arcgis.com/3.12/dijit/themes/claro/claro.css">
    <link rel="stylesheet" href="http://js.arcgis.com/3.12/esri/css/esri.css">

 2. 引用 Javascript 需插入  <script src="http://js.arcgis.com/3.12/"></script> 其中已包含了Dojo框架囉

 3. <body> 標籤中 加入 class 樣式定義為 "claro" 如: <body class="claro">

 4. 加入 div 區塊 當作地圖區塊 ,如:<div id="map"></div>


CSS:
      html, body, #map {
        height: 100%; width: 100%; margin: 0; padding: 0;
      }

說明:
 1. 定義 html、body、map 區塊的 CSS 樣式

JavaScript:
      var map;
      require([
        "esri/map",
        "esri/geometry/Extent",
        "esri/layers/FeatureLayer",
        "esri/symbols/SimpleLineSymbol",
        "esri/symbols/SimpleFillSymbol",
        "esri/symbols/TextSymbol",
        "esri/renderers/SimpleRenderer",
        "esri/layers/LabelLayer",
        "esri/Color",
        "dojo/domReady!"
      ], function(
        Map, Extent, FeatureLayer,
        SimpleLineSymbol, SimpleFillSymbol, TextSymbol, SimpleRenderer,
        LabelLayer,
        Color
      ) {
        // load the map centered on the United States
        var bbox = new Extent({"xmin": -1940058, "ymin": -814715, "xmax": 1683105, "ymax": 1446096, "spatialReference": {"wkid": 102003}});
        map = new Map("map", {
          extent: bbox
        });

        /**/
        var labelField = "STATE_NAME" ;

        // create a renderer for the states layer to override default symbology
        var statesColor = new Color("#666");
        // 定義線段樣式 "solid"
        //var statesLine = new SimpleLineSymbol("solid", statesColor, 1.5);
        // 定義線段樣式 esri.symbol.SimpleLineSymbol.STYLE_NULL 不顯示
        var statesLine = new SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_NULL, statesColor, null );
        var statesSymbol = new SimpleFillSymbol("solid", statesLine, null);
        var statesRenderer = new SimpleRenderer(statesSymbol);
        // create a feature layer to show country boundaries
        var statesUrl = "http://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3";
        var states = new FeatureLayer(statesUrl, {
          id: "states",
          outFields: [labelField]
        });
        states.setRenderer(statesRenderer);
        map.addLayer(states);

        // create a text symbol to define the style of labels
        var statesLabel = new TextSymbol().setColor(statesColor);
        statesLabel.font.setSize("14pt");
        statesLabel.font.setFamily("arial");
        var statesLabelRenderer = new SimpleRenderer(statesLabel);
        var labels = new LabelLayer({ id: "labels" });
        // tell the label layer to label the countries feature layer
        // using the field named "admin"
        labels.addFeatureLayer(states, statesLabelRenderer, "{" + labelField + "}");
        // add the label layer to the map
        map.addLayer(labels);
    
        /*
        var labelField1 = "OTHER";

        // create a renderer for the states layer to override default symbology
        var statesColor1 = new Color("#000");
        var statesLine1 = new SimpleLineSymbol("solid", statesColor1, 1.5);
        var statesSymbol1 = new SimpleFillSymbol("solid", statesLine1, null);
        var statesRenderer1 = new SimpleRenderer(statesSymbol1);
        // create a feature layer to show country boundaries
        var statesUrl1 = "http://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3";
        var states1 = new FeatureLayer(statesUrl1, {
          id: "states"
          ,
          outFields: [labelField1]
        });
        states1.setRenderer(statesRenderer1);
        map.addLayer(states1);

        // create a text symbol to define the style of labels
        var statesLabel1 = new TextSymbol().setColor(statesColor1);
        statesLabel1.font.setSize("12pt");
        statesLabel1.font.setFamily("arial");
        var statesLabelRenderer1 = new SimpleRenderer(statesLabel1);
        var labels1 = new LabelLayer({ id: "labels1" });
        // tell the label layer to label the countries feature layer
        // using the field named "admin"
        //labels1.addFeatureLayer(states1, statesLabelRenderer1, "{" + labelField1 + "}");
        labels.addFeatureLayer(states1, statesLabelRenderer1, "{" + labelField1 + "}");
        // add the label layer to the map
        map.addLayer(labels);
        */
      });

說明:
 1. 定義 弱型別的變數 map
     require 是 Dojo 方法,利用該方法 載入'esri/map', 'esri/geometry/Extent', 'esri/layers/FeatureLayer', 'esri/symbols/SimpleLineSymbol', 'esri/symbols/SimpleFillSymbol', 'esri/symbols/TextSymbol', 'esri/renderers/SimpleRenderer', 'esri/layers/LabelLayer', 'esri/Color', 'dojo/domReady!'

 2. 載入模組後,需用定義對應的變數來接收該模組,
     Map, Extent, FeatureLayer, SimpleLineSymbol, SimpleFillSymbol, 
     TextSymbol, SimpleRenderer,LabelLayer,Color

 3. function(Map...略...) {...略...}  用一個 拋棄式的函數 裡面定義 map 變數,
     透過傳入的 Map 類別可以 宣告成一個 esri/map 的物件
     (new Map 宣告方法 就要查 https://developers.arcgis.com/javascript/jsapi/map-amd.htmlnew Map(divId, options?)  第一個參數是 divId ,
     所以要對應 html 中 要顯示地圖 的 div ID(<div id="map"..略...),
     第二個參數是個 Object ,範例中所定義的屬性有 extent,
     extent:源自於 Extent(http://goo.gl/HEZmf8) 類別,
     所以我們定義一個弱型別的變數 bbox 來接 Extent(http://goo.gl/HEZmf8) 類別物件。

 4. 定義弱型別變數 labelField ,並定義它屬性為 STATE_NAME,這是我們預設要顯示的 Label 文字欄位。

 5. 透過傳入的 Color 類別,宣告成一個 esri/Color 的物件
     (new Color 宣告方法 就要查 https://developers.arcgis.com/javascript/jsapi/color-amd.html),
     利用所定義弱型別變數 statesColor 承接,目的是定義顯示線條、文字顏色。

 6. 透過傳入的 SimpleLineSymbol 類別,宣告成一個 esri/symbols/SimpleLineSymbol 的物件
     (new SimpleLineSymbol 宣告方法 就要查 https://developers.arcgis.com/javascript/jsapi/simplelinesymbol-amd.html),
     利用所定義弱型別變數 statesLine 承接,目的是定義簡單線條符號(顏色、粗細、樣式)

 7. 透過傳入的 SimpleFillSymbol 類別,宣告成一個 esri/symbols/SimpleFillSymbol 的物件
     (new SimpleFillSymbol 宣告方法 就要查 https://developers.arcgis.com/javascript/jsapi/simplelinesymbol-amd.html),
     利用所定義弱型別變數 statesSymbol 承接,目的是定義填充線條(顏色、粗細、樣式)

 8. 透過傳入的 SimpleRenderer 類別,宣告成一個 esri/renderers/SimpleRenderer 的物件
     (new SimpleRenderer 宣告方法 就要查 https://developers.arcgis.com/javascript/jsapi/simplerenderer-amd.html),
     利用所定義弱型別變數 statesRenderer 承接,目的是定義顯示物件

 9. 定義弱型別變數 statesUrl,
     屬性值:http://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer/3 ,
     定義為 ArcGIS Server Rest 服務位址

10. 透過傳入的 FeatureLayer 類別,宣告成一個 esri/layers/FeatureLayer 的物件
     (new FeatureLayer 宣告方法 就要查 https://developers.arcgis.com/javascript/jsapi/featurelayer-amd.html),
      利用所定義弱型別變數 states 承接。
      利用 states.setRenderer(statesRenderer)函數,來設定 FeatureLayer 的樣式。

11. 將 states 的 FeatureLayer ,透過 map.addLayer(states)  函數,把圖層加到 map。

12. 透過傳入的 TextSymbol 類別,宣告成一個 esri/symbols/TextSymbol 的物件
     (new TextSymbol 宣告方法 就要查 https://developers.arcgis.com/javascript/jsapi/textsymbol-amd.html),
      利用所定義弱型別變數 statesLabel 承接。
      利用 statesLabel.font.setSize("14pt") 函數,來設定字型的大小,
      利用 statesLabel.font.setFamily("arial") 函數,來設定字型集。

13. 透過傳入的 SimpleRenderer 類別,宣告成一個 esri/renderers/SimpleRenderer 的物件(同 8.),
     利用所定義弱型別變數 statesLabelRenderer 承接,目的是定義顯示 Label 物件

14. 透過傳入的 LabelLayer 類別,宣告成一個 esri/layers/FeatureLayer 的物件
     (new LabelLayer 宣告方法 就要查 https://developers.arcgis.com/javascript/jsapi/labellayer-amd.html),
      利用所定義弱型別變數 labels 承接。
      利用 labels.addFeatureLayer() 函數,來添加參考其標記要素層。

15. 將 labels 的 LabelLayer ,透過 map.addLayer(labels)  函數,把圖層加到 map。

console: ( 打開 debug 模式,來修改 label吧 )
// 將顯示的 Label 欄位改為 OTHER
map._layers.labels._featureLayerInfos[0].LabelExpressionInfo='{OTHER}';
map._layers.states._outFields[0]='OTHER';
map._layers.states.displayField='OTHER';
map.getLayer('states').refresh();

// 將顯示的 Label 欄位改為 STATE_NAME
map._layers.labels._featureLayerInfos[0].LabelExpressionInfo='{STATE_NAME}';
map._layers.states._outFields[0]='STATE_NAME';
map._layers.states.displayField='STATE_NAME';
map.getLayer('states').refresh();

JSBin Demo(http://goo.gl/nU8WeM)
參考文獻︰: ArcGIS API for JavaScript Sandbox 、label layer

星期五, 1月 16, 2015

[DotNet] Convert between SqlGeometry and DbGeometry

 要怎麼轉呢?跟神魔一樣有自動轉珠讓他自己轉轉轉就太好了...(期待)

SqlGeometry DbGeometry 兩者的差異在哪裡?
命名空間: Microsoft.SqlServer.Types 之下的類別 SqlGeometry
而 DbGeometry 則有兩個命名空間
命名空間1:System.Data.Spatial 之下的類別 DbGeometry
命名空間2:System.Data.Entity.Spatial  之下的類別 DbGeometry
不管事哪個命名空間 都有要用的 FromBinary(Byte[]) 、AsBinary 方法!
(擇一使用,看哪個比較適合)



//Convert from SqlGeometry to DbGeometry
SqlGeometry sqlGeo = ...
DbGeometry dbGeo = DbGeometry.FromBinary(sqlGeo.STAsBinary().Buffer);

上面的作法是把 SqlGeometrySTAsBinary() 方法,轉成開放式地理空間協會 (Open Geospatial Consortium,OGC) 已知的二進位 (well-known binary,WKB) 結果。
再利用 命名空間: System 之下的類別 Buffer 轉成陣列(是這樣說嗎?)
透過 DbGeometry 類別  FromBinary 方法再把它轉成 DbGeometry 物件
//Convert from DBGeometry to SqlGeometry
SqlGeometry sqlGeo2 = SqlGeometry.STGeomFromWKB(new SqlBytes(dbGeo.AsBinary()), 0);
上面的作法是把 DbGeometry 用 AsBinary 方法,轉成 Binary 結果。
再利用 命名空間: System.Data.SqlTypes 之下的類別 SqlBytes 轉成 WKB
透過 SqlGeometry  類別  STGeomFromWKB 方法再把它轉成 SqlGeometry  物件


星期三, 1月 14, 2015

[ArcGIS Server API for JavaScript] 套疊 WMS



話說 WMS 要怎麼樣 "套"誤(怎麼老是想用套,框架工具才會是套用,圖層是用疊的)   "疊"上去呢?
ArcGIS Server API for JavaScript 參考 Sample Code:WMS - resource info (http://goo.gl/lbMdfN) 教的程式吧!
照著Sample Code 教學 刻一次吧!

Html:
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <!--The viewport meta tag is used to improve the presentation and behavior of the samples
      on iOS devices-->
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>Map with WMS</title>

    <link rel="stylesheet" href="http://js.arcgis.com/3.12/dijit/themes/claro/claro.css">
    <link rel="stylesheet" href="http://js.arcgis.com/3.12/esri/css/esri.css">
    <script src="http://js.arcgis.com/3.12/"></script>
  </head>
  <body class="claro">
    <div id="content"
         data-dojo-type="dijit.layout.BorderContainer"
         data-dojo-props="design:'headline', gutters:true"
        style="width: 100%; height: 100%; margin: 0;">
      <div id="details"
           data-dojo-type="dijit.layout.ContentPane"
           data-dojo-props="region:'left', splitter:true"
           style="overflow:auto; width:200px;">
      </div>
      <div id="map"
           data-dojo-type="dijit.layout.ContentPane"
           data-dojo-props="region:'center'"
           style="overflow:hidden;">
      </div>
    </div>
  </body>
</html>

說明:
1. 引用 CSS 需插入  
    <link rel="stylesheet" href="http://js.arcgis.com/3.12/dijit/themes/claro/claro.css">
    <link rel="stylesheet" href="http://js.arcgis.com/3.12/esri/css/esri.css">
2. 引用 Javascript 需插入  <script src="http://js.arcgis.com/3.12/"></script> 其中已包含了Dojo框架囉
3. <body> 標籤中 加入 class 樣式定義為 "claro" 如: <body class="claro">
4. 加入 div 區塊 當作地圖區塊 ,如:<div id="map"></div>,
    並且定義:data-dojo-type="dijit.layout.ContentPane"、data-dojo-props="region:'center'";
    data-dojo-type、data-dojo-props這兩個是什麼東西呢?(沒有人會回答我吧!出來Code!遲早要還的!)
    這兩個就把它當成是Dojo 物件 自訂的屬性來看吧!
    根據百度(http://goo.gl/W53NWQ) 找到的說法:data-dojo-props 用來設置 dojo widget 的屬性,
    data-dojo-type 用來設置 dojo widget 的類型
    根據 Dojo 文件(http://goo.gl/Bs2n0I) 說的,dijit/layout/ContentPane 是一個最基本的設計磚塊(是哪招?這年頭要越獄就怕的就是遇到磚...還是把網頁當成蓋房子嗎?難怪叫道場)

CSS:
    html, body, #mapDiv {
      padding: 0;
      margin: 0;
      height: 100%;
    }
說明:
1. 定義 map 區塊的 CSS 樣式

JavaScript:
    var map;
    require([
      'esri/map', 'esri/layers/WMSLayer', 'esri/layers/WMSLayerInfo', 'esri/geometry/Extent',
      'dojo/_base/array', 'dojo/dom', 'dojo/dom-construct', 'dojo/parser',
      'dijit/layout/BorderContainer', 'dijit/layout/ContentPane', 'dojo/domReady!'
    ], function(Map, WMSLayer, WMSLayerInfo, Extent, array, dom, domConst, parser) {
      parser.parse();

      map = new Map('map', {
        basemap: 'streets',
        center: [-96, 37],
        zoom: 4
      });

      var layer1 = new WMSLayerInfo({
        name: '1',
        title: 'Rivers'
      });
      var layer2 = new WMSLayerInfo({
        name: '2',
        title: 'Cities'
      });
      var resourceInfo = {
        extent: new Extent(-126.40869140625, 31.025390625, -109.66552734375, 41.5283203125, {
          wkid: 4326
        }),
        layerInfos: [layer1, layer2]
      };
      var wmsLayer = new WMSLayer('http://sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/WMSServer', {
        resourceInfo: resourceInfo,
        visibleLayers: ['1', '2']
      });
      map.addLayers([wmsLayer]);

      var details = dom.byId('details');
      domConst.place('<b>Layers</b>:', details);
      var ul = domConst.create('ul', null, details);
      array.forEach(wmsLayer.layerInfos, function(layerInfo) {
        domConst.create('li', { innerHTML: layerInfo.title }, ul);
      });
      domConst.place('<b>WMS Version</b>:' + wmsLayer.version + '<br />', details);
    });
說明:
1. 定義 弱型別的變數 map
    require 是 Dojo 方法,利用該方法 載入'esri/map', 'esri/layers/WMSLayer', 'esri/layers/WMSLayerInfo', 'esri/geometry/Extent', 'dojo/_base/array', 'dojo/dom', 'dojo/dom-construct', 'dojo/parser', 'dijit/layout/BorderContainer', 'dijit/layout/ContentPane', 'dojo/domReady!'

2. 載入模組後,需用定義對應的變數來接收該模組,
    Map, WMSLayer, WMSLayerInfo, Extent, array, dom, domConst, parser

3. function(Map) {}  用一個 拋棄式的函數 裡面定義 map 變數,
    透過傳入的 Map 類別可以 宣告成一個 esri/map 的物件
    (new Map 宣告方法 就要查 https://developers.arcgis.com/javascript/jsapi/map-amd.htmlnew Map(divId, options?)  第一個參數是 divId ,
    所以要對應 html 中 要顯示地圖 的 div ID(<div id="map"..略),
    第二個參數是個 Object ,範例中所定義的屬性有 basemap、center、zoom,
    basemap(我稱它叫基本底圖) 它有的選項︰ "streets" , "satellite" , "hybrid", "topo", "gray", "dark-gray", "oceans", "national-geographic", "terrain" 和 "osm";
    center(預設地圖顯示中心點位置):它是一個矩陣,例如: [-96, 37];
    zoom(初始地圖顯示範圍層級):它是一個整數,例如:zoom: 4

4. 定義了兩個 WMSLayerInfo 變數 ,並定義它為 WMSLayerInfo(http://goo.gl/NOnzHh) 物件,
    new WMSLayerInfo(layer) 參數是個 Object ,範例中所定義的屬性有 name 、title
    name (Layer 名稱,要對應WMS名稱或者index);
    title (Layer 標題,可以自行定義)

5. 定義 Object 變數 resourceInfo,目的是之後宣告 wmsLayer 變數時 Option 屬性 Object 會使用到
    其中有兩個屬性 extent、layerInfos,
    而 extent屬性 需定義一個 extent(http://goo.gl/HEZmf8) 物件,
    並定義 座標參考 spatialreference 物件 [標準:spatialreference(http://goo.gl/qgM3sy) ],
    而 layerInfos屬性 需是要給一個 WMSLayerInfo 矩陣,

6. 定義 WMSLayer(http://goo.gl/Rup72F) 變數 wmsLayer,
    new WMSLayer(url, options?) ,其中有兩個屬性 url(WMS 網址) 、options(Object 屬性參數)
    Option 屬性 又是一個 Object ,裡面則用到了兩個屬性 resourceInfo、visibleLayers ,
    resourceInfo 屬性,則是承接 之前所定義的 Object 變數 resourceInfo,
    visibleLayers 屬性,則是定義一個矩陣,矩陣內容釋放要顯示的圖層 name ,例如:['1', '2']
    (這樣寫我以後看的懂嗎?)

7. 把圖層加入 map 語法:map.addLayers([wmsLayer])

8. 之後的程式碼一句話帶過吧!只是為了顯示圖層 title 與 wms 版本

JSBin Demo(http://goo.gl/QQs9oZ)
JSBin Demo(http://goo.gl/Il7MdM) 介接國土測繪中心通用版電子地圖WMS EMAP

另外一種方式 Custom layer - WMS ,改天再來實作吧!


星期四, 1月 08, 2015

[ArcGIS Server API for JavaScript] 小刀牛試 Hello Map!

話說學寫程式首先都會來個 Hello world~

ArcGIS Server API for JavaScript 參考 手冊(http://goo.gl/M1gEVI/) 教學(http://goo.gl/9JpeZO) 第一項 教的建置第一個應用程式就稱它為 Hello Map 吧!

照著手冊教學 刻一次吧!

Html:
<!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>Hello Map</title>
    <link rel="stylesheet" href="http://js.arcgis.com/3.12/esri/css/esri.css">
    <script src="http://js.arcgis.com/3.12/"></script>
  </head>
  <body class="claro">
    <div id="mapDiv"></div>
  </body>
</html>
說明:
1. 引用 CSS 需插入  <link rel="stylesheet" href="http://js.arcgis.com/3.12/esri/css/esri.css">
2. 引用 Javascript 需插入  <script src="http://js.arcgis.com/3.12/"></script> 其中已包含了Dojo框架囉
3. <body> 標籤中 加入 class 樣式定義為 "claro" 如: <body class="claro">
4. 加入 div 區塊 當作地圖區塊 ,如:<div id="mapDiv"></div>

CSS:
    html, body, #mapDiv {
      padding: 0;
      margin: 0;
      height: 100%;
    }
說明:
1. 定義 mapDiv 區塊的 CSS 樣式

JavaScript:
  var map;
  require(["esri/map", "dojo/domReady!"], function(Map) { 
    map = new Map("mapDiv", {
      center: [121, 23],
      zoom: 8,
      basemap: "streets"
    });
  });
說明:
1. 定義 弱型別的變數 map
    .require 是 Dojo 方法,利用該方法 載入 esri/map、dojo/domReady! ,這兩個是什麼東西呢?
    根據 Dojo API參考文件來說,
    / 之前的叫 The main packages of the Dojo Toolkit (這啥米),
    四次元百寶袋中的整人套件組?誤 道場工具箱裡的主要套件嗎?
    / 之後的叫 Common modules and packages of the Dojo Toolkit (這啥米),
    四次元百寶袋中的普及版整人套件組?誤 道場工具箱裡的常用模組嗎?
    那就管它叫為「模組」或者「 四次元空間袋中的整人工具組」「包裹」,
    載入模組後,需用一個 變數來接收該模組,以便於操作 
    例如 function(Map) {}  用一個 拋棄式的函數 裡面定義一個 Map 變數 ,該變數就被成一個 esri/map 類別
2. function(Map) {}  用一個 拋棄式的函數 裡面定義 map 變數,
    透過傳入的 Map 類別可以 宣告成一個 esri/map 的物件
    (new Map 宣告方法 就要查 https://developers.arcgis.com/javascript/jsapi/map-amd.html

JSBin Demo(http://goo.gl/zi8RST)


星期三, 1月 07, 2015

[ArcGIS Server API for JavaScript] 開發相關的參考文獻

對於 ArcGIS Server API for JavaScript 開發首先要了解的東西因該是要先找到資源
整理相關的資源如下:

ESRI:
 Arcgis for Developers: https://developers.arcgis.com/javascript/
 ArcGIS API for JavaScript Overview: https://developers.arcgis.com/javascript/jshelp/
 Build your first application: https://developers.arcgis.com/javascript/jshelp/intro_firstmap_amd.html
 API Reference Overview: https://developers.arcgis.com/javascript/jsapi/
 Sample Code: https://developers.arcgis.com/javascript/jssamples/
 Downloads: https://developers.arcgis.com/en/downloads/ 
 (ArcGIS API for JavaScript Web Optimizer: API、Documentation)

Medern Dojo:
 Demos: http://demos.dojotoolkit.org/demos/
 Documentation: http://dojotoolkit.org/documentation/tutorials/1.8/modern_dojo/
 Tutorials: http://dojotoolkit.org/documentation/
 Reference Guide: http://dojotoolkit.org/reference-guide/1.10/
 API Documentation: http://dojotoolkit.org/api/
 Dojjotoolkit: http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/themes/themeTester.html?theme=claro
 FloatingPane: http://archive.dojotoolkit.org/nightly/dojotoolkit/dojox/layout/tests/test_FloatingPane.html

ESRI 的 Sandbox 有夠難用的,既然立志成為騙錢的偽大 前端(誤) 全端「卜朧共」網頁程式設計師,對於工具來說 jsFiddle、 CodePen 、 jsbin 都比它好用 還支援 Zen Coding

把下列 
  • div#page>div.logo+ul#navigation>li*5>a
  • div#page>div.logo+ul#navigation>li*5>a
  • table#t1.csst1>(tr>th*3)+(tr*4>td*3)
  • table>(thead>tr>th*3)+(tbody>tr*3>td*3)

  • 文字複製貼上至 jsFiddle、 CodePen 、 jsbin 的網站 後按下 TAB ,就可以看到效果~比巴拉松還有效!!!

    ArcGIS Server API for JavaScript 基本功能框架 DEMO