[转]Net Framework引路蜂地图开发示例
From:http://www.2cto.com/kf/201207/140421.html
引路蜂地图也提供对.Net Framework平台的支持,可以开发桌面地图应用,由于Mono C#的跨平台特性,使用Visual Studio 和Mono引路蜂地图开发包开发的地图应用可以运行于Windows ,Lunix,Unix,Mac OS等平台。开发桌面应用比开发移动应用要容易的多,屏幕,内存等方面都比移动平台要宽裕的多。
下面使用一个简单的应用来介绍一下.Net Framework引路蜂地图开发。示例截图如下
设置引路蜂地图开发包License
引路蜂开发包License分两部分,一个为License文件guidebee.lic ,另一部分为License文件对应的注册码,需在程序运行前初始化
//set the map licence info.
LicenceManager licenceManager = LicenceManager.GetInstance();
long[] keys = new []{ -0x64fa2841ac936ab3L, 0x492e8e7bf7876c44L, -0x3bb9b3e2a8e4c94dL,
0x224a4785c48a8eb3L, 0x3a36fc72ad775a85L, -0x93b87a82371b0ddL, };
licenceManager.AddLicence("GuidebeeMap_DotNet", keys); //set the map licence info.
LicenceManager licenceManager = LicenceManager.GetInstance();
long[] keys = new []{ -0x64fa2841ac936ab3L, 0x492e8e7bf7876c44L, -0x3bb9b3e2a8e4c94dL,
0x224a4785c48a8eb3L, 0x3a36fc72ad775a85L, -0x93b87a82371b0ddL, };
licenceManager.AddLicence("GuidebeeMap_DotNet", keys);
设置.Net Framework平台相关图形系统实现引路蜂地图开发包,在设计时尽量做到平台无关性,将一些平台相关的部分,如图形系统以接口形式定义,如IFont,IGraphics,AbstractGraphicsFactory,IImage。这样在应用到具体平台时,加上平台相关的实现,可以实现同一个库应用到不同的平台。这些平台实现是以源码提供的,如在Java SE平台,提供了JavaSEFont,JavaSEGraphics,JavaSEGraphicsFactory和JavaSEImage类定义,可以参见引路蜂地图API概述。
初始化地图对象及设置服务回调函数
//optional, get the tile url from server.
MapType.UpdateMapTileUrl(); MapLayer.SetAbstractGraphicsFactory(NETGraphicsFactory.GetInstance());
MapConfiguration.SetParameter(MapConfiguration.WorkerThreadNumber, );
_mapImage = MapLayer.GetAbstractGraphicsFactory().CreateImage(, );
_mapGraphics = _mapImage.GetGraphics(); _mapTileDownloadManager = new MapTileDownloadManager(this);
_rasterMap = new RasterMap(, , _mapType, _mapTileDownloadManager);
//_rasterMap.SetCurrentMapService(DigitalMapService.CloudmadeMapService);
//DigitalMapService.GetSearchOptions().LanguageId = "zh-cn";
_rasterMap.SetScreenSize(, );
_mapTileDownloadManager.Start();
_rasterMap.SetMapDrawingListener(this);
_rasterMap.SetGeocodingListener(this);
_rasterMap.SetRoutingListener(this); //optional, get the tile url from server.
MapType.UpdateMapTileUrl(); MapLayer.SetAbstractGraphicsFactory(NETGraphicsFactory.GetInstance());
MapConfiguration.SetParameter(MapConfiguration.WorkerThreadNumber, );
_mapImage = MapLayer.GetAbstractGraphicsFactory().CreateImage(, );
_mapGraphics = _mapImage.GetGraphics(); _mapTileDownloadManager = new MapTileDownloadManager(this);
_rasterMap = new RasterMap(, , _mapType, _mapTileDownloadManager);
//_rasterMap.SetCurrentMapService(DigitalMapService.CloudmadeMapService);
//DigitalMapService.GetSearchOptions().LanguageId = "zh-cn";
_rasterMap.SetScreenSize(, );
_mapTileDownloadManager.Start();
_rasterMap.SetMapDrawingListener(this);
_rasterMap.SetGeocodingListener(this);
_rasterMap.SetRoutingListener(this);
上述代码设置地图工作线程数为16,一般来说增加工资线程数可以提高地图下载及响应速度。
创建地图对象,设置显示区域(屏幕)大小。此外地图服务如查询地址,获取路径都是采用异步方式,通过设置回调函数如setRoutingListener,setGeocodingListener,setReverseGeocodingListener等来通知应用 。 设置地图中心和地图类型
var center = new GeoLatLng(-31.948275, 115.857562);
_rasterMap.SetCenter(center, , _rasterMap.GetMapType()); var center = new GeoLatLng(-31.948275, 115.857562);
_rasterMap.SetCenter(center, , _rasterMap.GetMapType());
上述代码将地图中心设置在32.0616667, 118.7777778,地图类型为Bing中国地图,缩放级别为4级,引路蜂内部支持20多种地图类型,并支持自定义地图类型。
地图缩放
RasterMap的 ZoomIn,ZoomOut用来放大和缩小地图,setZoom可以设置地图级别。
地图平移
RasterMap 有两个方法可以用于平移地图,panTo 将地图移动到指定经纬度坐标,panDirection(dx,dy) 将地图从当前位置平移dx,dy 个象素。 下列示例可以上,下,左,右平移地图。
地址查询
地址查询(或称为地址编码)是将输入的地名(如南京林业大学)转换成对应的经纬度坐标然后将其显示在地图上。
所有的地图服务都是采用异步方式调用,在调用RasterMap.getLocation(address)前,需要设置好返回结果时的回调函数RasterMap.setGeocodingListener,回调函数接口定义为IGeocodingListener。 回调方法为public void done(String query,MapPoint[] result) ,如果查询结果不为空,则reusult 为查询结果的数组。示例中将地图转到第一个查询结果。
对于MapAbc 地图服务,还可以指定城市编码,如南京编码为25。
public void getLocation(int citycode,String query, IGeocodingListener listener);
路径查询
可以通过RasterMap的getDirection()方法来查询路径,和查询地址类似,路径查询的结果也是通过回调函数的方式来通知应用程序的,下面的例子返回南京到北京的路径。返回结果存放在MapDirection中,MapDirection包含了路径的详细信息,包括路径的每个步骤,长度,时间,方向等。
地图服务可以选择使用Google 地图服务,CloudMade地图服务,在中国还可能选择MapAbc地图服务,缺省使用Google 地图服务。
getDirections()具有三个重载函数,例子中是采用的文字描述方式。上述示例采用了from: address1 to: address2 的格式, CloudMade地图服务和MapAbc地图服务则必需采用 经度1,纬度1,经度2,纬度2和格式。
为避免混淆,可以使用下述格式。
public void getDirection(GeoLatLng[] waypoints, IRoutingListener listener);
其中 waypoints 为途径点坐标数组经纬值,可以支持多点路径查询。
此外对于MapAbc 地图服务,还可以指定城市编码,如南京编码为25。
public void getDirection(int citycode,String query, IRoutingListener listener);
本地查询
本地查询可以查询指定区域内诸如宾馆,邮局等用户感兴趣的地方。其使用方法和地址查询非常类似。
本地查询方法public void getLocations(String address,int start,GeoLatLng center,GeoBounds bound, IGeocodingListener listener);
指定中心点和查询区域。本地查询可以多次返回结果,start为查询结果起始顺序,每次返回结果在SearchOptions 中定义,缺省每次返回4个。
选择地图服务
引路蜂地图服务缺省使用Google地图服务,但你也可以选择其它地图服务,比方说当Google服务离线时,您可以选择MapAbc的地图服务,另外要注意的是中国地图是有偏移的。如果想使用无偏移的中国地图,一是采用地图偏移校正算法,另外一个是使用CloudMade地图服务。
所前所述,引路蜂地图开发包在设计时将地图图片显示和地图服务两部分设计成相对独立的两部分,Google中国地图图片,Bing中国地图图片,MapAbc中国地图图片是有偏移的地图图片,CloudMade(OpenStreet)中国地图图片是无偏移的。而Google中国地图服务,MapAbc中国地图服务是有偏移,CloudMade地图服务是无偏移的。所以在选择地图类型和地图服务类型时,要么都选择有偏移,要么都选择无偏移。否则地图在显示路径时或地址时就不匹配。
下面列表是合法的组合:
地图类型 (MapType) 地图服务类型 (DigitalMapService)
GOOGLECHINA GOOGLE_MAP_SERVICE
MICROSOFTCHINA GOOGLE_MAP_SERVICE
MAPABCCHINA GOOGLE_MAP_SERVICE
OPENSTREETMAP CLOUDMADE_MAP_SERVICE
GOOGLECHINA MAPABC_MAP_SERVICE
MICROSOFTCHINA MAPABC_MAP_SERVICE
MAPABCCHINA MAPABC_MAP_SERVICE
地址反编码
地址反编码是通过经纬度查询对应的地名,
注意使用字符串经纬度格式时,纬度在前,经度在后,如果反了,则返回的地名或能为空或都跑到外国去了。结果也是一个数组,一般到第一个结果,后面结果是更大的区域或是距离相对较远的地名。
.Net Framework
帮助文档 下载
.Net Framework引路蜂地图开发库 下载
.Net Framework引路蜂地图开发示例 下载
GTK Mono.Net Framework引路蜂地图开发示例 下载
引路蜂地图开发指南 下载
[转]Net Framework引路蜂地图开发示例的更多相关文章
- Padrino 博客开发示例
英文版出处:http://www.padrinorb.com/guides/blog-tutorial 楼主按 拿作者自己的话说:Padrino(谐音:派骓诺)是一款基于Sinatra的优雅的Web应 ...
- iOS原生地图开发详解
在上一篇博客中:http://my.oschina.net/u/2340880/blog/414760.对iOS中的定位服务进行了详细的介绍与参数说明,在开发中,地位服务往往与地图框架结合使用,这篇博 ...
- android百度地图开发之自动定位所在位置与固定位置进行驾车,步行,公交路线搜索
最近跟着百度地图API学地图开发,先是学了路径搜索,对于已知坐标的两点进行驾车.公交.步行三种路径的搜索(公交路径运行没效果,待学习中),后来又 学了定位功能,能够获取到自己所在位置的经纬度,但当将两 ...
- 关于Eclipse Modeling Framework 实现模型驱动开发,第一部分
======================================EMF第二篇文章========================= 用 Eclipse Modeling Framework ...
- C#的百度地图开发(四)前端显示与定位
原文:C#的百度地图开发(四)前端显示与定位 有了这些定位信息,那要如何在前端的页面上显示出来呢?这需要用到百度地图的JavaScript的API.下面是示例代码. 前端代码 <%@ Page ...
- [置顶]
Xamarin android如何调用百度地图入门示例(一)
在Xamarin android如何调用百度地图呢? 首先我们要区分清楚,百度地图这是一个广泛的概念,很多刚刚接触这个名词"百度地图api",的确是泛泛而谈,我们来看一下百度地图的 ...
- 【iOS地图开发】巧妙打造中英文全球地图
地图开发的同学们经常遇到这样的问题,国内版地图开发,用高德或者百度就行了.但是,国外的地图怎么办?这里告诉大家,如果利用iOS地图,打造中英文的,国内国外都能用的,全球地图. 制作全英文地图的展示并不 ...
- 调用百度地图开发平台的JavascriptAPI实现将市县位置转换成坐标
最近的项目要做的地图比较多,有的还比较复杂,而地图用到的坐标,上网找json文件更是良莠不齐的.真是让人伤脑筋,后来突然想到了百度地图开发平台,没想到真的有对应的API哦,谢天谢地!!!下面说一下完整 ...
- android 百度地图开发实例(转载)
因为在我的寝室google基站定位返回的数据总是为空,所以换成百度地图,发现百度地图开发起来非常方便,提供了许多有用的工具,地图的加载速度也比google地图快许多. 为了加强记忆,写一点androi ...
随机推荐
- Mongo客户端
http://www.linuxidc.com/Linux/2012-07/64233.htm http://www.oschina.net/p/rockmongo http://www.cnblog ...
- Noip2013之路
当我回望过去的一年,我想,我对自己没有任何的愧疚,因为我每一个脚印,都踩的很坚实. 第一次参加模拟赛,第一次接触NOIP的规则,虽然考得不是特别好,但是还是很有收获的,首先,数组一定要开得足够大,不然 ...
- poj 2704 Pascal's Travels_记忆化搜索
一道简单但是题意蛋疼的题目 题意:给你个n*n的图,开始在左上角,要求走到右下角有多种走法,图上的数表示走几步,只能向右或向下走. #include<iostream> #include& ...
- #include <boost/asio.hpp>
TCP服务端和客户端 TCP服务端 #include <iostream> #include <stdlib.h> #include <boost/asio.hpp> ...
- C语言课程设计—图书管理系统
这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中居然在QQ网络硬盘中找到了当初的teta版,公布于此,以作纪念. C源码例如以下: #include<std ...
- Hadoop CLI MiniCluster
CLI MiniCluster Use the climonicluster, users can simply start and stop a single-node hadoop cluster ...
- android 实现静默安装、卸载
方法1:[使用调用接口方法,由于安装卸载应用程序的部分API是隐藏的,所以必须下载Android系统源码,在源码下开发并编译之后使用MM命令编译生成APK文件] import java.io.File ...
- 用于Lucene的各中文分词比较
对几种中文分析器,从分词准确性和效率两方面进行比较.分析器依次为:StandardAnalyzer.ChineseAnalyzer.CJKAnalyzer.IK_CAnalyzer.MIK_CAnal ...
- asp.net mvc表单提交的几种方式
asp.net MVC中form提交和控制器接受form提交过来的数据 MVC中form提交和在控制器中怎样接受 1.cshtml页面form提交2.控制器处理表单提交数据4种方式方法1:使用传统的R ...
- Sybase Power Designer 16.5破解版下载
http://pan.baidu.com/s/1ddsjs 下载后正常安装,然后将压缩文件里的dll文件拷到安装目录下覆盖原文件,启动Power Designer后,选择help-->abou ...