问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

webgis中为什么加入两个地图功能后出错

发布网友 发布时间:2022-05-31 15:03

我来回答

1个回答

热心网友 时间:2023-10-17 13:38

一开始看到OpenLayers,就有一个问题。就是它作为WebGIS的前端,通俗地说,是“显示”地图的。那么,它显示的地图是什么,是怎么显示的,又是怎么实现的?——暂且把这个问题叫做地图表现。我觉得最关键的就是Map类,把这个类分析清楚了,问题就解决了一大半了。
  前面第一回里说过怎么实例化一个地图,怎么向地图里加图层加控件。其实,地图是这样的,它就像一个容器,可以盛东西。要分析它光理解这些还不够,我们要知道这个容器是怎么做出来的,及具体都有什么功能。
  Map类有两个常量:Z_INDEX_BASE和EVENT_TYPES,不说了,可顾名而思其意。再看它定义的一些属性:div(The element that contains the map)、baseLayer(The currently selected base layer)、events(An events object that handles all events on the map)。是这样,web页的div通过以id或name的形式获得map对象,然后layers和control在加载到map上,表现为地图。顺便说一句,控件control和事件event是相关联的,这以后会说。
 OpenLayers.Map类提供了两种实例化方式,举例来看:
[代码]js代码:
 // create a map with default options in an element with the id "map1"
var map = new OpenLayers.Map("map1");

// create a map with non-default options in an element with id "map2"
 //Optional object with properties to tag onto the map.
var options = {
maxExtent: new OpenLayers.Bounds(-200000, -200000, 200000, 200000),
maxResolution: 156543,
units: 'meters',
projection: "EPSG:41001"
};
var map = new OpenLayers.Map("map2", options);
 OpenLayers.Map类实现的函数APIMethod是分组的,比如Layer Functions、Control Functions、Popup Functions、Container Div Functions、Zoom, Center, Pan Functions、Layer Options、Baselayer Functions、Zooming Functions、Translation Functions。其中,最关键的是Layer Functions和Control Functions,因为就是Layer对象和Control对象构成了map的主体。下面从每组函数中挑选出一两个来,看看具体实现过程。
  Layer Functions:
就看addLayer函数吧,下面的addLayers就是调用的它,代码如下:
[代码]js代码:
addLayer: function (layer) {
for(var i=0; i < this.layers.length; i++) {
if (this.layers[i] == layer) {
var msg = "You tried to add the layer: " + layer.name +
" to the map, but it has already been added";
OpenLayers.Console.warn(msg);
return false;
}
}
layer.div.style.overflow = "";
this.setLayerZIndex(layer, this.layers.length);
if (layer.isFixed) {
this.viewPortDiv.appendChild(layer.div);
} else {
this.layerContainerDiv.appendChild(layer.div);
}
this.layers.push(layer);
layer.setMap(this);
if (layer.isBaseLayer) {
if (this.baseLayer == null) {
// set the first baselaye we add as the baselayer
this.setBaseLayer(layer);
} else {
layer.setVisibility(false);
}
} else {
layer.redraw();
}
this.events.triggerEvent("addlayer");
}
可以看到其中涉及到layer的一些方法,下一回具体介绍OpenLayers. Layer类。
[代码]js代码:
 Control Functions:
addControl: function (control, px) {
this.controls.push(control);
this.addControlToMap(control, px);
}
可以看出,添加控件的过程是由controls.Push()和addControlToMap()两个函数共同完成的。
[代码]js代码:
addControlToMap: function (control, px) {
// If a control doesn't have a div at this point, it belongs in the
// viewport.
control.outsideViewport = (control.div != null);
control.setMap(this);
var div = control.draw(px);
if (div) {
if(!control.outsideViewport) {
div.style.zIndex = this.Z_INDEX_BASE['Control'] +
this.controls.length;
this.viewPortDiv.appendChild( div );
}
}
}

