android学习之基于百度地图的地点检索和标记

在现在的生活之中,地图越来越重要,作为一个普通的程序员,我们不可能自己去编写一个地图,所以,这篇文章写的是关于如何利用百度的第三方框架来写自己的程序,

首先我们需要成为百度开发者,然后下载相关的SDK,在百度里面搜索百度地图,然后进入百度api首页,然后点击进入,这里我只说一些需要注意的点,第一,在创建应用的时候,我们应该选择的是androidsdk,然后android的sha1 fingerprint可以通过eclipse中的windows->preference->android->build来获取,在输入包名以后就可以获得访问应用AK了,这里我说sdk的下载,在下载完成sdk以后,可能不同的版本有不同的情况,但是大体情况应该都是差不多的,我们需要把sdk目录下的armeabi文件拷贝到我们的项目的libs下,然后将jar文件也拷贝到我们的libs目录下,同时将些jar文件添加到buildpath,然后在下面的图片之中,我们需要勾选我们的目录,然后确认勾选了Private Libraries,android学习之基于百度地图的地点检索和标记_第1张图片

到这里的话我们的基本环境就算是搭建好了,剩下的基本上可以照着百度地图里面的指导来做了,这里我贴上我的代码:

配置文件




    
    

    
    
    
    
    
    
    
    
    

    
        

        
            
                

                
            
        
    

主界面代码


    

        

        
activity代码
package com.example.demo;

import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.geocode.GeoCodeOption;
import com.baidu.mapapi.search.geocode.GeoCodeResult;
import com.baidu.mapapi.search.geocode.GeoCoder;
import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;

import android.os.Bundle;
import android.app.Activity;
import android.text.InputFilter.LengthFilter;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends Activity {
	// 声明一个容器来放mapview
	LinearLayout map_container;
	// 声明一个查询按钮
	Button btn_search;
	// 声明一个输入位置的输入框
	EditText et_location;
	// 声明一个标记
	Marker marker;
	// 得到一个地理编码
	GeoCoder mGeoCoder;
	// 声明一个BaiduMap用来控制地图
	BaiduMap mBaiduMap;
	// 得到地图的视图
	MapView mv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		SDKInitializer.initialize(getApplicationContext());
		init();

	}

	private void init() {
		// 得到视图的容器
		map_container = (LinearLayout) findViewById(R.id.map_container);
		// 得到MapView
		MapView mv = new MapView(this);
		// 将地图添加的视图容器
		map_container.addView(mv);
		// 通过MapView来获得BaiduMap
		mBaiduMap = mv.getMap();
		// 得到输入框
		et_location = (EditText) findViewById(R.id.address);
		// 得到search按钮
		btn_search = (Button) findViewById(R.id.btn_search);
		// 为按钮添加点击事件
		btn_search.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {// 实现点击事件
				// 通过GeoCoder的实例方法得到GerCoder对象
				mGeoCoder = GeoCoder.newInstance();
				// 得到GenCodeOption对象
				GeoCodeOption mGeoCodeOption = new GeoCodeOption();
				// 得到输入框的内容
				mGeoCodeOption.address(et_location.getText().toString());
				// 这里必须设置城市,否则会报错
				mGeoCodeOption.city("成都");
				// 为GeoCoder设置监听事件
				mGeoCoder
						.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
							// 这个方法是将坐标转化为具体地址
							@Override
							public void onGetReverseGeoCodeResult(
									ReverseGeoCodeResult arg0) {

							}

							// 将具体的地址转化为坐标
							@Override
							public void onGetGeoCodeResult(GeoCodeResult arg0) {
								// 程序健壮性的判断
								if (arg0 == null
										|| arg0.error != SearchResult.ERRORNO.NO_ERROR) {
									Toast.makeText(MainActivity.this, "检索错误",
											Toast.LENGTH_SHORT).show();
								} else {
									// 得到具体地址的坐标
									LatLng pos = arg0.getLocation();
									// 得到一个标记的控制器
									MarkerOptions mMarkerOptions = new MarkerOptions();
									// 我们设置标记的时候需要传入的参数
									BitmapDescriptor mbitmapDescriptor = BitmapDescriptorFactory
											.fromResource(R.drawable.ic_launcher);
									// 设置标记的图标
									mMarkerOptions.icon(mbitmapDescriptor);
									// 设置标记的坐标
									mMarkerOptions.position(pos);
									// 添加标记
									mBaiduMap.addOverlay(mMarkerOptions);
									// 设置地图跳转的参数
									MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory
											.newLatLngZoom(pos, 15);
									// 设置进行地图跳转
									mBaiduMap.setMapStatus(mMapStatusUpdate);
								}
							}
						});
				// 这句话必须写,否则监听事件里面的都不会执行
				mGeoCoder.geocode(mGeoCodeOption);

			}
		});

	}

}


你可能感兴趣的:(android高级学习)