iMap API 可以讓開發者利用 Javascript 語言,在自己網頁中嵌入Map 電子地圖,同時您也可以隨意的在地圖中新增地標點、顯示訊息視窗、新增線段、新增polygon等,擁有如同 Map 一般的豐富功能。

簡介

  iMap API 為一嵌入式程式,提供您在自已的網頁裡嵌入自已編輯的功能,只要在非商業與營利用途的前題下,都可使用 Map API 來提供地圖服務,但 Map 將保留未來中止授權與在地圖上放置廣告的權利,更完整的使用條件請見使用條款。

使用前需知

 您必須先申請一組授權碼,並在嵌入地圖功能的網頁裡,包含一個指向提供API服務的 <script> Target Link,範例如下: 

<SCRIPT TYPE="text/javascript" SRC="http://api.map.com.tw/js/getAPI.asp?v=1&key=授權碼"></SCRIPT>

您可以在同一個網頁中增加多個iMAP物件,當您在增加一個新的iMAP物件時,必須指定一個網頁元件(通常使用DIV element),iMAP API會自動照該物件的大小將地圖嵌入。

範例目錄

範例

基本(The Basics)  Top

    首先,從建一張地圖開始,您可以看到一開始必須先使用Java Script的方式,將API呼叫進網頁裡。從以下的範例程式,在網頁一開始的時候,先onLoad一個iMAP物件,並設定此張地圖的起始中心位置,並設定地圖圖層落在第N層。其中,使用一網頁元件MapLayer(此範例使用DIV element),並設定高度跟寬度(這會影響地圖呈現的大小)

<HTML>
<HEAD>
<SCRIPT TYPE="text/javascript" SRC="http://api.map.com.tw/js/getAPI.asp?v=1&key=授權碼"></SCRIPT>
<script type="text/javascript">
var map;
function init() {
  map = new iMap(document.getElementById("MapLayer"));
  map.centerMap(new Point(121.52,25.035) ,7 );   //設定地圖初始位置

}
</script>
</HEAD>
<BODY onLoad="init()">
<div id="MapLayer" style="WIDTH: 500px; HEIGHT: 300px; "> </div>
</body>

範例

取得中心點座標(Get Center X Y)  Top

可以取得目前地圖顯示中心點的座標。

 map = new iMap(document.getElementById("MapLayer")); 
 map.centerMap(new Point(121.52,25.035) ,7); 
 var p = new Point()         //New一新pt型態        
 p = map.getCenter();      //取得型態為pt

 x=p.x         //取得座標
 y=p.y      
                      
範例

增加地圖控制項(Adding Controls to the Map)  Top

    若您想要再地圖上加上可以操作的控制列,像是切換地圖影像功能類別,就必需使用到addControl函數及setMapType函數。

-->
函數 功能 
addControl LargeScaleBar:增加圖層控制列
SmallScaleBar:圖層控制列(增、減功能)
MidiumScaleBar:圖層控制列(數字控制)
FunctionControl:框選及測距控制列
  map = new iMap(document.getElementById("MapLayer"));
  map.centerMap(new Point(121.52,25.035) ,7);  
  map.addControl('MapTypeControl');   
  map.addControl('LargeScaleBar'); 
範例1 範例2
監聽事件(Event Listeners)  Top

    此項目必須使用到addListener(obj,event,fun),括弧內的obj為觸發對象,event為觸發事件名稱,fun為觸發後所執行的function,目前提供的Event 事件項目有:click, mouseup, mousedown, mousemove, mousemoveend, scaled, mouseout, mouseover, dblclick, focus

  var iEvent = new Event();
  map = new iMap(document.getElementById("MapLayer"));
  map.centerMap(new Point(121.52,25.035) ,7);
  iEvent.addListener(map,"mouseup", function(){ 
            var clickP=map.getClick(); map.MoveTo(clickP); 

  });
