`
jonsamwang
  • 浏览: 36624 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

国内电子地图开源框架mapEasy实现过程

阅读更多

地图实现原理

 

创建一个地图

瓦片:地图组成部分,一个地图信息有多个瓦片拼接而成。

Level :地图显示级别

 

原理:根据地图基本信息来动态加载 img 集合,并把所有图片拼接成一个完整的地图信息。

定义个地图可视化窗口,设置窗口的大小。

根据地图的级别,地图类型来加载对应的瓦片信息(即由一张完成的图片切割而成的小图片的集合),根据可视窗口的大小和定义的中心点来计算需要显示那些瓦片信息,对于超出可视区域的瓦片,不显示。得到瓦片信息集合后,把瓦片信息按规则来拼接在一起,显示成一张完成的图片信息。

 

地图移动

在地图移动过程中记录地图中心点的位置改变。

移动结束后根据中心点位置改变的大小来重新计算加载的瓦片信息。

并调用地图重绘方法来重新生成显示的地图信息。

地图缩放

根据地图的缩放级别来重新计算加载的瓦片信息。并调用地图重绘方法来重新显示地图信息。

原理:假设当前显示的地图 level=2

       a b

       c d

四张图片按这样的排列方式拼接而成。点击放大后 level = 3 ,原理显示图片 a 的区域改变为:

       a1 a2

       a3 a4

四张图片。其他三个区域改变方式相同。(这里的 a1 ~ a4 是由 level=3 的地图图片切割而来的),这样就实现了地图放大的效果。

 

地图 js 功能说明

Map 功能 js 结构如下:

.....

......

 

 

 

 

 

       功能说明:

Action 文件为控制层对象 这里实现对地图中基本操作的控制,如:地图的移动,缩放,地图类型的转换等。

Model 文件为模型定义对象,这里定义了地图中所有使用模型的定义,如:坐标定义,点定义,矩形区域定义,地图对象定义,标注定义,工具定义等。同时实现了对这些模型的基本操作方法。

Widget 文件界面生成对象,扩展工具定义,地图基本方法定义和基本地图工具定义。

Mapbuilder.js 地图创建初始化

MapEvent.js 地图事件定义

BaseAction.js 控制层对象

BaseModel.js 模型对象

BaseWidget.js 界面生成对象

Command.js 事件控制对象

Listener.js 抽象监听对象

ListenerSupport.js 监听对象

Prototype.js   js

Util.js 常用操作方法定义

Js 功能说明:

Mapbuilder.js 地图构建器:

地图构建器对象,对创建地图进行初始化加载。

Include 方法:动态加载 js 文件,如果有新添加的 js 文件统一在此处加载。

MapBuilder 方法:地图构建对象,通过创建一个 MapBuilder 对象来生成一个地图 。其中有以下方法:

outputMap 输出地图信息。

addTool 增加扩展工具信息。

GetMap : 取得地图对象。

 

MapEvent.js 地图事件定义

地图自定义事件,可以加入实现特定功能的事件和方法。

有以下定义方法:

MapEvent. getEventCoord :取得事件触发的坐标。添加标注时通过该方法取得标注在地图上的具体坐标。

MapEvent. addListener 为对象添加监听事件。

Eg :为地图添加右键单击事件

定义事件常量

MapEvent.ONCONTEXTMENU = "event.oncontextmenu" ;

为地图对象添加监听事件

MapEvent.addListener(map, MapEvent.ONCONTEXTMENU , function (e) {

    var coord = MapEvent.getEventCoord(e, map);

   

} );

添加用户自定义事件( MapPaneWidget.js customEvent 方法

if (eventName == MapEvent.ONCONTEXTMENU) {

       mapDiv.oncontextmenu = this .model.events[MapEvent.ONCONTEXTMENU];

}

GeoObject.js 地理信息定义

坐标定义,点定义和矩形区域定义。并实现了相应的操作方法。

MapModel.js 地图对象定义

MapModel :地图模型定义,定义地图的缩放比例,中心区域坐标,地图事件等。

方法:

addOverlay : 添加地图标注信息,参数为地图标注对象( marker )。在地图上添加一个标注可以直接用以下方法实现:

MapModel.addOverlay(new Marker(coord.getPoint(), Marker.LARGE));

                     removeOverlay : 移除单个标注信息(移除指定的标注,参数为标注对象)。

           clearOverlays 清除地图所有标注信息。

MapType :地图类型定义,我们自定义的地图类型继承该方法,并重写 getSrc 方法来获得正确的图片路径。如果要添加一个新的地图类型,可以用以下方法实现:

           function MapMapType() {

      // 继承 maptype

      MapType.apply( this );

      // 重写 getSrc 方法

      this .getSrc = function (level, row, column) {

    var url = "mapdemo\\images\\zoom" +level+ "\\" +level+ "_" +column+ "_" +row+ ".jpg" ;

         return url;

      }

            }

MapModel.mapTypes = new Array();

MapModel.mapTypes.push( new MapMapType());

这里 new MapMapType() 为我们自定义的地图类型。

Zoom : 比例模型定义,定义了地图当前等级,当前所有瓦片集合和边缘瓦片数。

Tile :瓦片定义,定义列,行和地图缩放级别

Overlay.js 地图覆盖物定义

Overlay :地图覆盖物抽象类 ,定义覆盖物区域范围,坐标,显示图形,阴影图形。

Icon 覆盖物显示图标

Marker 标记定义(继承 overlay )。定义了标记的基本信息,我们可以在起初添加新的属性,并实现他的 get set 方法。

Marker.LARGE :定义标记显示图片和阴影图片。

ExttoolsWidget.js 扩展工具类

SliderWidget :滑块工具 参数: model MapModel 对象)。

    定义滑块工具和点击放大 / 缩小时触发事件

sliderMDown :滑块拖动

    实现在地图上按住鼠标左键可以拖动地图。

MarkerWidget 标记定义

    实现对标记信息的添加,对标记信息窗口的显示和隐藏。

    有以下方法:

addMarker :在地图上添加一个标记图片和阴影图片,并给该标记添加触发事 件。我们可以对此方法进行改写。

    showInfoWindow 显示标记信息显示窗口。可以对此方法进行改写

    hideInfoWindown :隐藏标记信息显示窗口。

MapTypeWidget :地图类型定义。可以定义多个不同类型的地图信息。

 

MapPaneWidget.js 地图面板控制,注册了地图的移动,缩放,类型改变和自定义方法事件。定义了地图的输出方法。

Paint :地图界面绘制方法。

设置地图容器的 style 属性,屏蔽右键和全选功能,添加地图移动工具栏,地图类型切换栏和地图 div

propertyChange :监听地图触发事件。

实现了对地图缩放( zoom ),移动( move ),用户自定义事件( event.addlistener )和地图类型变换( maptype )事件的控制。根据不同的事件名来进行对应的处理操作。

customEvent :用户自定义事件。

可以在此处添加用户自定义的事件。

changeMaptype :地图类型改变方法。

方法先移除就的瓦片集合,然后根据新的地图类型来重绘显示的地图。 paintMap ()地图重绘方法。

paintMap :地图重绘方法。

根据新的地图 level ,和中心点位置。来取得所有要显示的瓦片集合(即分割的小图片),对新取得的集合循环输出,在显示的同时判断该瓦片是否在旧的瓦片集合中存在,如果存在则不重新加载。

mapMDown :地图拖动方法。

记录地图中心点的位移,拖动完成后重新输出地图。

ToolsWidget.js   基本地图工具,实现地图的上,下,左,右移动和居中显示。

MapBuilder.js 地图构建对象。

加载地图 js 脚本库。实现地图构建器,和地图的输出。

Include :动态载入地图 js 脚本库文件,如果有新添加的 js 文件统一在此处加载。

MapBuilder :地图构建器,参数: container 为地图容器。

    定义地图的基本信息,并为地图添加相应的操作监听事件。

outputMap :地图输出。根据出入的中心点和地图显示 level 调用地图的 print 方法来输出地图信息。

addTool :添加地图扩展工具,如滑块工具和地图类型变换工具。

getMap :取得地图对象。

 MapEvent.js 自定义事件控制

getEventCoord :取得事件触发的坐标点位置。

addListener :添加用户自定义事件监听。

MapEvent.CLICK :添加用户自定义事件。

    其他类功能说明,请参考对应的 api 文档。

   

.地图使用

1.创建一个 jsp html 页面,在页面添加地图显示 div

< div align = "center" >

    < div id = "newmap" style = "width:800px;height:400px; background :#F2F6FF" " ></ div >

    </ div >

2.导入初始化的 js 文件,样式文件

 

<!-- 加载样式 -->

    < LINK rel = "stylesheet" href = "webep/css/style.css" type = "text/css" >

   

    <!-- 加载地图生成 js 文件 -->

    < script language = "JavaScript" src = "mapdemo/js/Util.js" ></ script >

< script language = "JavaScript" src = "mapdemo/js/map/MapBuilder.js" ></ script >

 

3.自定义地图类型,重写 getsrc 方法,并把新的地图类型添加到 MaoModel mapTypes

// 定义自己的 map 类型

    function MyMapType() {

    // 继承 maptype

    MapType.apply( this );

    // 重写 getSrc 方法

    this .getSrc = function (level, row, column) {

      var url = "mapdemo\\images\\zoom" +level+

 

 

4.设置 MapModel 基本常量值

 

    // 设置地图显示基本信息

    /** 地图坐标系范围 */

    MapModel.bound = new Bound(-180e16, 180e16, -90e16, 90e16);

    /** 第一个缩放等级的瓦片数 */

    MapModel.firstZoomTileNum = 1;

    /** 每层缩放之间的比例参数 */

    MapModel.scalePara = 2;

    /** 瓦片尺寸 */

    MapModel.tileSize = 256;

    /** 最大缩放比例 */

MapModel.maxZoomLevel = 4;

5.定义地图初始化对象,调用 outoutMap 方法输出地图,添加地图缩放移动工具

// 初始化 mapbuilder 对象

    var mymapbuilder = new MapBuilder($( "newmap" ));

    // 输出地图信息

mymapbuilder.outputMap( new Point(10, -20), 3);

// 滑块工具

mymapbuilder.addTool(MapBuilder.TOOL_SLIDERBAR);

 

6.地图类型切换工具

 

// 定义的第二个地图类型

    function MyType1() {

       // 继承 maptype

    MapType.apply( this );

   

    // 添加地图切换图片

    this .enablePic = imgBaseDir + "maptype_1b.gif" ;

        this .disablePic = imgBaseDir + "maptype_1a.gif" ;

       

    // 重写 getSrc 方法

    this .getSrc = function (level, row, column) {

            var url = "mapdemo\\images\\zoom" +level+ "\\" +level+ "_" +row+ "_" +column+ ".jpg" ;

           return url;

        }

    }

 

// 添加第二个地图类型

MapModel.mapTypes.push( new MyType1());

 

// 地图类型工具

mymapbuilder.addTool(MapBuilder.TOOL_MAPTYPE);

7.添加 / 删除标记

 

添加标记:

// 添加一个标记

var newmark = new Marker( new Point(20,-20),Marker.LARGE);

newmark.setInfo( " 您添加了一个新的标记 " );

map.addOverlay(newmark);

删除标记:

Map.removeOverlay(mark); // 删除指定标记信息

8.添加自定义方法

 

ExtToolsWidget.js addMarker 方法中,可以为标注添加自定义的事件

 

 

 

 

3
2
分享到:
评论

相关推荐

    MapEasy

    MapEasy以Google Map的方式实现了基本的GIS功能和简单地物标注等。注意她是一个纯粹的客户端JS库,不需要任何插件,并且与后台数据的获取方式完全分离,你可以在服务器放置简单的图片,也可以在后台架设你喜欢的地图...

    mapEasy 源码

    `mapEasy`是一款基于JavaScript构建的地图开源项目,它为开发者提供了地图应用的二次开发框架。这个项目的核心价值在于其清晰的JS结构代码,使得开发者能够更容易理解和修改源码,以适应自己的需求。尽管它的功能...

    MapEasy开发包

    MapEasy是一款由国内开发者精心打造的JavaScript基础库,专门针对WebGIS(Web地理信息系统)进行设计和实现。在WebGIS领域,它扮演着至关重要的角色,帮助开发者轻松地构建地图应用,提供丰富的地图操作和地理数据...

    MAPEASY源代码

    通过这些资源,GIS专业人士可以深入探究MAPEASY的实现细节,包括地图渲染、数据处理、用户交互等方面。同时,源代码的学习也是一个提升C++和GIS技术的绝佳途径,可以帮助开发者了解如何利用C++来构建高效、可扩展的...

    MapEasy 地图界面开发

    MapEasy是一个基于JavaScript的开源库,它模仿了Google Maps的接口和功能,为开发者提供了一种构建地图应用程序的简便方式。这个库的核心特点是完全在客户端运行,无需任何浏览器插件,支持多种现代浏览器,包括Fire...

    Mapeasy update by wing_tang@msn.com

    JavaScript API是Mapeasy的核心组成部分,通过它可以轻松地在网页上实现交互式地图的创建和定制。 一、Mapeasy更新亮点 1. 性能优化:新版本的Mapeasy着重提升了地图加载速度和渲染效率,使得地图在大规模数据展示...

    mapeasy 源码

    `mapeasy` 是一个开源的、轻量级的 JavaScript 库,主要用于地图的交互与可视化。这个库主要适用于网页开发,它提供了易于使用的 API,使得开发者能够快速地在网页上创建交互式地图,进行地理数据的展示和分析。`...

    mapeasy案例+教程

    1、滑动zoom的提前放大效果 ...3、Power By MapEasy 4、坐标系可自定义 5、利用ajax,判断如果tile的图片不存在,返回一个找不到图片的信息 6、考虑平滑移动的设计架构 7、普通矩形(非正方型)的支持

    mapeasy完整gis功能的例子

    mapeasy完整gis功能的例子.放大 缩小 拉框 量距离 等等

    webgis完整功能例子-MapEasy

    5. **服务发布**:MapEasy允许用户将自己的地图服务发布到互联网,供他人访问,实现地图资源共享。 6. **数据可视化**:通过图例、颜色编码、热力图等方式,MapEasy能够生动展示地理数据,辅助决策分析。 二、...

    MapEasy技术文档(瓦片计算原理)

    MapEasy 是一种基于Web的GIS(地理信息系统)技术,它通过将地图分割成多个小的图像块,也就是“瓦片”,来实现地图的高效显示和缩放。瓦片计算原理是MapEasy的核心技术之一,主要涉及到row(行)、column(列)和...

    mapeasy切图程序

    mapeasy简化了这一过程,使得非程序员也能轻松进行切图操作。 该程序可能包含以下特点: 1. **用户友好的界面**:mapeasy通常会提供直观的图形用户界面,使得用户可以轻松上传设计稿,然后通过简单的拖放或选择...

    轻量级瓦片式WebGIS,完整例子

    MapEasy实现瓦片地图的方式主要包括以下几个关键步骤: 1. **地图投影**:地图数据通常以某种投影方式表示,如Web Mercator,这是在线地图最常用的一种投影,因为它适合于全球范围的显示且易于计算。 2. **瓦片...

    mapeasyAPI 文档资料

    `mapeasy` 是一个专为地图处理和地理信息系统设计的JavaScript库,它提供了丰富的API接口,使得开发者能够轻松地在网页中集成地图功能,实现地图的显示、标注、缩放、平移等操作。这份"mapeasy API 文档资料"是针对...

    图片切割工具V1.0

    mapeasy是一款地图操作的开源库,它为开发者提供了丰富的地图处理功能,包括地图的加载、显示、标注等。在本工具中,mapeasy被巧妙地整合,使得用户不仅可以切割图片,还可以对切割后的图片进行地图相关的操作,这...

    基于Ajax和ArcEngine的WebGIS系统的设计和实现

    MapEasy提供了一套成熟且易于集成的API,可以高效处理地图数据,同时与Ajax技术相结合,实现了地图的快速显示与交互。 #### 四、切片技术的应用 系统采用的切片技术是提升WebGIS性能的关键。切片技术将地图按预...

    框架的介绍

    它通常包括前端页面脚本库,如ArcGIS API for JavaScript、ArcGIS API for Flex和SuperMap IClient(商业版本)以及OpenLayers、OpenScale和MapEasy(开源版本)。WebGIS前端主要负责数据展示、查询和简单的空间分析...

    暗黑2 1.13战网工具

    6. **PvPGN-1.8.5-0-Win32-MySQL-5.1.31-BIN.zip**:PvPGN是一个开源的战网模拟器,允许玩家创建自己的服务器来运行暴雪的游戏,如暗黑破坏神2。这里包含的是Windows 32位版本,且集成了MySQL数据库,用于存储玩家...

    一个赣州GIS例子,功能很全

    首先,这个例子可能包含了地图数据处理、空间分析、数据库管理、用户界面设计等多个关键模块。地图数据处理涉及地形图、卫星图像、人口分布等多源数据的整合,通过坐标系统转换,确保数据的精确性。空间分析是GIS的...

Global site tag (gtag.js) - Google Analytics