遥感影像图如何导入webgis系统中

遥感影像图如何导入webgis系统中,第1张

遥感影像图导入webgis系统中使用ImageWorks模块中的useImageFile导入。使用File、Utility、file、export-to选择目标文件夹,输入保存图像的名称,选择保存的格式,选择输出的格式为PIX:PCIDSK,将左栏中的项加入到右侧,导出即可。

随着Internet技术的不断发展和人们对地理信息系统(GIS)需求的日益增长,利用Internet在Web上发布空间数据,为用户提供空间数据浏览、查询和分析的功能,已成为地理信息系统(GIS)发展的必然趋势。于是,基于Internet技术的地理信息系统———WEBGIS就应运而生。

WEBGIS是一个将地理信息处理和地理信息分布于Web计算平台进行的网络化GIS系统,它是面向对象软件构件技术、信息互 *** 作技术、网络技术发展的产物。系统采用ARCGISServer作为WEBGIS支撑平台实现基础地理空间数据和地质空间数据的网络发布。

1.栅格WEBGIS技术

“栅格WEBGIS”(Grid WEBGIS)这一概念和产品是对传统Web地图服务方式的一种革命。启用这个名称,可谓是一语双关:就是提供地理底图的方式来讲,再也不是传统的方式———服务器端将矢量地图临时生成栅格图发给客户端,而是事先生成好栅格图,用户请求时不必做任何处理就可以即时发给客户端就客户端的显示方式来讲,摒弃了传统的一张地图的显示方式,客户端采用多幅小图拼接的方式显示,总体看起来像是小图片填充一个大的栅格的效果。

预先制作好所要发布的地理底图、遥感影像不同缩放比例下的静态图像存放于服务器端,待实际发布时根据缩放比例在不同级别图像之间进行切换。这种技术大大提高了地图的Web浏览速度。

2.Web服务器端技术

Web服务器端主要由两部分组成,即IIS(Internet Information Server)和WEBGIS服务器(包括ArcIMS组件、InternetGIS站点设计向导程序Wizard及面向城市地质Web应用的扩展组件)。

其中,IIS主要负责接收普通的用户请求,当其需要空间数据时则向WEBGIS服务器发出请求,WEBGIS服务器接收到浏览器端的请求后,利用ArcIMS组件和城市地质Web应用扩展组件的功能,进行处理、分析、计算等如果需要数据服务器的数据,则由WEBGIS服务器向数据服务器发出请求。

3.Web客户端相关技术

包括IITML、客户端脚本语言、VML(矢量可标记语言)、XML、DOM(文档对象模型)、CSS(层叠样式表)及Ajax(Asynchronous JavaScript and XML的缩写),这些技术的综合运用大大扩展了系统功能,大幅提高了系统响应速度。

一开始看到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=0i <this.layers.lengthi++) {

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。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11613281.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存