百度地图开发小结(2)

前面完成了定位功能,我们想得到定位地点的名称,发现目前能获取到的数据只有地点的经纬度。

我们可以通过GeoCorder来得到地点的名称。

首先实现OnGetGeoCoderResultListener接口。

添加一个GeoCorder对象:

GeoCoder mSearch = null; // 搜索模块,也可去掉地图模块独立使用
在onCreate方法中添加代码:
<span style="white-space:pre">		</span>// 初始化搜索模块,注册事件监听
		mSearch = GeoCoder.newInstance();
		mSearch.setOnGetGeoCodeResultListener(this);
前面我们在MyLocationListenner中实现了定位,我们可以得到当前位置的经纬度,下面就可以用GeoCorder的reverseGeoCode方法取得地点名称:
mSearch.reverseGeoCode(new ReverseGeoCodeOption().location(ptCenter));
onGetReverseGeoCodeResult便接收到了相应的结果。

<span style="white-space:pre">	</span>/**
	 * Geo定位,经纬度获取地址
	 */
	@Override
	public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
		if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
			Toast.makeText(MainActivity.this, "抱歉,未能找到结果", Toast.LENGTH_LONG)
					.show();
			return;
		}
		mBaiduMap.clear();
		int size = result.getPoiList().size();
		if(size > 0){
			List<String> data = new ArrayList<String>();
			data.add(result.getAddress());
			for (PoiInfo info : result.getPoiList()) {
				String name = info.name;
				data.add(name);
			}
			ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, R.layout.list, R.id.namelist, data);
			listView.setAdapter(adapter);
		}
	}
这里顺便把地点的名称以及附近的POI信息添加到一个listview里。

--------------------------分割线------------------------------

定位以及获取名称完成了。接下来该实现导航功能了。

先给地图添加一个单击的监听:

OnMapClickListener listener = new OnMapClickListener() {  
	    /** 
	    * 地图单击事件回调函数 
	    * @param point 点击的地理坐标 
	    */  
	    public void onMapClick(LatLng point){
	    	mBaiduMap.clear();
	    	double lat = point.latitude;
	    	double longit = point.longitude;
	    	BitmapDescriptor bitmap = BitmapDescriptorFactory  
	    		    .fromResource(R.drawable.icon_marka);  
	    		//构建MarkerOption,用于在地图上添加Marker  
	    		OverlayOptions option = new MarkerOptions()  
	    		    .position(point)  
	    		    .icon(bitmap);  
	    		//在地图上添加Marker,并显示  
	    		mBaiduMap.addOverlay(option);
	    		ptEnd = point;
	    		if(ptEnd != null){
	    			btnNav.setVisibility(Button.VISIBLE);
	    		}
	    }  
	    
	    /** 
	    * 地图内 Poi 单击事件回调函数 
	    * @param poi 点击的 poi 信息 
	    */  
		@Override
		public boolean onMapPoiClick(MapPoi poi) {
			// TODO Auto-generated method stub
			return false;
		}  
	};
我们可以通过单击地图得到需要导航的目的地。

添加一个按钮启动导航,单击事件

<span style="white-space:pre">	</span>public void startNavEngine(View view) {
		// 初始化导航引擎
		if(mIsEngineInitSuccess){
			launchNavigator2();
			return;
		}
		BaiduNaviManager.getInstance().initEngine(this, getSdcardDir(),
				mNaviEngineInitListener, ACCESS_KEY, mKeyVerifyListener);
		
		dialog = new ProgressDialog(this);
		dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
		dialog.setMessage("初始化引擎中");
		dialog.show();
	}
<span style="white-space:pre">	</span>private String getSdcardDir() {
		if (Environment.getExternalStorageState().equalsIgnoreCase(
				Environment.MEDIA_MOUNTED)) {
			return Environment.getExternalStorageDirectory().toString();
		}
		return null;
	}
	
	private NaviEngineInitListener mNaviEngineInitListener = new NaviEngineInitListener() {
		public void engineInitSuccess() {
			mIsEngineInitSuccess = true;
			Message message = new Message();
			message.what = 1;
			handler.sendMessage(message);
		}

		public void engineInitStart() {

		}

		public void engineInitFail() {
			Looper.prepare();
			Toast.makeText(MainActivity.this, "导航引擎初始化失败", 0).show();
			Looper.loop();
		}
	};
	
	private BNKeyVerifyListener mKeyVerifyListener = new BNKeyVerifyListener() {
		
		@Override
		public void onVerifySucc() {
			// TODO Auto-generated method stub
//			Toast.makeText(MainActivity.this, "key校验成功", Toast.LENGTH_LONG).show();
		}
		
		@Override
		public void onVerifyFailed(int arg0, String arg1) {
			// TODO Auto-generated method stub
			Toast.makeText(MainActivity.this, "key校验失败", Toast.LENGTH_LONG).show();
		}
	};
<span style="white-space:pre">	</span>Handler handler = new Handler(){

		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case 1:
				if(dialog.isShowing()){
					dialog.dismiss();
				}
				Toast.makeText(MainActivity.this, "导航引擎初始化成功", 0).show();
				launchNavigator2();
				break;

			default:
				break;
			}
			super.handleMessage(msg);
		}
		
	};
以上检验了我们申请的key是否争取,引擎是否成功初始化。

