Facebook Twitter LinkedIn E-mail
magnify
Home Posts tagged "Windows Mobile"

Windows Mobile引路蜂地图开发包Ver2.1下载

Windows Mobile引路蜂地图开发包下载。

帮助文档 下载
Windows Mobile引路蜂地图开发库 下载
Windows Mobile引路蜂地图开发示例 下载
引路蜂地图开发指南 下载
  1. Windows Mobile引路蜂地图开发示例:概述
  2. Windows Mobile引路蜂地图开发示例:二维图形库
  3. Windows Mobile引路蜂地图开发示例:准备开始
  4. Windows Mobile引路蜂地图开发示例:第一个地图应用
  5. Windows Mobile引路蜂地图开发示例:设置地图类型
  6. Windows Mobile引路蜂地图开发示例:放大、缩小
  7. Windows Mobile引路蜂地图开发示例:地图平移
  8. Windows Mobile引路蜂地图开发示例:地址查询
  9. Windows Mobile引路蜂地图开发示例:路径查询
  10. Windows Mobile引路蜂地图开发示例:本地查询
  11. Windows Mobile引路蜂地图开发示例:IP地址查询
  12. Windows Mobile引路蜂地图开发示例:地址反编码
  13. Windows Mobile引路蜂地图开发示例:选择地图服务
  14. 离线地图下载方法解析
  15. 自定义地图示例:天地图(一)
  16. 自定义地图示例:天地图(二)
 

Windows Mobile引路蜂地图开发示例:选择地图服务

引路蜂地图服务缺省使用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 

下述示列地图类型使用MICROSOFTCHINA,而使用不同的地图服务时路径查询的情况。(南京到天津的路径) 。

private void GetDirection()
{
 GeoLatLng latLng1 = new GeoLatLng(32.0418381, 118.7788905);
 GeoLatLng latLng2 = new GeoLatLng(39.11643, 117.180908);
 _rasterMap.GetDirections(new GeoLatLng[] { latLng1, latLng2 });
}

private void mnuServiceType_Google_Click(object sender, EventArgs e)
{
 _rasterMap.SetCurrentMapService(DigitalMapService.GoogleMapService);
 _rasterMap.SetRoutingListener(this);
 GetDirection();
}

private void mnuServiceType_MapAbc_Click(object sender, EventArgs e)
{
 _rasterMap.SetCurrentMapService(DigitalMapService.MapabcMapService);
 _rasterMap.SetRoutingListener(this);
 GetDirection();
}

private void mnuServiceType_CloudMade_Click(object sender, EventArgs e)
{
 _rasterMap.SetCurrentMapService(DigitalMapService.CloudmadeMapService);
 _rasterMap.SetRoutingListener(this);
 GetDirection();
}


上图分别为三种地图服务返回的路径,Google 地图服务和MapAbc地图服务返回的结果基本相同,实际上Google 地图服务在中国的地图是来自于MapAbc。而CloudMade地图返回的结果似乎偏移了道路。这是因为Bing 中国地图是被偏移过的,而CloudMade返回的无偏移的结果。Google 地图服务和MapAbc地图服务返回的结果也是偏移过的,所以和偏移过的地图很“匹配”。

 

Windows Mobile引路蜂地图开发示例:地址反编码

地址反编码是通过经纬度查询对应的地名,下面示例是查询经纬度为118.777802, 32.061699对应的地名,结果为”中国江苏省南京市鼓楼区渊声巷41号”。

在MainFrom上添加mnuReverseGeocoding菜单项,并且MainForm实现IReverseGeocodingListener接口。

public void Done(string query, MapPoint[] result)
{
 if (result != null)
 {
  _rasterMap.PanTo(result[0].Point);
   

 }
}

....
private void mnuReverseGeocoding_Click(object sender, EventArgs e)
{
 _rasterMap.GetReverseLocations("32.061699,118.777802");
}

注意使用字符串经纬度格式时,纬度在前,经度在后,如果反了,则返回的地名或能为空或都跑到外国去了。结果也是一个数组,一般到第一个结果,后面结果是更大的区域或是距离相对较远的地名。

 

