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

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

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

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

配置文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.demo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="18" />
    <!-- uSHYZsGq3vHKpwXeERfXj9PG4buF14qm -->

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="uSHYZsGq3vHKpwXeERfXj9PG4buF14qm" />

        <activity
            android:name="com.example.demo.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
主界面代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/address"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="四川大学" />

        <Button
            android:id="@+id/btn_search"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="search" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/map_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    </LinearLayout>

</LinearLayout>
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);

			}
		});

	}

}


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值