/**
     * 指定导航起终点启动GPS导航.起终点可为多种类型坐标系的地理坐标。
     * 前置条件:导航引擎初始化成功
     */
    private void launchNavigator2(){
        //这里给出一个起终点示例,实际应用中可以通过POI检索、外部POI来源等方式获取起终点坐标
        BNaviPoint startPoint = new BNaviPoint(ptCenter.longitude,ptCenter.latitude,
                "软件园", BNaviPoint.CoordinateType.BD09_MC);
        BNaviPoint endPoint = new BNaviPoint(ptEnd.longitude,ptEnd.latitude,
                "指定点", BNaviPoint.CoordinateType.BD09_MC);
        BaiduNaviManager.getInstance().launchNavigator(this,
                startPoint,                                      //起点(可指定坐标系)
                endPoint,                                        //终点(可指定坐标系)
                NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME,       //算路方式
                true,                                            //真实导航
                BaiduNaviManager.STRATEGY_FORCE_ONLINE_PRIORITY, //在离线策略
                new OnStartNavigationListener() {                //跳转监听
                    
                    @Override
                    public void onJumpToNavigator(Bundle configParams) {
                        Intent intent = new Intent(MainActivity.this, BNavigatorActivity.class);
                        intent.putExtras(configParams);
                        startActivity(intent);
                    }
                    
                    @Override
                    public void onJumpToDownloader() {
                    }
                });
    }
好了,可以进入导航界面了,这里只是用了其中一种导航的方式,其他的可以自行测试~

PS:assets文件夹的东西记得copy进去。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: unigui是一款基于Delphi框架的应用开发工具,可以用于快速开发Web应用程序。而百度地图开发是指利用百度地图API进行地图相关功能的开发。 在unigui中集成百度地图开发可以帮助我们实现一些与地理位置相关的功能,比如地图展示、地理位置查询、路径规划等。通过使用unigui提供的组件和百度地图开发文档中的API,我们可以在unigui应用程序中轻松地嵌入百度地图,并实现各种与地图相关的交互操作。 首先,我们可以使用unigui提供的WebBrowser组件将百度地图嵌入到应用程序中,展示地图信息。通过设置WebBrowser组件的URL属性为百度地图的URL链接,即可在应用程序中加载并显示百度地图界面。 其次,我们可以利用百度地图的JavaScript API来实现更加复杂的功能。比如,可以使用API提供的接口来查询地理位置信息,如地点名称、经纬度等;可以使用API提供的路径规划功能来规划两点之间的最佳路径,并将结果显示在地图上;还可以使用API提供的标记物、覆盖物等功能来进行地图上的标记和展示。 在unigui中使用百度地图开发可以为我们的应用程序增加更多的地理信息相关功能,为用户提供更好的地图交互体验。同时,通过百度地图开发提供的丰富的功能接口,我们可以根据具体需求进行二次开发和定制,实现更加个性化和专业化的地图应用。 ### 回答2: Unigui 是一个用于Web应用程序开发的框架,它可以与百度地图API结合使用来开发地图应用程序。 使用Unigui的百度地图开发,我们可以轻松地实现各种地图功能。首先,我们可以在地图上显示各种标记,如标注、信息窗口和标识物。这些标记可以帮助用户在地图上快速定位和识别特定位置。我们还可以通过应用程序向地图中添加多个图层,以容纳不同类型的地图数据。 其次,Unigui还允许我们使用百度地图的路线规划功能。我们可以根据用户输入的起点和终点,计算出最佳路径,并将其显示在地图上。这对于用户规划行程或导航到目的地非常有用。 除此之外,Unigui还提供了一些交互功能,例如缩放、拖动和地图控件。我们可以根据具体需求自定义这些功能,并通过应用程序与用户进行交互。 总的来说,通过Unigui与百度地图API的结合,我们可以简化地图应用程序的开发过程,并实现各种功能来满足用户需求。无论是创建标记、路线规划还是交互操作,Unigui都提供了丰富的工具和功能,使得百度地图开发变得更加高效和便捷。 ### 回答3: Unigui是一个用于开发Web应用程序的集成开发环境(IDE)和框架,而百度地图开发是在Web应用程序中集成百度地图的功能和数据。 借助Unigui,开发人员可以轻松地创建现代化、跨平台的Web应用程序。Unigui提供了强大的组件库和辅助工具,使开发过程更加高效和简单。通过使用Unigui,我们可以使用Delphi和Pascal语言来开发Web应用程序,它具有丰富的功能和灵活的布局。 而百度地图开发是指将百度地图的功能集成到我们的Web应用程序中。百度地图提供了丰富的地图服务和数据,包括地图显示、点标记、路径规划、地理编码等功能。通过百度地图开发,我们可以在Web应用程序中展示地图、标记位置、计算路径等操作,为用户提供更好的地图体验和功能。 结合Unigui和百度地图开发,我们可以开发出功能强大、界面美观的Web应用程序。我们可以借助Unigui的组件和工具来创建用户友好的界面,并利用百度地图的功能来展示地理位置、进行路径规划等操作,为用户提供更好的地图体验。 总结来说,Unigui是一个用于开发Web应用程序的环境和框架,而百度地图开发是在Web应用程序中集成百度地图的功能和数据。通过结合使用Unigui和百度地图开发,我们可以创建功能丰富、界面美观的Web应用程序,为用户提供更好的地图体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值