Popup Functions:这组函数和上两组函数相似,是在地图上添加或删除Popup 对象。
  Zoom, Center, Pan Functions:
[代码]js代码:
   //Allows user to pan by a value of screen pixels
   pan: function(dx, dy) {
// getCenter
var centerPx = this.getViewPortPxFromLonLat(this.getCenter());
// adjust
var newCenterPx = centerPx.add(dx, dy);

// only call setCenter if there has been a change
if (!newCenterPx.equals(centerPx)) {
var newCenterLonLat = this.getLonLatFromViewPortPx(newCenterPx);
this.setCenter(newCenterLonLat);
}
}

Zooming Functions:
这里就看看放大缩小函数吧。
zoomIn: function() {
this.zoomTo(this.getZoom() + 1);
}
zoomOut: function() {
this.zoomTo(this.getZoom() - 1);
}
显然,zoomIn和zoomOut都使用了getZoom方法,放大就是让zoom加1,缩小减1。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
wps字体颜色改不了怎么办 玩lol我想走体格极端蛮王全攻击的那种符文怎么加求高手赐教 ,感激不... ...觉得不会玩,求高手赐教,个人觉得钱不够买装备,发育慢 ...加技能点,可以通地狱的,我玩的是1.11的,只为单机,求高手赐教... ...只有R技能的AD加成较高,为什么选AD呢,请高手赐教 lol小丑什么打法好(我现在用的是物攻流)出装也说说~请高手赐教~... 北京首都医科大附属附属复兴医院门诊部地址 首都医科大学附属医院首都医科大学附属复兴医院 北京复兴医院规模 求海贼王动画中所有红发香克斯的出镜 中国软件统计 夏天穿皮鞋会有脚气吗 国家统计局下载下来的文件扩展名为PDF的文件要什么软件才能打开? 为什么穿了一天皮鞋就得脚气了 国家统计局软件为什么用分时/批处理操作系统 穿鞋子有脚气,不痒不痛不掉皮,应该是汗臭味,请问怎么可以根治? 除了在国家统计局官网上面查年度数据,还可以在那些网站上查年度数据? 每月国家统计局都有的报告出来,网上哪里有这些数据? 国家统计局用啥统计软件 穿上鞋子脚就有脚气往上飘,不是汗脚,脱掉鞋子又没臭,为什么啊,同学都在嫌臭!脚也很好,没有什么的, 统计局用什么软件好 有没有一款软件可以随时看国家统计局的任何最新数据? 木兰诗中的成语扑朔迷离的出处是什么求解答 成语“扑朔迷离”出自《木兰诗》,其原句是什么 &quot;扑朔迷离&quot;是出自哪一部书&quot;晋书,木兰辞,史记,左传 扑朔迷离出自哪一首词? 扑朔迷离是何意?出自于哪? 今夕何夕冯夕重伤是哪一集 怎样把图片左下角的箭头去掉 兴业银行信用卡还款日 我是11号的账单日,然后23号有消费。那我应该什么时候还款? 6s用百度输入法为什么没了表情快捷键 手术后出现低氧血症分期之lpo英文缩写有何含义 如何开发自己的电子地图系统 web版 单机或联网 新帝豪1.5T向上手动版真实油耗是多少 动物实验问题--血液,高手进 新帝豪,1.5向上版,你们的真实油耗多少 生精素片的睾丸SOD浓度与LPO含量关系 生精素片的生精素片临床应用总结 地震中如何逃离? 股票k线图中出现黑三兵后再是一个倒锤子 巨星科技(002444)大家帮忙看看这个股票怎么样呢? 被称为“花中四君子”的是哪几个? 公务员领准考证的入口在哪里? 宿迁天之丽传媒有限公司怎么样? 魔兽世界天之舞任务哪里交? 天之骄子 天之骄子可以指美丽天使吗 佳衣舍文胸好还是天簌之丽文胸好 谁能告诉我什么是“天垂丽象” 含有天的成语