範例1 範例2
訊息視窗(Opening an InfoWindow)  Top

    若您想在地圖上的某一座標或是對某一點、區塊,顯示您想要出現的說明文字,就必須使用到openInfoWindow(pt,content)這個函數。其控制項目有

控制函數 說明
setInfoWindowPos(pt) 將訊息視窗移至pt點。
closeInfoWindow() 隱藏訊息視窗。
showInfoWindow() 顯示訊息視窗。
setInfoWindowOffset(offset) 讓訊息視窗向上移,offset個pixel
setInfoWindowOpacity(Opacity) 設定訊息視窗的透明度。Opacity =100為完全不透明,0為完全透明。

  map = new iMap(document.getElementById("MapLayer"));
  map.centerMap(new Point(121.52,25.035) ,7);
  map.setInfoWindowOpacity(80);
  map.openInfoWindow(new Point(121.52,25.035),"Hello World !!");
範例1 範例2
增加標記(Add Markers Overlay)  Top

    若要在地圖上某個坐標的位置增加地標,可以使用Marker(pt,content,icon)這個函數來建置,圖形為icon, 訊息內容為content,content可為html格式,此外icon可為連結圖片。若icon無指定圖片,則預設圖形為紅點。

    map = new iMap(document.getElementById("MapLayer"));
    map.centerMap(new Point(121.52,25.035) ,7); 
    var p= new Point(); 
    p=map.getCenter(); 
    for(i=0;i<=0.001;i=i+0.001){ 
        content="marker="+i; 
        m=new Marker(new Point((p.x+i),(p.y+i/10)),content);
        map.addOverlay(m); 
    }
範例1 範例2
增加線段(Add Polyline Overlay)  Top

 若您想在地圖上畫線段,並測量距離時,可以使用Polyline(points,color,size,opacity)這個函數,points為point陣列,color為polyline的顏色,size為polyline的寬度,opacity 為polyline的透明度(100 為完全不透明,0為完全透明)。

控制函數 說明
getLength() 取得polyline 的長度。單位為公尺。
setTransFigure(v) 設定是否可以修改polyline的形狀。v=true時,可以修改,v=false時,無法修改。當v=true時,會出現polyline的節點,只要移動節點,polyline形狀就會跟著改變;當v=false時,節點會消失,此時無法做修改。
 

 若您想在地圖上增加一點連結線段,您只需在point陣列裡面,多增一座標即可(有順序性),若您想改變線段顏色,也只需將Polyline裡的color參數做設定即可。

 map = new iMap(document.getElementById("MapLayer"));
 map.centerMap(new Point(121.52,25.035) ,7);
 pl=new Polyline([new Point(121.52,25.035), new Point(121.522,25.038), new Point(121.526,25.034), new Point(121.522,25.031)] , "#FF0030" , 5 , 80); 
 map.addOverlay(pl);
範例1 範例2
增加多邊形範圍(Add Polygon Overlay)  Top

 若您想框選一多邊形範圍,並測量面積時,可使用Polygon(points,color,size,opacity)這個函數來達成。points為point陣列,color為polygon的顏色,size為polygon的寬度,opacity 為polygon 的透明度(100 為完全不透明,0為完全透明)。第一點也是終點。

控制函數 說明
getArea() 取得polygon的面積。單位為平方公尺。
setTransFigure(v) 設定是否可以修改polygon的形狀。v=true時,可以修改,v=false時,無法修改。當v=true時,會出現polygon的節點,只要移動節點,polygon形狀就會跟著改變;當v=false時,節點會消失,此時無法做修改。
 map = new iMap(document.getElementById("MapLayer"));
 map.centerMap(new Point(121.52,25.035) ,7);
 pl=new Polygon([new Point(121.52,25.035), new Point(121.522,25.038), new Point(121.526,25.034), new Point(121.522,25.031)] , "#FF0030" , 2 , 80);
 map.addOverlay(pl);
