您的位置:首页 > 其它

基于Skyline的Web程序开发整理(二)

2011-07-05 17:18 141 查看
简单说一下基于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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: