環域選取範圍

環域選取範圍

 

在本範例中,我們將使用環域的方式來進行統計資料篩選,再使用篩選出的統計資料來繪製統計
地圖。

 

環域範圍定義:

統計地圖API支援的環域方式包含點環域、線環域以及面環域三種類型。無論使用何種環域類
型,皆需要設定兩項參數:環域中心幾何圖形及半徑。環域中心幾何圖形需要使用WKT字串定
義,如下面範例所示:

點:POINT(294764 2784543)

折線:LINESTRING(294764 2784543, 295558 2783882, 295677 2783604)

面:POLYGON(294764 2784543, 295558 2783882, 295677 2783604, 294764 2784543)

以幾何中心搭配單位為公尺的半徑進行設定,即可定義一個環域範圍。如setStatData ()函式所
示:

 

function setStatData(dataObj) {

     var time = document.getElementById("sTime").value;

     dataObj.option.timeOpts.time = [time];

     dataObj.dataSet[0].fieldsId = getMultiOpts(document.getElementById("sField"));

     var ptList = document.getElementById("pWKT").value.split("@");      //取得環域中心幾何WKT字串

     var pts = [];  //建立空陣列

     for (var i = 0; i < ptList.length; i++) {

          pts.push(ptList[i]);  //將環域中心幾何WKT字串匯入陣列中

     }

     dataObj.select.bufferOpts = null;

     dataObj.select.bufferOpts = {

          wkts: pts,          //設定環域幾何中心

          radius: parseFloat(document.getElementById("radius").value)      //設定環域半徑

     }

}

 

設定環域中心圖形:

本範例是以TGOS MAP API所提供的線段繪製工具,將使用者自行手會得到的線段轉換成WKT
字串後,再將該字串作為統計地圖API的環域中心幾何圖形使用。首先要先建立TGOS的繪圖管
理器,並指定繪圖樣式為線段。

 

var dm = new TGOS.TGDrawing();        //宣告繪圖管理器物件

dm.setOptions({

     drawingControl: true,  //顯示繪圖管理器

     drawingControlOptions: {

          position: TGOS.TGControlPosition.BOTTOM_RIGHT,

          drawingModes: [TGOS.TGOverlayType.LINESTRING]      //啟用線段繪圖方式

     },

     polylineOptions: {               //設定線段顯示樣式

          strokeWeight: 3,

          strokeColor: '#00aaaa',

          strokeOpacity: 0.7

     }

});

dm.setMap(tgosMap);    //建立繪圖管理器

 

接著於TGOS MAP介面上建立一事件監聽器,監聽線段繪製完成的事件,並在線段繪製完成時
執行下列程式碼,將線段的幾何特徵寫為WKT格式,供後續統計地圖API設定環域範圍時使
用。

 

TGOS.TGEvent.addListener(dm, "linestring_complete",function (e) {

     if (tmpTGLine == null)

          tmpTGLine = e.overlay;

     else {

          tmpTGLine.setMap(null);

          tmpTGLine = e.overlay;

     }

 

     var lineStr = "LINESTRING ("

     for (var i = 0; i < tmpTGLine.getPath().path.length; i++) {

          lineStr += tmpTGLine.getPath().path[i].x + " " + tmpTGLine.getPath().path[i].y;

 

          if (i < (tmpTGLine.getPath().path.length - 1))

               lineStr += ",";

     }

     lineStr += ")";

 

     document.getElementById("pWKT").value = lineStr;

});

 

 

 

回到上方