範例1 範例2
在多邊形範圍上顯示訊息(Display Info Windows Above Overlays)  Top

    若您想在多邊形所框選的範圍內顯示您要顯示的訊息,可以藉由Event事件來達成,將要被觸發的物件,置放於addListener函數裡面,再經由openInfoWindow來顯示訊息視窗

   var iEvent = new Event();
   map = new iMap(document.getElementById("MapLayer"));
   map.centerMap(new Point(121.52,25.035) ,7);
   var pl=new Polygon([new Point(121.52,25.035), new Point(121.522,25.038), new      Point(121.526,25.034), new Point(121.522,25.031)] , "#FF0030" , 2 , 80);
   iEvent.addListener(pl,"click",function(){
          map.openInfoWindow(map.getClick(),"this is a polygon");
   }); 

   map.addOverlay(pl);
範例
修改多邊形範圍(Change Polygon Overlay Shape)  Top

    當您想要修改多邊形框選的範圍時,可以利用setTransFigure來達成目的,若想要停止出現編輯點時,只需將setTransFigure內變數改成False即可。

 map = new iMap(document.getElementById("MapLayer"));
 map.centerMap(new Point(121.52,25.035) ,7);
 pl=new Polygon([new Point(121.52,25.035), new Point(121.522,25.038), new Point(121.526,25.034), new Point(121.522,25.031)] , "#FF0030" , 2 , 80);
 map.addOverlay(pl);
 pl.setTransFigure(true);
範例
滑鼠點擊icon時出現訊息視窗(Add mouse click icon to Opening an inforWindow)  Top

    以下範例,是先將Icon顯示在中心點,然後在Icon上增加一Event Click事件,在Click觸發後,再使用openInfoWindow函數,將訊息視窗跳出。

   var iEvent = new Event()
   map = new iMap(document.getElementById("MapLayer")); 
   map.centerMap(new Point(121.52,25.035) ,7);
   var p=new Point();
   p=map.getCenter();
   PL=new Marker(p,"TestMark","","/sample/Shop.gif"); 
   iEvent.addListener(PL,"click",function(){                //Icon的單擊作用
              map.openInfoWindow(p,"Hello World !!")
   }); 

   map.addOverlay(PL); 
範例
滑鼠移過icon時出現訊息視窗(Add mouse over icon to Opening an inforWindow)  Top

    此範例跟上一個範例的方法類似,只是將Click事件換成滑鼠經過Icon時觸發的反應事件,您可以依照此類的方式,去建置您所想要的地圖功能。

 var iEvent = new Event()
 map = new iMap(document.getElementById("MapLayer")); 
 map.centerMap(new Point(121.52,25.035) ,7);
 var p=new Point();
 p=map.getCenter();
 PL=new Marker(p,"TestMark","","/sample/Shop.gif"); 
 iEvent.addListener(PL,"mouseover",function(){  //當滑鼠經過Icon時顯示訊息視窗
    map.openInfoWindow(p,"Hello World !!")
 }); 

 iEvent.addListener(PL,"mouseout",function(){  //當滑鼠離開Icon時關閉訊息視窗
    map.closeInfoWindow();
 }); 

 map.addOverlay(PL); 
範例
框選  Top

此範例我們加上框選功能,只要拖弋您的滑鼠,就可以拉出框線。

map = new iMap(document.getElementById("MapLayer")); 
map.centerMap(new Point(121.57,25.08),10);
map.addControl('LargeScaleBar');
map.setMapAction(1);  //框選功能

範例

簡易型訊息視窗  Top

 簡易型訊息視窗,提供您在地圖頁上,做更多的顯示運用。例:您可以使用此簡易型訊息視窗,來達成快速瀏覽地圖上地標的資訊。

map = new iMap(document.getElementById("MapLayer")); 
map.centerMap(new Point(121.52,25.035) ,7);
var iEvent=new Event();
b=new Marker(map.getCenter(),"Hello World")
iEvent.addListener(b,"mouseover",function(){b.openTip();});
iEvent.addListener(b,"mouseout",function(){b.closeTip();});
map.addOverlay(b);

範例

除了工具列以外的縮放功能 Top

 您除了可以使用本API工具列所提供的縮放列外,也可以使用ZoomTo(level)、ZoomIn()、ZoomOut()三個函數來達成。

function init() {
        map = new iMap(document.getElementById("MapLayer")); 
        map.centerMap(new Point(121.52,25.035) , 7); 
}
function LevelTo(Level) {
       map.ZoomTo(Level);
}
function AddLevel() {
      map.ZoomIn();
}
function StepLevel() {
      map.ZoomOut();
}

範例

地圖呈現大小  Top

 若您想設定您地圖在頁面上的顯示大小,我們建議您使用此項功能,此功能為我們正規置放地圖大小功能的內建函式。

function init() {
  map = new iMap(document.getElementById("MapLayer")); 
  map.centerMap(new Point(121.57,25.08),10);
  map.resize(800,600);
}

範例

空間搜尋及生活週邊資訊  Top  

 此為提供一定位查詢界面及搜尋圖面上目前範圍之地標物件函式。

map = new iMap(document.getElementById("MapLayer")); 
map.centerMap(new Point(121.57,25.08),10);
map.addControl('LargeScaleBar');

poicontainer=document.getElementById("poilayer") 
var poi = new iInfo(poicontainer,2); //將div物件放置到生活周邊建構式裡「iInfo(物件,版型),版型1為舊有的食衣住行,版型2為直行分類」
poi.setPosition(520,10); //setPosition(x,y), x、y可以設定此物件在div裡面的位置


landmarkcontainer=document.getElementById("landmark") 
landmarklist=document.getElementById("landmarkList") //此為地標查詢後出現的清單
var geo = new iGeoSearch(landmarkcontainer,landmarklist); //將div物件放置到地址、地標、路口查詢建構式裡
geo.setPosition(10,320); //setPosition(x,y), x、y可以設定此物件在div裡面的位置

範例

API 更新
    我們將會持續對 iMAP API 進行功能的增加及修正可能產生的bug與效率的增進,而更新後的 iMAP API 對您所開發的程式無須做任何變動即可套用在更新過後的 API上。

地址查詢、地標搜尋、交叉路口查詢等其他服務

  若您需要 iMap API之地址查詢、地標搜尋或是交叉路口查詢等服務,請先申請Map API授權碼,再用此授權碼來開通您的座標搜尋服務,即可使用提供的函式來進行測試。
其它說明
控制項函數:addControl
addControl MapTypeControl:增加地圖類型控制列
LargeScaleBar:增加圖層控制列
SmallScaleBar:圖層控制列(增、減功能)
MidiumScaleBar:圖層控制列(數字控制)

MapTypeControl:地圖類型控制列

LargeScaleBar:完整縮放控制列

SmallScaleBar:簡易縮放控制列

MidiumScaleBar:數字縮放控制列

疑難排解

如果您使用iMap API所開發的程式無法順利運作,以下提供一些方法可能有助於您解決問題:

   •查看瀏覽器是否有顯示訊息(瀏覽器上所提供的 Javascript Console)
   •使用不同的瀏覽器觀看
   •檢查是否有呼叫Function名稱錯誤的問題
   •檢查是否有字或變數名稱打錯,Javascript 是有區分大小寫的語法
   •檢查函數的使用,是不是有誤或用錯方式

若以上的動作無法解決您的問題,請Mail至我們的服務窗口,我們會盡快協助您解決問題。

備註
 由於iMap API 目前還在增建許多功能,部份功能可能在測試時有未發現的 bug,您可以向我們的服務窗口回報錯誤或提出相關建議,我們會以此改進,並請耐心等待我們將bug修復,以提供您更完整及穩定的iMap API。

全國達康股份有限公司 版權所有  Copyright © 2000-2008 Trend-go.com Inc. All Rights Reserved.