map.addLayer(new OpenLayers.Layer.GML(”GML”, “gml/polygon.xml”));

—————————————————–

OpenLayers.Class.create();//该函数用于讲类初始化,相当于类的构造函数,它调用了类的initial()方法
OpenLayers.Layer.GML.initial();//类初始化

// OpenLayers.Layer.GML继承自 OpenLayers.Layer.Vector,也调用OpenLayers.Layer.Vector
的构造函数
OpenLayers.Layer.Vector.prototype.initialize.apply(this, newArguments);

// OpenLayers.Layer.Vector继承自 OpenLayers.Layer,也调用OpenLayers.Layer的构造函数
OpenLayers.Layer.prototype.initialize.apply(this, arguments);

//OpenLayers.Layer初始化时候会给图层创建id,并创建一个div容器用于装载该图层
this.id = OpenLayers.Util.createUniqueID(this.CLASS_NAME + “_”);
this.div = OpenLayers.Util.createDiv();
this.div = OpenLayers.Util.createDiv();
this.div.style.width = “100%”;
this.div.style.height = “100%”;
this.div.id = this.id;

//并给该div容器绑定事件 EVENT_TYPES: [ “loadstart”, “loadend”, “loadcancel”],OpenLayers.Layer初始化完毕
this.events = new OpenLayers.Events(this, this.div, this.EVENT_TYPES);

//然后回到 OpenLayers.Layer.Vector的初始化中,调用下面的函数通过判断浏览器种类来决定用
那种渲染器
this.assignRenderer();

//回到gml初始化中
//初始化完毕【最后返回到OpenLayers.Class.create()】

///

//调用map.addLayer(layer)

//设置添加的图层的显示顺序
this.setLayerZIndex(layer, this.layers.length);

//有一个叫做 this.layerContainerDiv 的div用来装载所有的图层,这里将把装载该图层的div添加到this.layerContainerDiv 中
this.layerContainerDiv.appendChild(layer.div);

//并将改图层添加到map的layers属性中
this.layers.push(layer);

//设置layer的map属性,让map和layer引用彼此【这是IE引起内存泄露的主要因素之一,不过openlayers
有一套自己的垃圾回收机制控制了这一点】
layer.setMap(this);

//假如该图isBaseLayer,那么将map的 底图设置为该图层
this.setBaseLayer(layer);

//假如不是baselayer那么就作为一般图层对待,将该图层显示在指定的窗口extent,如果没有设置
map的extent属性,地图是显示不出来的
//map.zoomToExtent(new OpenLayers.Bounds(114.24,30.56,114.27,30.59));或者
setCenter()均可以指定extent
layer.moveTo(this.getExtent(), true);

//layer.moveTo()先调用 OpenLayers.Layer.Vector的moveto方法,设定渲染器的显示范围
OpenLayers.Layer.Vector.prototype.moveTo.apply(this, arguments);

//数据还没有加载则layer.moveTo()开始加载数据
this.loadGML();

//this.loadGML()加载数据,并绑定相应的结果处理函数
OpenLayers.loadURL(this.url, null, this, this.requestSuccess, this.requestFailure);

//map.addLayer(layer)中触发 “addlayer” 事件
this.events.triggerEvent(”addlayer”);

///

//OpenLayers.loadURL(this.url, null, this, this.requestSuccess, this.requestFailure);开始加载数据
//假如加载成功则则将结果然会给this.requestSuccess进行处理

//this.requestSuccess(response)解析返回的gml数据
requestSuccess

//用OpenLayers.Format.GML 的read()函数来解析gml数据,解析结果为Geometry对象的集合, this.addFeatures用户将这些地理对象显示出来
var gml = this.format ? new this.format() : new OpenLayers.Format.GML();
this.addFeatures(gml.read(doc));

//##########read#####OpenLayers.Format.GML()########///

#region GML文件解析段

#end region

//##########addFeatures#####OpenLayers.Layer.Vector(),即OpenLayers.Format.GML的父类########///

//addFeatures中调用drawFeature来绘制单个地理对象
this.drawFeature(feature);

\\\\\\\\renderer段\\\\\\\\\\\/

//OpenLayers.Layer.Vector的drawFeature又用来绘制图形,传入的参数是地理对象和绘图样式
this.renderer.drawFeature(feature, style);

//renderer调用自己的drawGeometry方法来绘图
this.drawGeometry(feature.geometry, style, feature.id);

//renderer的drawGeometry函数先判断传入的feature的类型,通过getNodeType()得到
需要创建的vml节点的类型【假定目前renderer为IE】,
//再通过nodeFactory创建vml节点,把改节点加入到root中,root为一个group元素,再调用drawGeometryNode改变vml节点的坐标属性
if ((geometry.CLASS_NAME == “OpenLayers.Geometry.MultiPoint”) ||
(geometry.CLASS_NAME == “OpenLayers.Geometry.MultiLineString”) ||
(geometry.CLASS_NAME == “OpenLayers.Geometry.MultiPolygon”)) {
for (var i = 0; i < geometry.components.length; i++) {
this.drawGeometry(geometry.components[i], style, featureId);
}
return;
};

