`
love19820823
  • 浏览: 974633 次
文章分类
社区版块
存档分类
最新评论

WebGIS设计与实现原理

 
阅读更多
WebGIS设计与实现原理
褫其华衮,示人本相系列之一
2006-2-18
cheungmine
1 什么是WebGIS
我的定义是:在internet领域内,向WWW服务器请求地图数据或与之相关的操作,从而获得地图并呈现给最终用户的过程。几点共识是:客户端不必安装任何插件(当然必要的浏览器和XML支持是少不了的);服务端动态生成地图(强调这一点,是因为这样的Webgis引擎才符合工业标准。否则只能称为带有地图图片的网站)。符合上述定义的Webgis的优点是显而易见的:
1)地图由服务器动态按需生成,发送给客户端只是最终生成的图片(我的经验是png格式为好),对客户端的要求降到最低。
2)利用服务器的中心控制、监视和审计,保障了数据的安全和实现的一致性。
3)方便部署的特征,使升级和扩展都异常简单。
因此,我希望以后在谈论Webgis的时候,再也不要听到Plugin、ActiveX、Applet之类的字眼。
2 Webgis技术原理
说了一大堆,就要谈到核心实现了。别以为我在这里胡吹海侃,我确实是真的把自己的体会和经验(教训)无偿的奉献给莘莘学子。我的体会是:
1)一种技术,如果太过复杂,就称不上是好技术。比如质能方程E=MC­­*C其简单和优美。所以,我以为宇宙的定律就是简单的规则,当然,多数我们还没发现。
2)一种实现,如果要写一大堆的代码,仍然不是一种好的实现。就比如夸一个人长的美,说一千道一万,不如就2个字:好看。
秉承这个原则,下面介绍我的技术:
1)客户端(IE)采用AJAX,直接调用服务端的Services。
2)服务端编写Web Services,响应客户的请求。
原理就这些,为什么我就不说了,如果你不知道,说明你还需要学啊学啊学。
3 Webgis实现
先说服务端的实现。按上面说的,就是写Web Services(Web服务)。可能目前没有比写Web Services更时髦的了。还有人说Google Web API要代替传统的Win32API。其实这完全是2种计算模式,谁也代替不了谁。许多专家就喜欢炒作,把媒体那一套应用到我们这个技术领域,误导消费者。
其实,若不是浏览器大行其道,Webgis算个啥啊。这社会从来就没公平过,好好的C/S不用,非强迫我们在浏览器里搞啊搞的。没办法,就搞吧,看谁搞得过谁?
Web Services有很多语言可写,什么C#、Java、C++等等等等。需要一套称之为Webgis API的东西。设计这样一套API让AJAX调用。怎么设计呢,我会把我的接口公布出来,供大家参考漫骂。
其实最重要的是服务端的地图生成引擎(引擎就是发动机)。我自己实现了一个(带VVT-i的啊),没有的要自己实现,或者买个现成的(比如MapObjects)。
该说客户端了。AJAX吗,其实就是JavaScript + XMLHttpRequest(微软版本)对象啊。就别用什么Webservices.htc了,虽然是微软写的,还真他妈不好用。我从高人那里抄了一个,改了改,就用上了。看我上篇文章啊,那个是100%的源代码,没错误的啊。
剩下的再说就显得多余了。画个体系结构图吧:
(图象怎么显示不出来??)
WebGIS体系结构图
4 小贴示
看到这里你是不是觉得恶心了,提示就提示干嘛贴示啊。不是有国内北大高人翻译《ATL 技术内幕》非满纸的“控制”。我看了就别扭,国内叫“控件”,这个还比较舒服。翻译的就别提多牵强了。
1)服务端要以多线程(IIS进程)服务请求。
2)地图引擎加载数据,要能够静态和动态2种模式载入。
3)绝对不要想着传矢量的数据,传图片最好,哪怕未来网络带宽提高100倍。
4)写的要绝对健壮,不然把IIS搞瘫了。
5)记得在服务端保持客户状态啊。
5 附录:Webgis WebServices 接口和方法
也许一不小心成了标准呢?其实就是想让读者在做这方面的设计时,有个参考,反面典型也好。我把修改数据方面的API去掉了,太危险了,还是不说出来的好。
// Webgis接口方法说明
// 2006年8月
// ATL Server Webgis Services Created by cheungmine@gmail.com
//////////////////////////////////////////////////////
// 关于MtkWebgisService
//////////////////////////////////////////////////////
// 取得服务相关信息
HRESULT about([out, retval] BSTR *Info);
// 取得服务器日期时间
HRESULT svrtime([out, retval] mtkTime *time);
//////////////////////////////////////////////////////
// 登入与登出, login必须是第1个调用的服务端方法
//////////////////////////////////////////////////////
// 登入系统, 获得用户令牌和全图URL, 以后任何方法调用必须给出令牌
HRESULT login([in] BSTR Username, [in] BSTR Password);
// 登出系统, 注销用户令牌
HRESULT logout();
 
//////////////////////////////////////////////////////
// 基本信息
//////////////////////////////////////////////////////
// 当前MTK Canvas版本
HRESULT version([out, retval] BSTR *Ver);
// 取得全部图层信息, 以XML内联返回
HRESULT mapinfo([out, retval] BSTR *xmlInfo);
// 取得全部图层信息, 返回生成的XML的URL
HRESULT mapxml([out, retval] BSTR *xmlURL);
// 取得图层信息, 以XML内联返回
HRESULT layinfo([in] LONG LayerIndex, [out, retval] BSTR *xmlInfo);
// 取得图形属性信息, 以XML内联返回. 若图层索引为>=MTK_TMPLAYER_INDEX, 则在临时层上
HRESULT shpinfo([in] LONG LayerIndex, [in] LONG fromShapeIndex, [in] LONG fetchCount, [out, retval] BSTR *xmlInfo);
// 取得图形属性信息, 返回生成的XML的URL. 若图层索引为>=MTK_TMPLAYER_INDEX, 则在临时层上
HRESULT shpxml([in] LONG LayerIndex, [in] LONG fromShapeIndex, [in] LONG fetchCount, [out, retval] BSTR *xmlURL);
 
//////////////////////////////////////////////////////
// 地图浏览和点查
//////////////////////////////////////////////////////
// 刷新地图, 取地图imgURL
HRESULT refresh([out] DOUBLE* Scale, [out, retval] BSTR *imgURL);
// 地图控制显示比例
HRESULT scale([out] DOUBLE* minScale, [out] DOUBLE* maxScale);
// 按比例显示地图, 不改变当前地图中心位置
HRESULT zoom([in] DOUBLE Scale);
// 指定视图位置放大或缩小地图, 指定放大缩小的百分比
HRESULT zoomat([in] mtkPoint Pos, [in] SHORT Percent);
// 开窗显示地图, 指定视图上的2点
HRESULT zoomext([in] mtkPoint Pos1, [in] mtkPoint Pos2);
// 开窗显示地图, 指定地图上的2点
HRESULT zoomext2([in] mtkPoint Pt1, [in] mtkPoint Pt2);
// 移动地图, 指定视图上的2点
HRESULT move([in] mtkPoint fromPos, [in] mtkPoint toPos);
// 选中图形对象, 指定视图上的点. 返回对象的sid负值和所在的图层索引和对象信息
HRESULT identify([in] mtkPoint Pos, [out] LONG* _sid, [out] LONG* layId, [out, retval] BSTR* shpInfo);
// 设置图层状态属性, 指定层的索引和状态名称, 状态值
HRESULT setlayer([in] LONG LayerIndex, [in] mtkEnumLayerState State, [in] bool bVal);
// 以指定视图上的点为中心, 定位地图
HRESULT centerat([in] mtkPoint Pos);
// 以指定地图坐标点为中心, 定位地图
HRESULT centerat2([in] mtkPoint Pt);
// 地图翻页, 指定方向Up,Down,Right,Left和页面重叠百分率0%~100%"
HRESULT flip([in] mtkEnumFlip Direction, [in] SHORT Overlap);
// 清除选中的对象
HRESULT clear();
//////////////////////////////////////////////////////
// 地图测量, 视图上的点串
//////////////////////////////////////////////////////
// 地图测量, 返回距离, 面积和地图单位
HRESULT measure([in] mtkPoints PathPoints, [out] DOUBLE* Length, [out] DOUBLE* Area, [out] BSTR* Unit);
// 地图测量, 返回距离, 面积和地图单位
HRESULT measure2([in] BSTR PathString, [out] DOUBLE* Length, [out] DOUBLE* Area, [out] BSTR* Unit);
 
//////////////////////////////////////////////////////
// 坐标变换: 视图(view)与数据(data)之间的正反坐标变换
//////////////////////////////////////////////////////
// 取得地图当前数据坐标范围
HRESULT extent([out] DOUBLE* MinX, [out] DOUBLE* MinY, [out] DOUBLE* MaxX, [out] DOUBLE* MaxY);
// 视图点变换到数据坐标点
HRESULT vp2dp([in] LONG VX, [in] LONG VY, [out] DOUBLE* DX, [out] DOUBLE* DY);
// 数据坐标点变换到视图点
HRESULT dp2vp([in] DOUBLE DX, [in] DOUBLE DY, [out] LONG* VX, [out] LONG* VY);
// 视图点串变换到数据坐标点串
HRESULT vs2ds([in] BSTR VS, [out, retval] BSTR* DS);
// 数据坐标点串变换到视图点串
HRESULT ds2vs([in] BSTR DS, [out, retval] BSTR* VS);
//////////////////////////////////////////////////////
// 空间查询与分析
//////////////////////////////////////////////////////
// 重置过滤器. 清除所有以前设置的过滤器
HRESULT resetFilters();
// 设置过滤器, 可以多次调用此方法以设置多个过滤器, 只要服务端支持多过滤. 返回过滤器总数
HRESULT addFilter([in] mtkFilter Filter, [out, retval] LONG* Count);
// 根据条件查找图形对象, 返回查询到的对象数. 查询结果图层为临时层, 索引为i+MTK_TMPLAYER_INDEX
HRESULT findShapes([in] LONG LayerIndex, [in] BSTR SqlClause, [in] bool UseFilters, [out, retval] LONG* Count);
// 生成缓冲区图形, 返回目标图形sid. 此操作都在跟踪层中
HRESULT bufferShape([in] LONG sid, [in] DOUBLE Distance, [out, retval] LONG* sidDst);
// 将非跟踪层中的图形数据保存到跟踪层中, 返回图形sid
HRESULT trackShape([in] LONG LayerIndex, [in] LONG ShapeIndex, [out, retval] LONG* sid);
//////////////////////////////////////////////////////
// 图形编辑
//////////////////////////////////////////////////////
// 创建新图形对象, 返回图形对象的ID
HRESULT createShape([in] mtkEnumGeometry GType, [out, retval] LONG* sid);
// 向新图形对象中增加视图上的点, 象素坐标
HRESULT addPt([in] LONG sid, [in] mtkPoint Pos);
// 向新图形对象中增加点, 地图坐标
HRESULT addPt2([in] LONG sid, [in] mtkPoint Pt);
// 向图形对象中增加单一属性, 指明列索引0-based, 列值
HRESULT setCol([in] LONG sid, [in] SHORT colId, [in] BSTR colVal);
// 清除指定sid的图形. 绘制的图形都保存在跟踪层中. sid=0全部删除
HRESULT clearShape([in] LONG sid);
分享到:
评论

相关推荐

    GIS毕业论文 -WebGIS的旅游信息系统设计与实现

    GIS 毕业论文 - WebGIS 的旅游信息系统设计与实现 GIS( Geographic Information System,地理信息系统)是一种 ...同时,ArcServer 平台的实现原理也需要考虑到平台的架构、数据存储和管理、用户界面设计等几个方面。

    《WebGis原理与应用开发》 原书加源码

    《WebGIS原理与应用开发》是一本专注于地理信息系统在Web环境中的实现与应用的专业书籍,由刘光编著。WebGIS是将地理信息系统(Geographic Information System)与Web技术相结合,使得用户可以通过互联网访问和操作...

    WebGIS原理与应用开发源代码

    通过学习和实践《WebGIS原理与应用开发》的源代码,读者不仅可以掌握WebGIS的基本原理,还能了解如何将这些原理应用于实际项目中,例如构建在线地图应用、实现空间数据的查询和分析、设计互动式地图等。这有助于提升...

    《WebGIS基础与应用》(课程设计)任务书

    本课程设计旨在通过实际项目操作,让学生掌握WebGIS的基本原理和技术方法,提高学生运用WebGIS解决实际问题的能力。具体目标包括但不限于: 1. **理解WebGIS的基本概念**:掌握WebGIS的基础理论知识,了解WebGIS的...

    WebGIS原理与应用开发源代码(代码和数据)

    本资源“WebGIS原理与应用开发源代码(代码和数据)”是一套完整的WebGIS教程,包含了课程学习所需的源代码和开发数据,非常适合对WebGIS感兴趣或正在学习相关知识的开发者。 首先,了解WebGIS的基本原理,我们需要...

    WebGIS原理与实践-上机实习指导光盘(初稿)

    本资源包是《WebGIS原理与实践》一书的上机实习指导初稿,旨在帮助学习者深入理解WebGIS的核心概念和技术,并提供实践操作的机会。 在WebGIS中,有几个关键的技术要点: 1. **GIS基础**:GIS(Geographic ...

    WebGIS原理与实践PPT8

    综上所述,WebGIS的原理与实践涉及到地理信息的网络化处理、客户端-服务器架构、地图服务的定制和开发,以及不同商业产品的特点和优势。了解这些内容对于理解WebGIS的工作机制和选择适合的解决方案至关重要。

    webGIS_webgis_

    本项目“webGIS_webgis_”旨在为初学者提供一个学习和理解WebGIS基本原理与实现的平台。 在WebGIS系统中,主要涉及以下关键技术点: 1. **HTML/CSS/JavaScript**: 这是构建WebGIS前端界面的基础。HTML用于结构化...

    《WebGIS原理与开发实验》课程教学大纲.docx

    "《WebGIS原理与开发实验》课程教学大纲.docx" WebGIS是指基于Web的GIS( Geographic Information System),它将GIS技术与Web技术结合,提供了一个在线的GIS应用平台。WebGIS的出现改变了传统的GIS应用模式,提供...

    WebGIS原理与实践PPT10

    WebGIS的核心在于将GIS的功能与互联网技术相结合,使得地理信息能够跨越地域限制,广泛应用于城市规划、环境保护、交通管理等多个领域。 在开源WebGIS领域,有着丰富的项目供开发者选择和使用。开源GIS项目遵循特定...

    基于ActiveX控件技术的WebGIS设计原理

    ### 基于ActiveX控件技术的WebGIS设计原理 #### 一、WebGIS概述 WebGIS(Web Geographic Information System)是Web技术应用于GIS(Geographic Information System,地理信息系统)开发的结果。随着网络技术的发展...

    基于WebGIS的数字校园系统的设计与实现

    ### 基于WebGIS的数字校园系统的设计与实现 #### 一、引言 随着地理信息系统(GIS)技术的迅速发展以及互联网在全球范围内的普及,万维网地理信息系统(WebGIS)应运而生,并成为了GIS领域的研究热点之一。WebGIS...

    WebGIS原理与实践PPT9(3-4)

    在提供的PPT文件"WebGIS原理与实践11-9(3).ppt"和"WebGIS原理与实践11-9(4).ppt"中,可能会涵盖WebGIS的更深入技术细节,例如具体的开发框架、GIS服务的部署、WebGIS应用案例分析等内容。通过学习这些材料,学生可以...

    校园WEBGIS开发与实践

    WebGIS是Web技术与地理信息系统相结合的一种方式,它允许用户通过互联网浏览器访问和操作地理数据,实现了地理信息的网络共享和远程服务。 在这一主题中,我们首先会接触到WebGIS的基础概念,包括GIS的基本构成、...

    WebGIS原理与实践PPT9续(3-4)

    本资料"WebGIS原理与实践PPT9续(3-4)"显然是一个关于WebGIS的讲座或课程的补充材料,可能用于深入探讨WebGIS的关键概念和技术。 首先,让我们来看看"WebGIS原理"部分。在这一部分,可能涵盖了WebGIS的核心概念,...

    webGIS教学课件

    每一份PPT可能包含某一主题的详细讲解,例如"WebGIS原理09-2.ppt"可能详细介绍了WebGIS的数据模型和存储方式,而"WebGIS原理09-6.ppt"可能讲解了地图服务的实现和优化。 学习这些课件,不仅能够掌握WebGIS的基本...

    基于WebGIS的安阳交通旅游系统设计与实现.pdf

    "基于WebGIS的安阳交通旅游系统设计与实现" 本资源旨在设计和实现一个基于WebGIS的安阳交通旅游系统,以满足旅游业的信息化需求。该系统采用了ArcIMS作为WebGIS系统的开发平台,用户可以使用浏览器浏览安阳市电子...

    WebGIS原理与实践PPT5

    【WebGIS原理与实践】 WebGIS,即Web地理信息系统,是一种在互联网环境下提供地理信息服务的技术体系。本主题主要探讨WebGIS中的服务器端技术,包括图层控制、GIS查询、信息查询(InfoQuery)、查找(Find)、专题...

    基于ARCIMS的环保WebGIS的设计与实现

    结合JavaBean-JSP-Servlet的MVC设计模式,实现了基于Java技术的WebGIS系统开发—果树病虫害信息发布系统。它是根据WebGIS软件平台ArcIMS4.0的工作原理和体系结构,确定了基于Java连接器ArclMS客户端的开发方案,...

Global site tag (gtag.js) - Google Analytics