基於Skyline的Web程序開發整理(二)

簡單說一下基於Skyline的在Web程序中怎麼實現查詢吧

Skyline主要是爲程序提供地圖服務,一般我們會在遙感或者三維地形圖上疊加一些面狀或者點的屬性,如房屋或者區域範圍的劃分信息等等。往往程序中都需要對滿足一定條件的對象進行高亮顯示,或者讓地圖聚焦到那裏。這時候其實只需要去遍歷已加載的對象,找出滿足條件的即可。

程序如下:

//遍歷指定圖層
function TraverseLayer(layerName)
{
    //IInformationTree是地圖的圖層列表
    //layerName是要查詢的圖層名稱,如地圖上疊加了一個叫"旅遊區.shp"的圖層,那麼layerName就是"旅遊區.shp"
   // itemId是對應的圖層編號,Skyline裏對每一個對象都有一個ID號,獲得該ID號就可以對對象進行一系列操作
    var itemId = IInformationTree.FindItem(layerName);
   //獲取該圖層下的第一個子節點
   //GetNextItem的第二個參數11,表示取子節點
   var childId=IInformationTree.GetNextItem(itemId,11);   
   //遍歷所有子節點
   while(childId!=0)
   {       
      //根據Id獲取對象
       var oChild=IInformationTree.GetObject(childId); 
      //獲取該對象的所有屬性值,是以XML的形式返回的,如<村名>XXX</村名><面積>56</面積>......          
       var xml=oChild.ClientData;
       // 從返回的屬性值語句中,提取需要的屬性
       var name1=GetValueFromXml(xml,"村名");  
       //獲取下一結點
       childId=IInformationTree.GetNextItem(childId,13);    
    }
}


通過這個函數,可以在遍歷的過程中,查詢滿足條件的對象。

當要遍歷的對象比較少的時候,很方便。但是一旦對象多了,遍歷起來速度就很慢。


比如說,我們現在要對一個土地利用類型的圖層進行查詢。該圖層爲SHP類型,由很多PolyGon組成,大概有幾萬條數據。每個Polygon對象,又具有名字、土地類型、面積等屬性。查詢的時候,需要查出滿足條件的對象高亮顯示,同時又產生一個面積等數據的統計表格。採用上面的方法大概要用幾分鐘才能完成,這樣的速度肯定是不行的。

另一種方法,是將圖層的對象屬性值,全都拷到SQLserver裏去,需要查詢對象的時候,將請求發送給服務器,由後臺來處理,返回所需的數據。

而對於對象的高亮顯示,則採用Skyline的對於圖層對象的SetValue方法。這種方法相比起來速度就快得多了

//高亮指定圖層的部分對象
function HighLightObj()
{
   //獲取圖層 
   var itemId = IInformationTree.FindItem("2010年.shp");

    var classStr = "<Classification FuncType=\"0\"><Class>" + 
               "<Condition><(\"[村名]\"=\"金魚橋\" Or \"[村名]\"=\"沈家橋\") And\"[土地類型]\"=\"居民點\" ></Condition>" +
               "<Value>4080ff</Value>" +
               "</Class>" + "<DefaultValue>ffffff</DefaultValue>"  +
               "</Classification>";

    IInformationTree.GetLayer(itemId).SetFeature();
    IInformationTree.GetLayer(itemId).SetValue("Line Color",1,classStr);
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章