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

引路蜂地图服务缺省使用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,而使用不同的地图服务时路径查询的情况。(南京到天津的路径)

[java]
package com.pstreets.gisengine.demo;

import com.mapdigit.gis.MapDirection;
import com.mapdigit.gis.geometry.GeoLatLng;
import com.mapdigit.gis.service.DigitalMapService;
import com.mapdigit.gis.service.IRoutingListener;
import com.pstreets.gisengine.R;
import com.pstreets.gisengine.SharedMapInstance;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class MapServiceType extends Activity implements IRoutingListener {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

@Override
public void onStart() {
super.onStart();
GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778);
SharedMapInstance.map.setCenter(center, 15,
com.mapdigit.gis.raster.MapType.MICROSOFTCHINA);
//SharedMapInstance.map.setCurrentMapService(DigitalMapService.GOOGLE_MAP_SERVICE);
// SharedMapInstance.map.setCurrentMapService(DigitalMapService.MAPABC_MAP_SERVICE);
SharedMapInstance.map.setCurrentMapService(DigitalMapService.CLOUDMADE_MAP_SERVICE);
SharedMapInstance.map.setRoutingListener(this);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.maprouting_menu, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.getdirection:
GeoLatLng latLng1 = new GeoLatLng(32.0418381, 118.7788905);
GeoLatLng latLng2 = new GeoLatLng(39.11643, 117.180908);
SharedMapInstance.map.getDirections(new GeoLatLng[] { latLng1,
latLng2 });

return true;

default:
return super.onOptionsItemSelected(item);
}

}

@Override
public void done(String query, MapDirection result) {
if (result != null) {
SharedMapInstance.map.setMapDirection(result);
//SharedMapInstance.map.resize(result.getBound());
//SharedMapInstance.map.setZoom(5);

SharedMapInstance.map.setZoom(15);
SharedMapInstance.map.panTo(result.routes[0].startGeocode.point);

}

}

@Override
public void readProgress(int bytes, int total) {

}

}
package com.pstreets.gisengine.demo;

import com.mapdigit.gis.MapDirection;
import com.mapdigit.gis.geometry.GeoLatLng;
import com.mapdigit.gis.service.DigitalMapService;
import com.mapdigit.gis.service.IRoutingListener;
import com.pstreets.gisengine.R;
import com.pstreets.gisengine.SharedMapInstance;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class MapServiceType extends Activity implements IRoutingListener {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

@Override
public void onStart() {
super.onStart();
GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778);
SharedMapInstance.map.setCenter(center, 15,
com.mapdigit.gis.raster.MapType.MICROSOFTCHINA);
//SharedMapInstance.map.setCurrentMapService(DigitalMapService.GOOGLE_MAP_SERVICE);
// SharedMapInstance.map.setCurrentMapService(DigitalMapService.MAPABC_MAP_SERVICE);
SharedMapInstance.map.setCurrentMapService(DigitalMapService.CLOUDMADE_MAP_SERVICE);
SharedMapInstance.map.setRoutingListener(this);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.maprouting_menu, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.getdirection:
GeoLatLng latLng1 = new GeoLatLng(32.0418381, 118.7788905);
GeoLatLng latLng2 = new GeoLatLng(39.11643, 117.180908);
SharedMapInstance.map.getDirections(new GeoLatLng[] { latLng1,
latLng2 });

return true;

default:
return super.onOptionsItemSelected(item);
}

}

@Override
public void done(String query, MapDirection result) {
if (result != null) {
SharedMapInstance.map.setMapDirection(result);
//SharedMapInstance.map.resize(result.getBound());
//SharedMapInstance.map.setZoom(5);

SharedMapInstance.map.setZoom(15);
SharedMapInstance.map.panTo(result.routes[0].startGeocode.point);

}

}

@Override
public void readProgress(int bytes, int total) {

}

}

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

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

作者:mapdigit

分类:默认分类 时间:2012-01-02 人气:19
本文关键词:
分享到:

