论文部分内容阅读
【摘 要】随着计算机、互联网技术的不断发展和深化,电子地图的应用也渐渐地呈现出多样化、多元化的发展模式,从普通的B/S模式快捷服务到高端、模块化的二次开发应用,电子地图的发展给我们的工作和生活带来多诸多便利,同时也带来诸多问题。本文从电子地图的应用模式谈起,结合GOOGLE地图与.net框架,从web服务应用的角度研究其应用特点及若干常见问题及分析。
【关键词】GOOGLE地图 NET应用
一、电子地图的应用模式及领域分析
纵观国内外电子地图技术的发展,以美国的ESRI(美国环境系统研究所公司)的ARCGIS、和MAPINFO公司为首的一批世界较大的地理信息系统技术提供商为全球各个领域的用户提供着可伸缩的,应用全面的GIS平台。国内也有像SUPERMAP以及武汉中地数码等公司提供的GIS服务也在国内GIS应用领域逐渐兴起。而现今的应用软件平台开发以高效、敏捷开发为其特色之一。电子地图在诸多领域的应用也是同样。以上提到的诸多国内外地图服务提供商提供的地图控件主要面向地图服务、数据服务以及高级的分析服务等方面,服务部署比较复杂、成本较高,适应于大型应用系统的GIS模块化专业开发。而现在很多GIS应用领域有不少是在以网站为主的电子商务、政务平台或是交通、房产交易等行业门户网站平台。在这些整体造价较低的应用平台上使用大型专业GIS控件显然是不合适的、经济上也是不允许的。在此种背景下,一些公共地图服务提供商(例如GOOGLE、百度、高德等)提供的免费B/S地图服务最为实用,常用功能也基本满足,是大多数行业网站的首选。
二、GOOGLE地图开发模式
GOOGLEF地图以其发展最早、专业性较强、免费等特点在先期受到电子地图用户的青睐,只要在GOOGLE官方网站上注册一个用户,即可获取一个key序列号,通过在网站开发平台的前台脚本文件中嵌入含有src地址及序列号的代码,即可以免费获取地图服务应用。
考虑到现行国内的网络MTU及带宽的因素, GOOGLE地图每刷新一次大概需要2-3秒(也可能更长,由网络带宽及速度决定)的时间。所以我们只能在无刷新模式下获取地图数据并加载应用。目前流行的做法是应用AJAX技术(异步JavaScript和XML)在后台注册AjaxPro.AjaxMethod方法,先从数据库获取数据并组合成约定格式的字符串,交由AJAX传递到前台,最后由JAVASCRIPT拆分后传递给页面,呈现给用户。传递过程中的数据格式也可用较近流行的JSON数据格式解析,从而实现较高的数据传递效率。
三、GOOGLE地图结合.NET平台开发常见问题及分析
(一)海量地图标识的载入与显示
很多电子地图的应用少不了地图标识的读取与显示,拿房产交易网来说,一个城市内的小区数量大多数以千为单位,数据量较大。根据笔者的应用实践,觉得可以从两个方面入手来提升标识的载入速度:一是在指定的比例尺内显示。地图在比例尺很大的情况下,如果全部显示标识,那响应速度恐怕是用户难以接受的。同时,全部标识堆积在一起显示,对用户来说意义也不大。如果在指定的显示级别(放大到可以看到某区域主要元素例如街道、单位、商铺的时候)再显示则不失为一个较好的提升用户体验和提高响应效率的方法。此种方法可以对GLatLng对象使用show()或是hide()方法来实现。笔者在应用中发现,即使大量标识存放在内存中,如果用hide()方法在某个显示级别将标识隐藏,由于系统少了对标识重新计算位置和标记的负担,用户在操作地图进行诸如测量面积、缓冲分析时响应速度会提高很多,基本上不影响用户体验;二是随着地图可见范围的变化而重新请求数据。当前用户在可见比例尺下需要显示的标识可以使用addOverlay(markers[i])先行载入显示,同时给每一个载入的标识使用布尔变量FLAG来标识其载入状态。这样,当用户再次放大、缩小、拖动地图时,先依次检查经纬度位置在当前视野范围内的所有标识的FLAG是否为false,如果是,则进行addOverlay(markers[i])载入且更改其标志位,否则不做处理(因其已经载入并显示在当前视野内了,如果载入又不在当前视野,则隐藏标识即可)。这样,用户经常查看的地图区域内,在前几次操作中便很可能在不影响用户操作响应的情况下已经将标识全部载入,后续操作由于标识已经全部在内存里并且已经载入地图中更不会影响响应速度,继而达到了从用户初次打开地图至操作结束都不会出现由于数据载入而影响操作的情况。
(二)标识信息窗口的数据存储和载入
用户使用地图的主要目的之一是点击了某个标识后显示出的详细信息,这个信息可以包括文字、图片、视频等形式的信息。通用情況下,会使用html标记的字符串来显示并加载。但是在海量标识的情况下,将全部标识信息的html字符串在加载地图标识时通过GEvent.addListener(x, "click", function())的方法添加事件监听是可以达到事件响应的效果的。但是,正常情况下人们会想到,如果在点击某个标识后再添加此事件,应该是最不影响用户体验的方式,但由于其事件监听是必须随着标识的添加和确定的。经笔者验证,在点击标识后再添加事件的方式是行不通的,原因很简单,标识的点击事件都还没有添加,点击后根本不会有任何响应,事件又如何添加?所以,笔者认为,最好的方法应该是在上述”海量地图标识的载入与显示”叙述中每载入一个标识时添加事件监听是最理想的时机,结果可以达到事件响应的目的又不会影响用户体验和操作。
参考文献:
[1]江宽,Google API开发详解[J] 北京电子工业出版社,2008
[2]拉尔森,面向服务的AJAX架构模式与应用开发 人民邮电出版社,2011
[3]柳伯斯,HTML5程序设计(第2版)人民邮电出版社,2012
作者简介:班瑞,男,(1981),本科,河南省郑州市人,现任职于郑州恒正电子科技有限公司,郑州大学信息工程学院工程硕士(在职,软件工程方向)。
【关键词】GOOGLE地图 NET应用
一、电子地图的应用模式及领域分析
纵观国内外电子地图技术的发展,以美国的ESRI(美国环境系统研究所公司)的ARCGIS、和MAPINFO公司为首的一批世界较大的地理信息系统技术提供商为全球各个领域的用户提供着可伸缩的,应用全面的GIS平台。国内也有像SUPERMAP以及武汉中地数码等公司提供的GIS服务也在国内GIS应用领域逐渐兴起。而现今的应用软件平台开发以高效、敏捷开发为其特色之一。电子地图在诸多领域的应用也是同样。以上提到的诸多国内外地图服务提供商提供的地图控件主要面向地图服务、数据服务以及高级的分析服务等方面,服务部署比较复杂、成本较高,适应于大型应用系统的GIS模块化专业开发。而现在很多GIS应用领域有不少是在以网站为主的电子商务、政务平台或是交通、房产交易等行业门户网站平台。在这些整体造价较低的应用平台上使用大型专业GIS控件显然是不合适的、经济上也是不允许的。在此种背景下,一些公共地图服务提供商(例如GOOGLE、百度、高德等)提供的免费B/S地图服务最为实用,常用功能也基本满足,是大多数行业网站的首选。
二、GOOGLE地图开发模式
GOOGLEF地图以其发展最早、专业性较强、免费等特点在先期受到电子地图用户的青睐,只要在GOOGLE官方网站上注册一个用户,即可获取一个key序列号,通过在网站开发平台的前台脚本文件中嵌入含有src地址及序列号的代码,即可以免费获取地图服务应用。
考虑到现行国内的网络MTU及带宽的因素, GOOGLE地图每刷新一次大概需要2-3秒(也可能更长,由网络带宽及速度决定)的时间。所以我们只能在无刷新模式下获取地图数据并加载应用。目前流行的做法是应用AJAX技术(异步JavaScript和XML)在后台注册AjaxPro.AjaxMethod方法,先从数据库获取数据并组合成约定格式的字符串,交由AJAX传递到前台,最后由JAVASCRIPT拆分后传递给页面,呈现给用户。传递过程中的数据格式也可用较近流行的JSON数据格式解析,从而实现较高的数据传递效率。
三、GOOGLE地图结合.NET平台开发常见问题及分析
(一)海量地图标识的载入与显示
很多电子地图的应用少不了地图标识的读取与显示,拿房产交易网来说,一个城市内的小区数量大多数以千为单位,数据量较大。根据笔者的应用实践,觉得可以从两个方面入手来提升标识的载入速度:一是在指定的比例尺内显示。地图在比例尺很大的情况下,如果全部显示标识,那响应速度恐怕是用户难以接受的。同时,全部标识堆积在一起显示,对用户来说意义也不大。如果在指定的显示级别(放大到可以看到某区域主要元素例如街道、单位、商铺的时候)再显示则不失为一个较好的提升用户体验和提高响应效率的方法。此种方法可以对GLatLng对象使用show()或是hide()方法来实现。笔者在应用中发现,即使大量标识存放在内存中,如果用hide()方法在某个显示级别将标识隐藏,由于系统少了对标识重新计算位置和标记的负担,用户在操作地图进行诸如测量面积、缓冲分析时响应速度会提高很多,基本上不影响用户体验;二是随着地图可见范围的变化而重新请求数据。当前用户在可见比例尺下需要显示的标识可以使用addOverlay(markers[i])先行载入显示,同时给每一个载入的标识使用布尔变量FLAG来标识其载入状态。这样,当用户再次放大、缩小、拖动地图时,先依次检查经纬度位置在当前视野范围内的所有标识的FLAG是否为false,如果是,则进行addOverlay(markers[i])载入且更改其标志位,否则不做处理(因其已经载入并显示在当前视野内了,如果载入又不在当前视野,则隐藏标识即可)。这样,用户经常查看的地图区域内,在前几次操作中便很可能在不影响用户操作响应的情况下已经将标识全部载入,后续操作由于标识已经全部在内存里并且已经载入地图中更不会影响响应速度,继而达到了从用户初次打开地图至操作结束都不会出现由于数据载入而影响操作的情况。
(二)标识信息窗口的数据存储和载入
用户使用地图的主要目的之一是点击了某个标识后显示出的详细信息,这个信息可以包括文字、图片、视频等形式的信息。通用情況下,会使用html标记的字符串来显示并加载。但是在海量标识的情况下,将全部标识信息的html字符串在加载地图标识时通过GEvent.addListener(x, "click", function())的方法添加事件监听是可以达到事件响应的效果的。但是,正常情况下人们会想到,如果在点击某个标识后再添加此事件,应该是最不影响用户体验的方式,但由于其事件监听是必须随着标识的添加和确定的。经笔者验证,在点击标识后再添加事件的方式是行不通的,原因很简单,标识的点击事件都还没有添加,点击后根本不会有任何响应,事件又如何添加?所以,笔者认为,最好的方法应该是在上述”海量地图标识的载入与显示”叙述中每载入一个标识时添加事件监听是最理想的时机,结果可以达到事件响应的目的又不会影响用户体验和操作。
参考文献:
[1]江宽,Google API开发详解[J] 北京电子工业出版社,2008
[2]拉尔森,面向服务的AJAX架构模式与应用开发 人民邮电出版社,2011
[3]柳伯斯,HTML5程序设计(第2版)人民邮电出版社,2012
作者简介:班瑞,男,(1981),本科,河南省郑州市人,现任职于郑州恒正电子科技有限公司,郑州大学信息工程学院工程硕士(在职,软件工程方向)。