怎么会去搞一个离线调试包呢,为什么不直接在线调试呢?其实,主要是因为我用了大半年的免费无线被加密了,从此我就开始了我的断网生活,但又想搞点Google Maps API玩玩,没有网络就不能使用Google Maps API开发了吗?就不能本地脱机离线调试吗?我不甘心。于是就产生了这个离线调试代码包,其实简单的来说,就是将Google Maps API封装的那些JS下载到本地,然后就可以在离线的状态下进行本地调试了。测试了几个晚上,也不能说我的代码包中的JS代码已经下载全,但是至少在本地调试一些marker和poly等还是OK的,代码包中附带了Google提供的三个例子,最后一个放大镜的例子是蛮没有意思的不建议看(主要是因为本地没有任何地图,全是抱歉找不到这个缩放区域,所以看不出任何的效果),但另外两个例子是在本地完全可以运行的,一个是地理知识考题,一个是标点画线得到距离。但是我在测试本地调用kml的时候没有成功,虽然我也已经加载了kmlapi的js文件,这一点可能需要继续研究一下。但是对于mark、poly、tip等等都是OK的,至少example里就能看出效果来。我还没有怎么用,也没有测试过太多的函数,如果后期发现问题那么以后再来修正吧。
下载地址:GoogleMapsAPI_OfflineDebugPack.rar
那么我们来说说如何得到这个离线调试包,授人以鱼不如授人以渔,当然这里也很简单算不上什么授渔。首先,当然是去Google获取域名的key了,这个简单的道理不用多说了。然后把该页面中说的简单调用代码完整的保存成html文件,打开这个文件我们就可以看到Google Map了,一个最简单的调用就完成了。一般要想得到别人的东西首先肯定是保存这个页面,没错,我也是这么做的,然后就得到了一个maps文件,其实也就是下载了Gmap的调用文件,地址:http://maps.google.com/maps?file=api&v=2&key=ABQIAAAALnobdtcQBfcYCnVSCwRHOxS79ylobW1eCJiHSW2SS5sQtpAV3RTgS5_aqQLZwCkEn_OAeso4797XXA,直接通过浏览器也是可以下载到这个文件的,这个是我127.0.0.1的域名所得到的key。将maps文件改名成maps_my.js文件,然后将script调用的上面带有key的地址换成maps_my.js,重新运行html,发现OK可以运行,并且没有任何问题,但是仅仅依靠这个maps_my.js文件肯定是不可行的,因为这个js文件又在内部调用了很多的js文件,而Google很厉害的就给你仅仅下载了这么一个js,其余的js都是通过maps_my.js文件中的js再去调用远程的js,但是你却看不到任何的js文件的明码地址,这其实是有点可恶的。如果仅仅通过maps_my.js文件离线调用,那么你的运行就仅仅是一个图片样子的内容,无法做任何的操作也看不懂是什么东西。那么我们接下来就是要分析maps_my.js了。
为了去掉烦人的网站验证,我们首先去开刀Gmap的key认证吧。找到那个alert,就在下面没几行的位置,并且中文提示那么的好找,而GValidateKey函数其实就是最后的验证,验证不通过就alert了,那么最简单的肯定是要验证通过,将GValidateKey函数前的表示不等的感叹号去掉,这样就不验证了,至少不会跳出烦人的key注册对话框了,因为我的域名错了反而是让他认证通过,而正确的域名反而不通过。此点在Google了一下以后有个台湾的网友对此做过一个简单的分析,也是讲如何去掉验证的,不过我想我的这个方法并不是什么正确的方法,因为仅仅将不等于改成等于来免除alert,而网站的访问是依旧的,就是说域名肯定会返回Google去验证key,只是错误的域名反而通过了验证。由此我在想,Google本身对网站有多少万的访问请求限制,那么通过这样的方法,是否可以免去这个限制呢,这样你的域名就可以超量访问Google的地图服务器了。虽然我想是如此,但感觉Google应该不会那么简单。对于此,如果有朋友不想验证域名key的,可以用此方法尝试看看。
继续分析maps_my.js文件,有两个非常显眼的main.js文件,分别位于http://maps.google.com/intl/zh-CN_ALL/mapfiles/140g/maps2/main.js和http://maps.google.com/intl/zh-CN_ALL/mapfiles/140g/maps2.api/main.js,我想这两个应该是主要的对js再调用的文件,下载下来让他们到本地进行调试,发现竟然也能通过,看来这两个main.js调用了Google绝对路径的js文件,为了找到这些绝对路径的js文件,打开Firefox使用FireBug来查看(FireBug确实是非常优秀的查看HTML代码的工具,清晰明了)。首先看到的是这样的一个js文件:http://maps.google.com/intl/zh-CN_ALL/mapfiles/140g/maps2.api/mod_jslinker.js,下载OK。然后又有一个http://maps.google.com/cat_js/intl/zh-CN_ALL/mapfiles/140g/maps2.api/%7Bmod_drag,mod_controls%7D.js文件,竟然会取名为{mod_drag,mod_controls}.js这样的文件名,够怪,但结果也是能够下载的,够晕吧。但当我回到家离线调用的时候,发现不是这个{}.js文件了,是mod_drag.js和mod_controls.js,看来Google搞鬼。另外一个厉害的地方是,Google在js中首先会去判断所要调用的png或者gif文件是否存在,如果不存在那么全部使用transparent.png文件将界面变灰,你什么都看不到,包括GLargeMapControl的图片你都无法看到,郁闷吧,这样的情况下一片灰色就毫无意义了,让人也无法下手。不过我在联网的时候通过HTML查看了那些png图片,下载了一部分到本地,这样的话本地的调用就可以看到GLargeMapControl了,marker也可以看到了,这样让人心里有点底了。第二天我就联网把这两个js文件下载了下来,为了验证是否可用,我还下载了Google的三个实例。回到家以后再来调试,发现marker可以了,但在第二个例子的时候蓝色的line没有出现,point是OK的。再次查看HTML,发现是mod_poly.js没有下载。看来mod_开头的JS文件都是Gmap的模块文件,我如果把这些所有的模块文件下载全不就可以完全实现本地调用了,而测量距离中的这个蓝色线也应该可以显示出来了。但我又不想碰到一个mod就再去下载一个mod,这要烦死人的,我通过js找到这所有的mod文件并把他们全部下载下来,免得下次再去找麻烦。那么我就要看js代码了,看Google如何去调用这些mod的,最后发现Google非常的坏,mod_poly.js中poly不是直接给出的,而是将poly、drag、jslinker、controls等这些放在了一个组中,需要调用的时候再去从这些组里调用组合成的js,总算找到环节了,搜索上述的关键字,出现有几个地方,我也不管,将这些组里的东西全部组合成mod_*.js,结果弄了100多个mod的js,第二天早上的时候我就用影音传送带(和迅雷、快车类似的玩意,就是现在已经销声匿迹了,不过比网络蚂蚁坚持的时间长一些)去下载这些所有的js,结果真正能够下载下来的js文件也就30多个,将这30多个文件放到maps2.api文件夹下,这样的话调用的时候就可以直接调用了,一般的需求应该是可以满足了。所以将example等整合好,然后打包就提供到网络上给大家下载了。如果发现无法本地调用的,可以再做交流,不过个人认为,仅仅做marker和line的,应该是足够用的了,不要小看这30多个JS,既然能够离线调用,也就是说Gmap的核心也基本上就在这么多的JS中了,喜欢研究的朋友可以研究一下这里的js,把Gmap的核心给看懂然后自己开发一个吧。(呵呵,这个当然是玩笑了,因为Google的js都是a啊b啊c啊,一点意义都没有的函数名和变量,谁看懂了就是神仙了,这里我小小的佩服一下step1的站长,K大侠早年就研究Gmap的API还是很厉害的)
写的又是很乱。最近一直在mapbar的js和Gmap API之间徘徊,一来准备将mapbar的js开放成一个API,功能要比mapbar官方的强一些,用jquery+xml,不过感觉难度很大,毕竟对于我这样不懂js的菜鸟来说,另外一个就是用Gmap API来做个东西,毕竟Gmap API还是非常的强悍的,但正是因为它的强悍,更让我顾虑我是否会用,所有的API函数都要从头学习,烦。另外我有一个想法,Gmap API既然能够本地调试,那么那么,如果我们将Google maps的地图图片(tile)的路径全部替换成自己的图片,或者直接将路径改成WMS的路径,那么一个自己定制的本地Google Map是否就可以出现了呢?
说多了,放上我的Google Maps API的离线调试代码包吧。下载地址:GoogleMapsAPI_OfflineDebugPack.rar
说明:maps_my.js文件和mapfiles文件夹是核心内容,所有的js都在里面,对于htm页面的调用只需要script调用maps_my.js文件即可,但在maps_my.js文件中的开头我添加了一个myurl的全局变量,为的是将所有js文件做成绝对路径,并且JS中确实有一个需求是要提供绝对路径,比如气泡框和控制条的png图片就需要用到绝对路径,你只需要修改这个路径为你maps_my.js文件所在路径即可。index_my.htm文件是一个最简单的实例,一个点击出气泡框的marker,example_my.htm和example2_my.htm是Google提供的示例程序,分别是标点测算距离和地理知识考题,这里能够体现point和line的效果,可以直接调用查看演示。
补充说明:如果免域名key验证方法说的不对还望指正,而mapfiles目录下的png文件要是谁能下载全那当然是最好,到时候提供给大家一份。
20090222更新一下:将标题改的更加显眼一些。下载地址也提前了一些。
原文地址:http://www.cnblogs.com/Tangf/archive/2009/02/20/1394511.html
相关推荐
gmap:Google Maps API离线开发包,内附北京师范大学和北京动物园地图demo 预览效果: 将gmap目录拷贝到IIS的主目录下,在IE或者FireFox浏览器地址栏输入: http://127.0.0.1/gmap/BNUmap.html ...
它支持多种在线地图服务,包括Google Maps,Bing Maps,OpenStreetMap等,并且具有离线地图的功能,允许用户在没有网络连接的情况下使用地图。本文将深入探讨GMap.NET的核心特性、离线地图的下载与使用,以及如何...
在IT行业中,离线地图服务已经成为许多应用和系统不可或缺的一部分,特别是在移动设备上,它能够帮助用户在没有网络连接的情况下浏览地图,节省流量并提高用户体验。GMAP离线地图下载工具正是为此目的而设计的,它...
此外,GMap.NET还支持离线地图功能,允许用户下载地图数据并在无网络连接时使用。这需要配合`GMap.NET.Cache`模块,通过`GMap.NET.Cache.NokiaTileCache`等类来实现。 总之,GMap.NET是一个强大而灵活的地图集成...
GMap.NET.MapProviders.GMapProviders.GoogleMap.ApiKey = "你的Google Maps API密钥"; GMapControl myMap = new GMapControl(); myMap.MapProvider = GMapProviders.GoogleMap; myMap.DragButton = System.Windows....
GMap是一个基于JavaScript的库,它可以实现在网页中显示地图、定位、路径规划等功能,类似于Google Maps API。GMap支持自定义图层、标记、信息窗口、热力图等高级特性,适用于多种场景,如交通导航、位置服务、地理...
GMap.rar 文件包含了一个使用 C# 实现的 GMAP C# 源码项目,它主要专注于与 Google Maps API 的交互,提供了地图操作以及离线地图功能。在深入讲解这个项目之前,我们先来了解一下 Google Maps API 和 C# 开发地图...
综上所述,这个“gmap.rar”压缩包可能包含了一个完整的离线版Google Maps JavaScript API实现,允许开发者在没有网络连接的情况下,为用户提供基本的地图浏览体验。但实际使用时,开发者需要了解并遵循Google的相关...
9. 离线地图:通过GMap.NET,开发者还可以实现地图的离线缓存,使应用程序在无网络连接时也能正常使用地图。 在"GMap.NET_TEST"项目中,开发者可以找到具体的代码示例,学习如何初始化GMapControl对象,设置地图源...
GMap.NET是一个基于Google Maps API的.NET库,它不仅支持Google Maps,还支持Bing Maps、OpenStreetMap、Yandex Maps等多种地图服务。在离线模式下,GMap.NET可以通过缓存地图数据,使得在无网络连接的情况下仍能...
首先,GMap.NET是一个开源的.NET Framework控件库,它允许开发者在他们的应用程序中嵌入Google Maps、OpenStreetMap、Bing Maps等多种地图服务。在本案例中,我们将关注如何利用GMap.NET来调用高德和百度地图。 1. ...
GMAP.net是一个强大的地图开发框架,它为C#开发者提供了丰富的功能,允许他们轻松地集成Google Maps、Bing Maps等在线地图服务,并支持离线地图的下载和浏览。这个源代码包是GMAP.net的最新官方版本,对于任何希望...
GMap.NET库提供了Windows Forms和Windows Presentation Foundation两个版本的API,使得开发人员可以在桌面应用中轻松集成地图功能。 GMap.NET.Core.dll是该库的核心部分,包含了地图服务的抽象和基本功能,如定位、...
GMap.NET不仅支持在线地图,还允许开发者加载离线地图数据,这对于那些需要在无网络连接或网络不稳定环境下运行的应用来说至关重要。它支持多种地图服务提供商,包括谷歌地图、OpenStreetMap、Bing Maps等,提供了...
GMap.NET支持多种地图数据源,如Google Maps API、OpenStreetMap(OSM)、Bing Maps API等。开发者可以根据项目需求选择合适的地图服务,并通过API密钥进行授权。 4. **自定义地图文件**: 描述中提到可以自定义...
同时,由于GMap.NET库的通用性,项目中提到的技巧和方法也可以作为参考,用于编写类似功能的百度地图Provider。 GMap.NET是一个强大的开源地图库,它支持多种在线地图服务,包括Google Maps、OpenStreetMap、Bing ...
3. **地理位置处理**:通过GMap.NET,开发者可以获取经纬度坐标,进行距离计算、坐标转换等地理位置处理,也可以实现地址解析和反向地址解析,将地址与经纬度对应起来。 4. **路线规划**:GMap.NET集成了路线规划...
5. **离线地图**:除了在线地图服务,GMap.NET还支持下载和使用离线地图数据,这对于在没有网络连接时仍能使用地图的应用场景非常有用。 6. **路线规划**:通过集成路线规划算法,GMap.NET可以计算两点或多点之间的...
3. **离线地图**:GMAP.NET支持离线地图功能,用户可以在有网络连接时下载地图数据,然后在无网络的情况下使用。 4. **地理编码和反向地理编码**:GMap.NET提供将地址转换为经纬度坐标(地理编码)和从坐标反查地址...
3. **离线地图**:GMap.NET允许开发者下载地图区域以供离线使用,这对于在没有网络连接的情况下依然能显示地图的程序非常有用。 4. **路线规划**:通过API,开发者可以实现路线搜索、导航功能,包括驾车、步行和...