複合式定位

API使用範例:複合式定位

 

情境假設:

使用者可藉由TGLocate()功能,輸入地名關鍵字方式進行搜尋並定位,或是進一步指定某一縣市及鄉鎮來縮小搜尋範圍,使定位功能更便利化。複合式定位功能查詢邏輯是藉由字串判別、坐標格式判別以及地址關鍵字判別,進行不同類型之定位。定位結果包含定位點坐標、查詢結果字串、定位類型、所在行政區(坐標定位無)、地址組成(僅限地指定位)、定位結果總數、定位結果頁數等資訊,供使用者進行利用。另外也可以指定查詢中心,讓定位結果依據與中心之距離進行排序。

 

TGOS MAP API建置方式:

 

1. 初始化地圖:
    首先宣告一個TGOnlineMap( )物件,在網頁上建立一個地圖,並選擇座標系統。
                  
function main() {

            mapDiv = document.getElementById("TGMap");

            map = new TGOS.TGOnlineMap(mapDiv, coordSys);

            var coordSys = TGOS.TGCoordSys.EPSG3857;

            tgLocate = new TGOS.TGLocate();

            info = new TGOS.TGInfoWindow();

               }

2. 建立控制欄位:
    建立一個控制欄位,以便進行複合式定位的關鍵字輸入與範圍等條件查詢。
                  
.panel

                  {

                    position: absolute;

                    left: 0px;

                    top: 0px;

                    margin: 16px;

                    margin-left: 64px;

                    background-color: snow;

                    padding: 5px;

                    border: 1px solid #000000;

                    box-shadow: 2px 2px 4px #606060;

                  }

                  html, body, #TGMap

                  {

                    width: 100%;

                    height: 100%;

                    margin: 0;

                    }

       

2. 複合式定位

2.1 複合式定位功能設定

    使用者可依查詢需求輸入關鍵字,系統將依輸入內容進行搜尋並定位,找出符合關鍵字內容之地點。

                  //complexLocate

                  function locate() {

                  //取得 Y

            var cx = parseFloat(document.querySelector("#centerX").value);

            var cy = parseFloat(document.querySelector("#centerY").value);

                  //設定中心點坐標

            var center = new TGOS.TGPoint(cx, cy);

                  //TGLocate 定位請求的設定

            var request = {

            geometryInfo: document.querySelector("#geometryInfo").checked,

            requestText: document.querySelector("#requestText").value,

            pageNumber: parseInt(document.querySelector("#page-number").value),

            county: document.querySelector("#county").value,

            town: document.querySelector("#town").value

            }

                  //判斷取得的X & Y 是否有數值

            if (!isNaN(cx) && !isNaN(cy)) {

                var center = new TGOS.TGPoint(cx, cy);

                          //設定查詢所在位置,若此屬性有設定則回傳結果會依照與查詢位置的距離排序。

                request.center = center;

            }

                  //綜合定位要求

            tgLocate.complexLocate(request, coordSys,function (results, status) {

            console.log(arguments);

            if (status !== TGOS.TGLocatorStatus.OK && status !==

            TGOS.TGLocatorStatus.TOO_MANY_RESULTS) {

                    alert(status);

                    return;

                }

                          //markers 陣列中存在 marker 先於圖台中清除,後將 markers 陣列清空

                if (markers) {

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

                        markers[i].setMap(null);

                    }

                    markers = [];

                }

                          //確定 markers 陣列清空後,設定新取得的 Marker  Markers 陣列中

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

                    var re = results[i];

                    if (re.geometry) {

                        var marker = newTGOS.TGMarker(map, re.geometry.location);

                                          //設定MarkerTitle

                        marker.setTitle(re.name);

                                          //設定標記點註解

                        marker.annotation = re;

                                          //設定Marker點擊事件

                        TGOS.TGEvent.addListener(marker,"click"function (e) {

                                                  //設定InfoWindow內容

                            info.setContent(this.annotation.county + this.annotation.town + this.annotation.name + " [" + this.annotation.type + "]");

                            info.setPosition(this.position);

                            info.open(map);

                        })

                        markers.push(marker);

                    }

                }

            });

        }

 

2.2 圖標顯示資訊

    系統將根據查詢的結果,將圖標放置於圖台上,點擊該圖標即可顯示該位置之資訊如所在縣市、鄉鎮及其位置之詳細名稱。

                  //Marker InfoWindow 範例

                  functionbindMarkerInfoWindow(markers) {

            markers.forEach(function (marker) {

                  //加入Marker Click事件

              TGOS.TGEvent.addListener(marker, "click",function (e) {

                  //設定IndoWindow 內容

                info.setContent(this.annotation.county + this.annotation.town +

                  this.annotation.name);

                info.setPosition(this.position);

                info.open(map);

                        })

                    });

         }

                 

3. 設定查詢中心點

    透過查詢中心點功能,使用者先於控制欄位點選查詢中心點,再點選地圖上任意位置即可獲得該位置之XY座標,並以該中心點為起點,將搜尋結果離中心點由近至遠排列並回覆給使用者。

                // Set ordering center

                  function addCenter() {

                  //設定一次性點擊事件

                TGOS.TGEvent.addListenerOnce(map,"click"function (e) {

                  //取得點擊圖面座標位置

              document.querySelector("#centerX").value = e.point.x;

              document.querySelector("#centerY").value = e.point.y;

           })

         }

 

回到上方