相关文章

  • Android SQLite数据库操作示例 2012-01-01

    SQLite介绍 SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能。此外,它还是开源的,任何人都可以使用它。 SQLite由以下几个组件组成:SQL编译器、内核、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。 SQLite支持的数据类型参考链接:http://blog.csdn.net/wzy_1988/article/details/36005947 Android在运行时(

  • Android 关于greenDao的使用教程 2012-01-02

    关于greenDao的使用 第一篇How to get started ? 原文地址:http://greendao-orm.com/documentation/how-to-get-started/ 该教程会带你浏览一个简单的greenDao示例工程。地址:https://github.com/greenrobot/greenDAO,该工程包含两个子工程: DaoExample和DaoExampleGenerator。你可以clone到本地,运行或者直接在github上直接浏览。 如果你从gi

  • Android 手势识别 2012-01-03

    Android 提供了GestureDetector类来识别用户的手势操作,这个类提供了两个侦听接口:OnGestureListener(处理单击类消息)与OnDoubleTagListener(处理双击类消息)。onGestureListener( )接口中有以下几个抽象方法: // 单击,触摸屏按下时立刻触发 abstract boolean onDown(MotionEvent e); // 抬起,手指离开触摸屏时触发(长按、滚动、滑动时,不会触发这个手势) abstract boolea

  • Android-Universal-Image-Loader框架学习 2012-01-03

    先来看一下Android-Universal-Image-Loader框架的用法; 1、初始化ImageLoaderConfiguration(全局的,在整个application中初始化configuration,配置缓存、加载线程等)、 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( getApplicationContext()) .threadPriority(Thread.NORM_PRIO

  • iOS和Android将在良性竞争中互存 2012-01-03

      苹果推出iPhone 4S。图/CFP   三星可弯曲屏幕概念机   Natali概念机   Kambala概念机   Windows概念机   “苹果风光将长久依旧!”,iPhone的最大竞争对手Android阵营显然不这么看。Android由Google推出,而Google董事长施密特前不久刚刚发表了对智能手机大战的见解,他表示,实际上在苹果的系统(iOS)和Android之间的竞争还会继续存在下去,而且这种竞争是非常良性的竞争。它能够把我们的价格降低,而且会把更多的投资带到市场上。目前

  • android如何在BaseAdapter内使用notifyDataSetChanged()方法以及线程的使用 2012-01-04

    有时候我们需要修改列表里的数据,并实时刷新,我们除了在在外部调用adapter.notifyDataSetChanged()方法来通知activity刷新, 如果在adapter内部有涉及到更新数据,删除或者增加数据,就可以直接在adapter内部调用notifyDataSetChanged()这个方法,前提是该listview绑定的数据有改变。 以下例子结合Handler,线程展示 public class MyAdapter extends BaseAdapter { private fin

  • Google否认Android应用认证体系被破解 2012-01-04

    Google在7月发布了新的Android应用程序许可验证服务, 以防止Android应用可被轻松破解的尴尬局面。但是这一新的版权保护形式依然很脆弱,脆弱到依然可以被轻松破解。只要用一个叫做 smali/baksmali的程序将.apk文件解包,把里面的授权验证库给移除掉,再重新打包成.apk文件就完成了破解。因为.apk文件里的授权 验证库是独立的一个部分,所以很好分离出来,完成破解。目前这一方式还存在于理论上,不过估计很快就会有人做出自动工具来实现批量.apk文件的破解。 Google迅速通

  • android 点击下弹动画实现 2012-01-04

    下弹动画的实现 下弹动画在很多应用都有使用,比如豌豆荚中的应用介绍界面,百度手机助手的应用介绍界面等。 只要熟悉android动画的使用接口,制作动画并不困难。 这里使用开源库nineoldandroids,其实和android3.0 以上直接使用动画接口是一样的。 实现效果 PS, 搞了半天GIF 才能播放。原来是最大边不能太大了。原来图片尺寸太大,被默认转成jpg了。现在总算能看到效果了。 DropDownExample.java package com.buptfarmer.devapp;

  • 细数Android十大最受欢迎的程序软件(下) 2012-01-04

      上文关于Android程序软件的介绍看的过瘾吗?这里再次为你呈现你喜爱的,你常用的,你不知道的……   6、BatteryHD   Battery HD在排行中一直很稳定的维持在第6名。它两星期之前第一次出现在thenextinstall排名榜上,目前为止安装量已经超过了100k。随着 hockey-stick发展起来, Battery HD的安装量将很快超过100万。虽然这个程序很简单,但是电池方面的应用程序在安卓程序中永远不会过时。   7、Radiant Defense   上个星期R

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.043 (s). 10 q(s)