用OpenLayers解析GML文件

用OpenLayers解析GML文件不可否认 openlayers 的确是个好东西 尤其是他的事件封装机制更是让人爱不释手 感谢致力于 openlayers 开发的脚本爱好者们 但是作为一个开源的脚本框架 它也存在不少缺陷 GML 解析的低效率就是一个严重的问题 对于一个像美国 states 的 gml 文件 大小约为 300K 左右 有 95 个面对象 所有面对象一共包含 11000 个左右的点 这么一个 gml 文件 不算从 WFS 请求过来的时间 就是

/*显示武汉数据1.2s*/

var hoursStart,hourEnd;//=now.getHours();
var minutesStart,minutesEnd;//=now.getMinutes();
var secondsStart,secondEnd;//=now.getSeconds();
var msStart,msEnd;
function startTime()
{

var now=new Date();
hoursStart=now.getHours();
minutesStart=now.getMinutes();
secondsStart=now.getSeconds();
msStart=now.getMilliseconds();
}
function endTime()
{

var end=new Date();
hoursEnd=end.getHours();
minutesEnd=end.getMinutes();
secondsEnd=end.getSeconds();
msEnd=end.getMilliseconds();
span.innerText+=”\r\n start :”+minutesStart+”:”+secondsStart+”:”+msStart+”\r\nend:”+minutesEnd+”:”+secondsEnd+”:”+msEnd;
}

var point_count=0,poly_count=0,line_count=0,inner=0;
var inner=””; var linearRings_count=0;

//
//http://192.168.1.92:9090/geoserver/wfs?request=getfeature&service=wfs&version=1.0.0&typename=topp:SDE.ONEPOLYGON
var path=”http://192.168.1.92:9090/GeoS_N_user/wfs?request=getfeature&service=wfs&version=1.0.0&typename=topp:SDE.WUHAN”;
//武汉的数据都是小数,而vml不支持小数,所以要显示武汉数据需要把坐标放大
function load()
{

OpenLayers.loadURL(“wuhan.xml”, “”, null, PackCall,onfail);//OpenLayers的Ajax功能我也手动做了点修改
}
function onfail(){alert(“shibai”);}
function PackCall(ret)
{startTime();
AnalyseXML(ret.responseText);endTime();
span.innerText=map.innerHTML;
}
function AnalyseXML(xml)//解决命名空间需要带上
{

var doc=document.createElement(“root”);
doc.innerHTML=xml;
var bound=doc.getElementsByTagName(“boundedBy”)[0].innerText;
ChangeCoordsSYS(bound,”map”);
varfeatures=doc.getElementsByTagName(“featureMember”);
for(var i=0;i
{

var polylines=features[i].getElementsByTagName(“polygonMember”);
if(polylines.length>0)
{

for(var j=0;j {


//poly_count+=1;
varlinearRings=polylines[j].getElementsByTagName(“LinearRing”);
for(var k=0;k { linearRings_count+=1;

varcoords=linearRings[k].innerText;
var coor_arr=coords.split(‘ ‘);
AddPolygon(“vectorGroup”,EnlargeCoords(coords));
//inner+=”\r\n”+poly_count+”:”+coor_arr.length;
//point_count+=coor_arr.length;
}
}
}
}
//document.body.innerText=inner+”\r\r”+point_count;
//alert(document.getElementsByTagName(“polyline”).length+”–“+document.getElementsByTagName(“polyline”)[0].points.value);
//alert(linearRings_count);49
}
var _SCALE=2000;
function ChangeCoordsSYS(bound,mapId)
{

var twoPts=bound.split(‘ ‘);
varpt1s=twoPts[0].split(‘,’),pt2s=twoPts[1].split(‘,’);
document.getElementById(mapId).appendChild(document.createElement(”
“));
vectorGroup.coordorigin.x=pt1s[0]*_SCALE;//1k
vectorGroup.coordorigin.y=pt1s[1]*_SCALE;//1k
vectorGroup.coordsize=(pt2s[0]-pt1s[0])*_SCALE+”,”+(pt2s[1]-pt1s[1])*_SCALE;//1k

}
function EnlargeCoords(coords)
{

var pts=coords.split(‘ ‘);
for(var i=0;i {


pts[i]=EnlargePt(pts[i]);
}
return pts.join(‘ ‘);
}
function EnlargePt(pt)
{

var xy=pt.split(‘,’);
returnparseFloat(xy[0])*_SCALE+”,”+parseFloat(xy[1])*_SCALE;
}
function AddPolygon(group,pointsStr)
{

varnode=document.getElementById(group).appendChild(document.createElement(”

“));

node.appendChild(document.createElement(”

“));


































































































版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210891.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午11:40
下一篇 2026年3月18日 下午11:40


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号