var nodeType = this.getNodeType(geometry);
var node = this.nodeFactory(geometry.id, nodeType, geometry);
node._featureId = featureId;
node._geometryClass = geometry.CLASS_NAME;
node._style = style;
this.root.appendChild(node);

//now actually draw the node, and style it
this.drawGeometryNode(node, geometry);

附:在renderer初始化的时候OpenLayers.Layer.Elements会创建
this.rendererRoot = this.createRenderRoot();
this.root = this.createRoot();
其中,rendererRoot为一个div,用于装载所有的VML元素,而root为一个group,用于装载目前这个
图层的vml元素,root为rendererRoot的一级子节点

//drawGeometryNode根据传入地理对象的geometry.CLASS_NAME来判断调用点线还是面的绘图
函数还对地理对象进行绘制
this.drawGeometryNode(node, geometry);

openlayers加载gml相关推荐

  1. Openlayers加载离线地图Arcgis瓦片

    文章目录 一.介绍 二.快速入门 一.下载地图瓦片 二.OpenLayers加载离线Arcgis瓦片 一.介绍 OpenLayers 是一个专为Web GIS 客户端开发提供的JavaScript 类 ...

  2. Vue+Openlayers加载Geoserver发布的TileWMS后更换shp数据源的流程

    场景 Vue中使用Openlayers加载Geoserver发布的TileWMS: Vue中使用Openlayers加载Geoserver发布的TileWMS_BADAO_LIUMANG_QIZHI的 ...

  3. Vue中使用Openlayers加载Geoserver发布的TileWMS时单击获取shp文件的坐标信息

    场景 Vue中使用Openlayers加载Geoserver发布的TileWMS: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/ ...

  4. Vue中使用Openlayers加载Geoserver发布的TileWMS

    场景 Openlayers下载与加载geoserver的wms服务显示地图: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/114 ...

  5. Vue中使用Openlayers加载Geoserver发布的ImageWMS

    场景 Openlayers下载与加载geoserver的wms服务显示地图: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/114 ...

  6. Vue中使用Openlayers加载OSM(Open Street Map)显示街道地图

    场景 Openlayers下载与加载geoserver的wms服务显示地图: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/114 ...

  7. WebGIS——Openlayers加载图层

    Openlayers加载图层 一.创建Html文件并在body中放入一个Div作为地图显示的容器 <body><div id="map" class=" ...

  8. vue openlayers 加载高德地图等 gcj02 的图层偏移问题

    vue openlayers 加载高德地图等 gcj02 的图层偏移问题 这个问题是在使用 openlayers 地图引擎加载高德地图或者是谷歌地图都会遇到的问题,所以说呢这篇博文稍微说一下解决办法. ...

  9. OpenLayers 加载天地图模糊的问题 OpenLayers 地图缩放模糊

    openlayers 加载天地图模糊的问题,OpenLayers 地图缩放几次之后模糊 2021年12月20日 纠正模糊原因: 地图加载瓦片实质上还是图片,一般来说是256&256,将一个静态 ...

最新文章

  1. python赋值符号前后的空格_191012 python3关于空格打印、赋值、+=符号的小坑
  2. js平滑滚动到顶部,底部,指定地方
  3. Nginx 配置文件 nginx.conf 详解
  4. 超像素SLIC算法源码阅读
  5. 【算法基础】数据结构导论第六章-查找.pptx
  6. c可以 char* 赋值但是c++不可以_雷佳音的妻子完全可以女团C位出道,这么有气质的女人,谁能不爱...
  7. k8s创建Deployment报错:missing required field “selector“ in io.k8s.api.apps.v1.DeploymentSpec
  8. Javascript定位表单控件的几种方式
  9. Windows 2003 + ISA 2006+单网卡×××配置(3)
  10. python open 函数漏洞_input()函数中的Python漏洞
  11. Linux ---- 安装虚拟机
  12. 【BX学习之软件著作权】 软件著作权的申请
  13. 专利解析|多维建模结合AI识别商品特征的方法
  14. python为什么胶水语言_Python真的什么都可以做,胶水语言可不是白叫的
  15. JSP四大作用域,九大内置对象
  16. hdu 2475 box LCT
  17. First blood
  18. 华为交换机配置mac地址白名单接入
  19. 十个小贴士!帮你节省编程时间、减少挫败感
  20. Element-UI开发指南--动画和组件基础(二)

热门文章

  1. python cerberus Validator参数校验
  2. 【Linux练习生】线程安全
  3. 申宝股票-家居和家电板块大涨
  4. 【Doxygen使用教程】
  5. Istio服务网格进阶①:Istio服务网格核心理论概念
  6. Learning Tone Curves for Local Image Enhancement
  7. 设计模式——黑板模式
  8. 洛谷P1080 [NOIP2012 提高组] 国王游戏
  9. 智工运维定位器之ublox
  10. selenium实现动态网页爬取