點環域查詢
點環域查詢
允許使用者自訂查詢點位、查詢半徑,以取得指定之主題地圖,在此查詢範圍內所有圖徵之屬性及空間資料,此功能即點環域查詢。使用點環域查詢功能時,亦會運用主題地圖等其餘API功能,可供點環域查詢之主題地圖詳細清單如下方表格。而在以下說明中,將只針對點環域查詢功能介紹,如何引用主題地圖並疊加至圖台上,請參考詳細之程式範例。
var BufferArea = null;
var Query = new TGOS.TEPointBuffer(); //建立TEPointBuffer物件, 準備執行環域查詢使用
function buffer() {
TGOS.TEEvent.addListener(pMap,"click", function(tEvent) {
//建立滑鼠地圖點擊事件監聽器
var queryRequst = { //設定點環域查詢條件, 包含圓心(pt)及半徑(radius)
position: pt,
distance: radius
};
Query.identify(TGOS.TEMapServiceId.SHELTERS, TGOS.TEMapId.SHELTERS,
queryRequst,function(result, status){
//使用方法identify進行點環域查詢, 輸入參數包含欲查詢的服務、欲查詢的圖層、
//點環域參數、坐標系統及查詢後的函式, result及status分別代表查詢結果及查詢狀態
if (status == TGOS.TEBufferStatus.ZERO_RESULTS) { //判斷查詢結果是否為查無結果
alert('此範圍查無結果');
return;
} else { //若查詢產生結果, 則執行以下函式
var attris = result.fieldAttr; //取得圖徵屬性
var pts = result.position; //取得圖徵點位
for (var i = 0; i < pts.length; i++) {
var str = 'ID: ' + attris[i][0] + '; Name: ' + attris[i][1]
+ '; Address: ' + attris[i][4];
//建立迴圈後, 以字串方式組合屬性結果, attris[0]為查詢到的第一個圖徵,
//attris[0][0]為第一個圖徵的第一個屬性, 依此類推
var marker =newTGOS.TEMarker(pMap, pts[i], str);
//在迴圈內建立TGMarker物件,將查詢到的所有主題圖徵繪出
markers.push(marker); //將標記點加入到markers陣列
}
}
});
});
}
function PointBufferClick(){
TGOS.TEEvent.addListener(tg3dEarth, "click", function (e) { //加入滑鼠單擊地圖事件監聽器
if(testFill != null)
{
testFill.setMap(null);
}
if(markers != null)
{
for(var i = 0; i < markers.length; i++)
{
markers[i].setMap(null);
}
}
var Query = new TGOS.TEPointBuffer();
var txtDiv = document.getElementById("msg");
txtDiv.innerHTML = "";
var dis = parseFloat(document.getElementById("dis").value);
var pt = e.point;
var queryRequst = { //設定點環域查詢條件, 包含圓心(pt)及半徑(radius)
position: pt,
distance: dis
};
Query.identify(TGOS.TEMapServiceId.SHELTERS, TGOS.TEMapId.SHELTERS,
queryRequst, TGOS.TECoordSys.EPSG3857, function(result, status){
if (status == TGOS.TEBufferStatus.ZERO_RESULTS) {
alert('此範圍查無結果');
return;
} else {
var attris = result.fieldAttr;
var pts = result.position;
for (var i = 0; i < pts.length; i++) {
var str = 'ID: ' + attris[i][0] + '; Name: ' + attris[i][1]
+ '; Address: ' + attris[i][4];
txtDiv.innerHTML +=str + "<br>";
var marker = new TGOS.TEMarker(tg3dEarth, pts[i], str,null,null);
markers.push(marker);
}
var X = parseFloat(pt.x);
var Y = parseFloat(pt.y);
var R = dis / (Math.cos(Y / 180 * Math.PI) * ((6378137.0 * Math.PI) / 180));
var path = [];
var i = 0
for (var a = 0; a <= 360; a += 1)
{
var xp = X + Math.sin(a * Math.PI / 180.0) * R;
var yp = Y + Math.cos(a * Math.PI / 180.0) * R;
path[i] = new TGOS.TEPoint(xp, yp);
i += 1;
}
var lineStr = new TGOS.TELineString(path);
var ring = new TGOS.TELinearRing(lineStr);
var polygon = new TGOS.TEPolygon([ring]);
testFill = new TGOS.TEFill(tg3dEarth,polygon,{
fillColor: '#AA0088',
fillOpacity: 0.2,
strokeColor: '#FF00FF',
strokeWeight: 5,
strokeOpacity: 0.7
});
tg3dEarth.fitBounds(polygon.getEnvelope());
}
});
});
}
可供點環域查詢之主題地圖服務代碼、圖層代碼以及使用授權類別如下表: