基于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);
}


你可能感兴趣的:(Web,function,sqlserver,旅游,程序开发,classification)