Windows Mobile引路蜂地图开发示例:IP地址查询

IP地址查询,可以根据IP地址查询到该IP所在的地理经纬度坐标,比如下述例子查询IP 地址58.192.32.1,所在经纬度为118.777802,32.061699,为南京大学所在地。

在MainForm上添加mnuIPSearch菜单。并在MainForm中实现IIpAddressGeocodingListener接口用于响应查询结果。

public void Done(string query, IpAddressLocation result)
{
 if (result != null && result.Error.Length == 0
  && result.Longitude.Length > 0
  && result.Latitude.Length > 0)
 {
  try
  {

   MapPoint mapPoint = new MapPoint();
   String latLng = "[" + result.Longitude + ","
     + result.Latitude + ",0]";
   mapPoint.Point = DigitalMap.FromStringToLatLng(latLng);
   mapPoint.Name = (result.Organization);
   mapPoint.ObjectNote = (result.City + " " + result.Country);
   _rasterMap.PanTo(mapPoint.Point);
  }
  catch (Exception e)
  {

   result.Error = "IP_NOT_FOUND";
  }
 }
}

....
private void mnuIPSearch_Click(object sender, EventArgs e)
{
 _rasterMap.GetIpLocations("58.192.32.1");
}

注:目前IP查询结果总是以英文返回,如上述结果详细内容。
ISP:”China Education and Research Network”
Organization: “Nan Jing University”
Country: “CN”
City: “Nanjing”
若想知道该经纬度对应的地名,可以使用地址反编码服务。
你可以输入 127.0.0.1 查询本机地址。

 

Windows Mobile引路蜂地图开发示例:本地查询

本地查询可以查询指定区域内诸如宾馆,邮局等用户感兴趣的地方。其使用方法和地址查询非常类似。
下面示例查询32.0616667, 118.7777778为中心点一定区域内宾馆的信息。

在MainForm上添加mnuLocalSearch菜单项

public void Done(string query, MapPoint[] result)
{
 if (result != null)
 {
  _rasterMap.PanTo(result[0].Point);
  for (int i = 0; i < result.Length; i++)
  {
   Console.WriteLine(result[i].ObjectNote);
  }

 }
}

....
private void mnuLocalSearch_Click(object sender, EventArgs e)
{
 String name = "宾馆";
 GeoLatLng screenCenter = _rasterMap.GetScreenCenter();
 _rasterMap.GetLocations(name, 0, screenCenter,
   _rasterMap.GetScreenBounds(screenCenter));
}

本地查询方法
public void getLocations(String address,int start,GeoLatLng center,GeoBounds bound, IGeocodingListener listener);
指定中心点和查询区域。本地查询可以多次返回结果,start为查询结果起始顺序,每次返回结果在SearchOptions 中定义,缺省每次返回4个。
上述结果返回内容为,具体结果可能不同。
“晶丽酒店025-83310818 025-83310818212223 025-86636636 ”
“城市名人酒店025-83123333 025-83123888 ”
“南京玄武饭店 025-83358888 ”
“Sofitel Galaxy Nanjing – 南京索菲特银河大酒店025-83718888 “

 

Windows Mobile引路蜂地图开发示例:路径查询

可以通过RasterMap的getDirection()方法来查询路径,和查询地址类似,路径查询的结果也是通过回调函数的方式来通知应用程序的,下面的例子返回南京到北京的路径。返回结果存放在MapDirection中,MapDirection包含了路径的详细信息,包括路径的每个步骤,长度,时间,方向等。

在MainFrom上添加一个mnuGetDirection菜单项,并让MainForm实现IRoutingListener接口用于响应路径查询结果。

public void Done(string query, MapDirection result)
{
 if (result != null)
 {
  _rasterMap.SetMapDirection(result);
  _rasterMap.Resize(result.Bound);
 }
}

....
private void mnuGetDirection_Click(object sender, EventArgs e)
{
 String name1 = "南京";
 String name2 = "北京";
 _rasterMap.GetDirections("from: " + name1 + " to: " + name2);

}

地图服务可以选择使用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);