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. CC2540开发板学习笔记(六)——AD控制(自带温度计)
  2. Eclipes的使用小技巧
  3. vue 公用页面引用_关于vue全局引用公共的js和公共的组件的折腾
  4. 【数据结构与算法】之深入解析图的拓扑排序
  5. 如何学习Linux性能优化?
  6. leetcode 725. Split Linked List in Parts | 725. 分隔链表(Java)
  7. 我的Go语言学习之旅七:创建一个GUI窗体
  8. 蛋疼的中文编码及其计算机编码历史
  9. Can't process attribute android:fillColor=@color/gray,添加vector属性报错解决方法
  10. 可以让你少奋斗十年的工作经验
  11. mysql到mysqli转变表_利用mysql和mysqli取得mysql的所有数据库和库中的所有表
  12. c语言 段位,C语言 段位
  13. git安装 perl ubuntu_ubuntu下安装git
  14. 如何设置计算机网共享文件夹,局域网内如何设置共享文件夹呢
  15. 2018-2019-2 网络对抗技术 20165328 Exp4 恶意代码分析
  16. Android 中文字体的设置方法和使用技巧
  17. Cooliris – 优雅的照片浏览工具[iOS/Android]
  18. Android 腾讯信鸽集成
  19. iMindMap手绘思维导图软件免费版
  20. 屏蔽搜狗输入法快捷键

热门文章

  1. WEB——07JDBC
  2. C++ 文件的随机读写
  3. 北京华为HCIE认证里的数通深入学习QOS流量整形令牌桶机制和规则-ielab网络实验室
  4. 荣耀6plus android6.0,荣耀6PLUS升级安卓6.0(emui4.0)感受
  5. 关于ANCII和UNICODE
  6. python 浮点数类型
  7. 京东CPS商品推广接入流程
  8. 北京超级计算机中心,超级计算机“元”上线 北京超云中心正式服役
  9. Ubuntu 20.04安装R和Rstudio--记录安装过程和踩过的坑
  10. 命令行测试BT,WIFI,Sensor工作状态