上萹介紹了 [ArcGIS Server API for JavaScript] 地圖中加入比例尺 Scalebar 與中文化,接下來介紹鷹眼圖 overviewMap 吧,
口白:
流動的水沒有形狀,漂流的風找不到蹤跡,任何案件的 Coding 都取決於心
唯一看透真相的是,外表看是卜朧共,智慧卻低於常人的 名卜朧共 刻爛
(謎之音:把 Code 刻到爛簡稱刻爛)
Music:
#表升半音 []表高八度
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 5 4 3 4 2 6 4 5 [2] [1] #6 6 5 6
4 3 2 6 4 2 3 #6 6 5 4 5 4 5 6 4 3 2 4 3 2 4 2 6 4 5 [2] #6 6 5 6
口白:
刻爛:真相只有一個!
延續了前篇 [ArcGIS Server API for JavaScript] 地圖中加入比例尺 Scalebar 與中文化 ,
這次是在這篇的基礎上加入了 Overview
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">
<link href="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.css" rel="stylesheet" type="text/css"></link>
<script src="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.js" type="text/javascript">
</script>
<title>Map with Overview</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" expr:class='"loading" + data:blog.mobileClass' onload='prettyPrint();'>
<!-- MenuBar div#navMenu -->
<div data-dojo-type="dijit/MenuBar" id="navMenu">
<div data-dojo-type="dijit/PopupMenuBarItem">
<span>地圖</span>
<div data-dojo-type="dijit/DropDownMenu" id="mapMenu">
<div data-dojo-type="dijit/MenuItem" data-dojo-props="onClick:function(){alert('地圖操作')}">地圖操作</div>
</div>
</div>
</div>
<!-- MenuBar div#navMenu -->
<div data-dojo-type="dijit/layout/BorderContainer"
data-dojo-props="design:'headline', gutters:false"
style="width: 100%; height: 97%; margin:0; ">
<div id="mapDiv"
data-dojo-type="dijit/layout/ContentPane"
data-dojo-props="region:'center'"
style="padding:0">
</div>
</div>
</body>
</html>
說明:1. 引用 CSS:claro.css、esri.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"> 為了中文化排版被擠壓 修改 CSS
2. 引用 Javascript 需插入 <script src="http://js.arcgis.com/3.12/"></script> 其中已包含了Dojo框架囉
3. <body> 標籤中 加入 class 樣式定義為 "claro" 如: <body class="claro">
4. 加入 div 區塊 當作 MenuBar,如:<div data-dojo-type="dijit/MenuBar" id="navMenu"></div>
5. 加入 div 區塊 當作 PopupMenuBarItem,將該物件放在 MenuBar Div 區塊內 如:
<div data-dojo-type="dijit/PopupMenuBarItem">
</div>
給該選單名稱,則是在 PopupMenuBarItem div 區塊 內加入 <span>地圖</span> 來定義
加入 div 區塊 當作 DropDownMenu,將該物件放在 PopupMenuBarItem Div 區塊內 如:
<div data-dojo-type="dijit/DropDownMenu" id="mapMenu">
</div>
加入 div 區塊 當作 MenuItem,將該物件放在 DropDownMenu Div 區塊內 如:
<div data-dojo-type="dijit/MenuItem" data-dojo-props="onClick:function(){alert('地圖操作')}">地圖操作</div>
6. 加入 div 區塊 當作地圖區塊,如:<div id="mapDiv"></div>
CSS:
.esriScalebarLabel.esriScalebarLineLabel.esriScalebarSecondNumber {
font-size: 11px;
position: absolute;
width: 50%;
text-align: center;
color: #666666;
font: Verdana;
font-weight: bolder;
height: 5px;
top: -1px;
}
html, body, #mapDiv {
padding: 0;
margin: 0;
height: 100%;
}
說明:1. 定義 mapDiv 區塊的 CSS 樣式
2. 中文化 排版被擠壓 .esriScalebarLabel.esriScalebarLineLabel.esriScalebarSecondNumber 調整width 改成 50%
JavaScript:
var map;
require([
"esri/map",
"dojo/parser",
// Modules referenced by the parser
"dijit/DropDownMenu",
"dijit/MenuBar",
"dijit/MenuBarItem",
"dijit/MenuItem",
"dijit/PopupMenuBarItem",
"esri/dijit/OverviewMap", // 加入 Overview Package
"esri/dijit/Scalebar", // 加入 Scalebar Package
"dojo/domReady!"
], function (
Map,
parser,
DropDownMenu,
MenuBar,
MenuBarItem,
MenuItem,
PopupMenuBarItem,
OverviewMap, // 加入 OverviewMap 承接 對應 "esri/dijit/OverviewMap" OverviewMap Package 變數
Scalebar // 加入 Scalebar 承接 對應 "esri/dijit/Scalebar" Scalebar Package 變數
)
{
parser.parse();
// 中文化 S
//console.log(esri.bundle.widgets.scalebar);
esri.bundle.widgets.scalebar = { ft: "英呎", km: "公里", mi: "英里", m: "公尺" }; // 目前無作用
window.esri.dijit.Scalebar.prototype.localStrings.km = '公里';
window.esri.dijit.Scalebar.prototype.localStrings.m = '公尺';
window.esri.dijit.Scalebar.prototype.localStrings.mi = '英里';
window.esri.dijit.Scalebar.prototype.localStrings.ft = '英呎';
//console.log(domStyle.getComputedStyle(dojo.query('.esriScalebarLabel.esriScalebarLineLabel.esriScalebarSecondNumber')).width);
//domStyle.set(dojo.query('.esriScalebarLabel.esriScalebarLineLabel.esriScalebarSecondNumber'), "width", "50%");
/*
esri.css
修改 .esriScalebarLabel.esriScalebarLineLabel.esriScalebarSecondNumber
width:10% 改 width:50%
*/
//console.log(esri.bundle.widgets.scalebar);
// 中文化 E
map = new Map("mapDiv",
{
center: [121, 23.5],
zoom: 8,
basemap: "streets"
});
// 加入 OverviewMap 地圖上顯示鷹眼 開始
var overviewMapDijit = new OverviewMap({
map: map,
attachTo: "bottom-right",
visible: true
});
overviewMapDijit.startup();
// 加入 OverviewMap 地圖上顯示鷹眼 結束
// 加入 scalebar 地圖上顯示比例尺 開始
var scalebar = new Scalebar({
map: map,
// "dual" displays both miles and kilmometers
// "english" is the default, which displays miles
// use "metric" for kilometers
scalebarUnit: "dual"
});
scalebar.hide();
scalebar.show();
// 加入 scalebar 地圖上顯示比例尺 結束
});
說明:1. 定義 弱型別的變數 map
.require 是 Dojo 方法,利用該方法,
載入 esri/map、dojo/parser、dijit/DropDownMenu、MenuBar、MenuBarItem、MenuItem、PopupMenuBarItem、esri/dijit/Scalebar、dojo/domReady!
根據 Dojo API 參考文件來說,
/ 之前的叫 The main packages of the Dojo Toolkit,
/ 之後的叫 Common modules and packages of the Dojo Toolkit,
那就叫它為「模組」
載入模組後,需用一個 變數來接收該模組,以便於操作
例如 function(Map) {} 用一個 拋棄式的函數,
裡面定義變數: Map、parser、DropDownMenu、MenuBar、MenuBarItem、MenuItem、PopupMenuBarItem、Scalebar,
該變數就被設成相對印的類別。
2. function(Map...略...) {} 用一個 拋棄式的函數 裡面定義 map 變數,
透過傳入的 Map 類別可以 宣告成一個 esri/map 的物件,其他載入的亦同方式
parser.parse() 主要是將 dom 轉換成 dijit 物件或是 widget
(new Map 宣告方法 就要查 https://developers.arcgis.com/javascript/jsapi/map-amd.html )
定義 弱型別的變數 overviewMapDijit 並將他 建立成 esri/dijit/OverviewMap 物件
(new overview 宣告方法 就要查 https://developers.arcgis.com/javascript/jsapi/overviewmap-amd.html" )
widget overviewmap 範例 )
new OverviewMap(params, srcNodeRef)
其中 params 包含的屬性有 attachTo、baseLayer、map、visible 先來間單說明一下,
attachTo 是 Overview DOM 物件顯示位置設定 "top-right","bottom-right","bottom-left","top-left" 預設值為 "top-right",
baseLayer 是 Overview DOM 物件顯示參考圖層設定,
我們可以從一個 Map 物件中定義某一特定圖層作為 Overview 基本顯示圖層。
map 是 Overview DOM 物件顯示參考 Map 設定。
visible 屬性可以定義 Overview DOM 物件顯示與否。
定義 弱型別的變數 scalebar 並將他 建立成 esri/dijit/Scalebar 物件
(new Scalebar 宣告方法 就要查 https://developers.arcgis.com/javascript/jsapi/scalebar-amd.html )
widget scalebar 範例
JSBin Demo(http://goo.gl/WbXNXd)參考文獻︰
overview
widget overviewmap 範例
沒有留言 :
張貼留言