android 用百度地图API获取经纬度和地理位置
2013-04-26 17:10
555 查看
转自:/article/6001918.html
android获取经纬度和地方名称
package com.liufeng.baidumap;
import
Android.os.Bundle;
import
Android.view.View;
import
Android.view.View.OnClickListener;
import
Android.widget.Button;
import
Android.widget.EditText;
import
Android.widget.TextView;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.MKAddrInfo;
import com.baidu.mapapi.MKDrivingRouteResult;
import com.baidu.mapapi.MKPoiInfo;
import com.baidu.mapapi.MKPoiResult;
import com.baidu.mapapi.MKSearch;
import com.baidu.mapapi.MKSearchListener;
import com.baidu.mapapi.MKTransitRouteResult;
import com.baidu.mapapi.MKWalkingRouteResult;
import com.baidu.mapapi.MapActivity;
/**
* 根据经纬度查询地址信息
*
* @author liufeng
* @date 2011-05-03
*/
public
class QueryAddressActivity
extends MapActivity {
// 定义地图引擎管理类
private BMapManager mapManager;
// 定义搜索服务类
private MKSearch mMKSearch;
private EditText longitudeEditText;
private EditText latitudeEditText;
private TextView addressTextView;
private Button queryButton;
@Override
public
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.query_address);
// 初始化MapActivity
mapManager = new BMapManager(getApplication());
// init方法的第一个参数需填入申请的API Key
mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4",
null);
super.initMapActivity(mapManager);
// 初始化MKSearch
mMKSearch = new MKSearch();
mMKSearch.init(mapManager, new MySearchListener());
// 通过id查询在布局文件中定义的控件
longitudeEditText = (EditText) findViewById(R.id.longitude_input);
latitudeEditText = (EditText) findViewById(R.id.latitude_input);
addressTextView = (TextView) findViewById(R.id.address_text);
queryButton = (Button) findViewById(R.id.query_button);
// 给地址查询按钮设置单击事件监听器
queryButton.setOnClickListener(new OnClickListener() {
@Override
public
void onClick(View v) {
// 用户输入的经度值
String longitudeStr = longitudeEditText.getText().toString();
// 用户输入的纬度值
String latitudeStr = latitudeEditText.getText().toString();
try {
// 将用户输入的经纬度值转换成int类型
int longitude = (int) (1000000
* Double.parseDouble(longitudeStr));
int latitude = (int) (1000000
* Double.parseDouble(latitudeStr));
// 查询该经纬度值所对应的地址位置信息
mMKSearch.reverseGeocode(new GeoPoint(latitude, longitude));
} catch (Exception e) {
addressTextView.setText("查询出错,请检查您输入的经纬度值!");
}
}
});
}
@Override
protected
boolean isRouteDisplayed() {
return
false;
}
@Override
protected
void onDestroy() {
if (mapManager !=
null) {
// 程序退出前需调用此方法
mapManager.destroy();
mapManager = null;
}
super.onDestroy();
}
@Override
protected
void onPause() {
if (mapManager !=
null) {
// 终止百度地图API
mapManager.stop();
}
super.onPause();
}
@Override
protected
void onResume() {
if (mapManager !=
null) {
// 开启百度地图API
mapManager.start();
}
super.onResume();
}
/**
* 内部类实现MKSearchListener接口,用于实现异步搜索服务
*
* @author liufeng
*/
public
class MySearchListener
implements MKSearchListener {
/**
* 根据经纬度搜索地址信息结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public
void onGetAddrResult(MKAddrInfo result,
int iError) {
if (result ==
null) {
return;
}
StringBuffer sb = new StringBuffer();
// 经纬度所对应的位置
sb.append(result.strAddr).append("/n");
// 判断该地址附近是否有POI(Point of Interest,即兴趣点)
if (null != result.poiList) {
// 遍历所有的兴趣点信息
for (MKPoiInfo poiInfo : result.poiList) {
sb.append("----------------------------------------").append("/n");
sb.append("名称:").append(poiInfo.name).append("/n");
sb.append("地址:").append(poiInfo.address).append("/n");
sb.append("经度:").append(poiInfo.pt.getLongitudeE6() /
1000000.0f).append("/n");
sb.append("纬度:").append(poiInfo.pt.getLatitudeE6() /
1000000.0f).append("/n");
sb.append("电话:").append(poiInfo.phoneNum).append("/n");
sb.append("邮编:").append(poiInfo.postCode).append("/n");
// poi类型,0:普通点,1:公交站,2:公交线路,3:地铁站,4:地铁线路
sb.append("类型:").append(poiInfo.ePoiType).append("/n");
}
}
// 将地址信息、兴趣点信息显示在TextView上
addressTextView.setText(sb.toString());
}
/**
* 驾车路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public
void onGetDrivingRouteResult(MKDrivingRouteResult result,
int iError) {
}
/**
* POI搜索结果(范围检索、城市POI检索、周边检索)
*
* @param result 搜索结果
* @param type 返回结果类型(11,12,21:poi列表 7:城市列表)
* @param iError 错误号(0表示正确返回)
*/
@Override
public
void onGetPoiResult(MKPoiResult result,
int type,
int iError) {
}
/**
* 公交换乘路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public
void onGetTransitRouteResult(MKTransitRouteResult result,
int iError) {
}
/**
* 步行路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public
void onGetWalkingRouteResult(MKWalkingRouteResult result,
int iError) {
}
}
}
3)AndroidManifest.xml中的配置
<?xml
version="1.0"
encoding="utf-8"?>
<manifest
xmlns:Android="http://schemas.android.com/apk/res/android"
package="com.liufeng.baidumap"
Android:versionCode="1"
Android:versionName="1.0">
<application
Android:icon="@drawable/icon"
android:label="@string/app_name">
<activity
Android:name=".QueryAddressActivity"
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>
<uses-sdk
Android:minSdkVersion="4"
/>
<!-- 访问网络的权限 -->
<uses-permission
Android:name="android.permission.INTERNET"
/>
<!-- 访问精确位置的权限 -->
<uses-permission
Android:name="android.permission.ACCESS_FINE_LOCATION"
/>
<!-- 访问网络状态的权限 -->
<uses-permission
Android:name="android.permission.ACCESS_NETWORK_STATE"
/>
<!-- 访问WIFI网络状态的权限 -->
<uses-permission
Android:name="android.permission.ACCESS_WIFI_STATE"
/>
<!-- 改变WIFI网络状态的权限 -->
<uses-permission
Android:name="android.permission.CHANGE_WIFI_STATE"
/>
<!-- 读写存储卡的权限 -->
<uses-permission
Android:name="android.permission.WRITE_EXTERNAL_STORAGE"
/>
<!-- 读取电话状态的权限 -->
<uses-permission
Android:name="android.permission.READ_PHONE_STATE"
/>
</manifest>
locationManager = (LocationManager) GPSTestActivity.this.getSystemService(Context.LOCATION_SERVICE);
String provier = LocationManager.GPS_PROVIDER; location = locationManager.getLastKnownLocation(provier);
if (location == null) { Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);
provier = locationManager.getBestProvider(criteria, true);
location = locationManager.getLastKnownLocation(provier); }
android获取经纬度和地方名称
package com.liufeng.baidumap;
import
Android.os.Bundle;
import
Android.view.View;
import
Android.view.View.OnClickListener;
import
Android.widget.Button;
import
Android.widget.EditText;
import
Android.widget.TextView;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.MKAddrInfo;
import com.baidu.mapapi.MKDrivingRouteResult;
import com.baidu.mapapi.MKPoiInfo;
import com.baidu.mapapi.MKPoiResult;
import com.baidu.mapapi.MKSearch;
import com.baidu.mapapi.MKSearchListener;
import com.baidu.mapapi.MKTransitRouteResult;
import com.baidu.mapapi.MKWalkingRouteResult;
import com.baidu.mapapi.MapActivity;
/**
* 根据经纬度查询地址信息
*
* @author liufeng
* @date 2011-05-03
*/
public
class QueryAddressActivity
extends MapActivity {
// 定义地图引擎管理类
private BMapManager mapManager;
// 定义搜索服务类
private MKSearch mMKSearch;
private EditText longitudeEditText;
private EditText latitudeEditText;
private TextView addressTextView;
private Button queryButton;
@Override
public
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.query_address);
// 初始化MapActivity
mapManager = new BMapManager(getApplication());
// init方法的第一个参数需填入申请的API Key
mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4",
null);
super.initMapActivity(mapManager);
// 初始化MKSearch
mMKSearch = new MKSearch();
mMKSearch.init(mapManager, new MySearchListener());
// 通过id查询在布局文件中定义的控件
longitudeEditText = (EditText) findViewById(R.id.longitude_input);
latitudeEditText = (EditText) findViewById(R.id.latitude_input);
addressTextView = (TextView) findViewById(R.id.address_text);
queryButton = (Button) findViewById(R.id.query_button);
// 给地址查询按钮设置单击事件监听器
queryButton.setOnClickListener(new OnClickListener() {
@Override
public
void onClick(View v) {
// 用户输入的经度值
String longitudeStr = longitudeEditText.getText().toString();
// 用户输入的纬度值
String latitudeStr = latitudeEditText.getText().toString();
try {
// 将用户输入的经纬度值转换成int类型
int longitude = (int) (1000000
* Double.parseDouble(longitudeStr));
int latitude = (int) (1000000
* Double.parseDouble(latitudeStr));
// 查询该经纬度值所对应的地址位置信息
mMKSearch.reverseGeocode(new GeoPoint(latitude, longitude));
} catch (Exception e) {
addressTextView.setText("查询出错,请检查您输入的经纬度值!");
}
}
});
}
@Override
protected
boolean isRouteDisplayed() {
return
false;
}
@Override
protected
void onDestroy() {
if (mapManager !=
null) {
// 程序退出前需调用此方法
mapManager.destroy();
mapManager = null;
}
super.onDestroy();
}
@Override
protected
void onPause() {
if (mapManager !=
null) {
// 终止百度地图API
mapManager.stop();
}
super.onPause();
}
@Override
protected
void onResume() {
if (mapManager !=
null) {
// 开启百度地图API
mapManager.start();
}
super.onResume();
}
/**
* 内部类实现MKSearchListener接口,用于实现异步搜索服务
*
* @author liufeng
*/
public
class MySearchListener
implements MKSearchListener {
/**
* 根据经纬度搜索地址信息结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public
void onGetAddrResult(MKAddrInfo result,
int iError) {
if (result ==
null) {
return;
}
StringBuffer sb = new StringBuffer();
// 经纬度所对应的位置
sb.append(result.strAddr).append("/n");
// 判断该地址附近是否有POI(Point of Interest,即兴趣点)
if (null != result.poiList) {
// 遍历所有的兴趣点信息
for (MKPoiInfo poiInfo : result.poiList) {
sb.append("----------------------------------------").append("/n");
sb.append("名称:").append(poiInfo.name).append("/n");
sb.append("地址:").append(poiInfo.address).append("/n");
sb.append("经度:").append(poiInfo.pt.getLongitudeE6() /
1000000.0f).append("/n");
sb.append("纬度:").append(poiInfo.pt.getLatitudeE6() /
1000000.0f).append("/n");
sb.append("电话:").append(poiInfo.phoneNum).append("/n");
sb.append("邮编:").append(poiInfo.postCode).append("/n");
// poi类型,0:普通点,1:公交站,2:公交线路,3:地铁站,4:地铁线路
sb.append("类型:").append(poiInfo.ePoiType).append("/n");
}
}
// 将地址信息、兴趣点信息显示在TextView上
addressTextView.setText(sb.toString());
}
/**
* 驾车路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public
void onGetDrivingRouteResult(MKDrivingRouteResult result,
int iError) {
}
/**
* POI搜索结果(范围检索、城市POI检索、周边检索)
*
* @param result 搜索结果
* @param type 返回结果类型(11,12,21:poi列表 7:城市列表)
* @param iError 错误号(0表示正确返回)
*/
@Override
public
void onGetPoiResult(MKPoiResult result,
int type,
int iError) {
}
/**
* 公交换乘路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public
void onGetTransitRouteResult(MKTransitRouteResult result,
int iError) {
}
/**
* 步行路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public
void onGetWalkingRouteResult(MKWalkingRouteResult result,
int iError) {
}
}
}
3)AndroidManifest.xml中的配置
<?xml
version="1.0"
encoding="utf-8"?>
<manifest
xmlns:Android="http://schemas.android.com/apk/res/android"
package="com.liufeng.baidumap"
Android:versionCode="1"
Android:versionName="1.0">
<application
Android:icon="@drawable/icon"
android:label="@string/app_name">
<activity
Android:name=".QueryAddressActivity"
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>
<uses-sdk
Android:minSdkVersion="4"
/>
<!-- 访问网络的权限 -->
<uses-permission
Android:name="android.permission.INTERNET"
/>
<!-- 访问精确位置的权限 -->
<uses-permission
Android:name="android.permission.ACCESS_FINE_LOCATION"
/>
<!-- 访问网络状态的权限 -->
<uses-permission
Android:name="android.permission.ACCESS_NETWORK_STATE"
/>
<!-- 访问WIFI网络状态的权限 -->
<uses-permission
Android:name="android.permission.ACCESS_WIFI_STATE"
/>
<!-- 改变WIFI网络状态的权限 -->
<uses-permission
Android:name="android.permission.CHANGE_WIFI_STATE"
/>
<!-- 读写存储卡的权限 -->
<uses-permission
Android:name="android.permission.WRITE_EXTERNAL_STORAGE"
/>
<!-- 读取电话状态的权限 -->
<uses-permission
Android:name="android.permission.READ_PHONE_STATE"
/>
</manifest>
locationManager = (LocationManager) GPSTestActivity.this.getSystemService(Context.LOCATION_SERVICE);
String provier = LocationManager.GPS_PROVIDER; location = locationManager.getLastKnownLocation(provier);
if (location == null) { Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);
provier = locationManager.getBestProvider(criteria, true);
location = locationManager.getLastKnownLocation(provier); }
相关文章推荐
- Android高德地图设置中心点图标,通过逆地理编码实时获取中心点的经纬度和详细位置
- java调用百度地图API依据地理位置中文获取经纬度
- Android通过百度地图API用Service和Alarm在后台定时获取地理位置信息
- Android中获取地理位置经纬度
- Android通过百度地图API用Service和Alarm在后台定时获取地理位置信息
- java调用百度地图API根据地理位置中文获取经纬度
- 百度地图API,获取地址的经纬度,根据坐标位置获取地理位置,,获取两个地理坐标的直线距离
- Android根据IP获取地理位置,精确到经纬度
- Android 通过经纬度获取地理位置信息
- android:GPS获取location经纬度并用谷歌解析为地理位置名称
- android菜鸟学习笔记31----Android使用百度地图API(二)获取地理位置及地图控制器的简单使用
- Android 通过经纬度获取地理位置信息
- 【Java】 java调用百度地图API根据地理位置中文获取经纬度 地址备忘
- 用户Ip地址和百度地图api接口获取用户地理位置(经纬度坐标,城市)
- Android通过百度地图API用Service和Alarm在后台定时获取地理位置信息
- java调用百度地图API根据地理位置获取经纬度
- java调用百度地图API通过URL根据地理位置中文处理返回值获取经纬度
- java调用百度地图API根据地理位置中文获取经纬度
- Android 如何获取手机经纬度和地理位置信息
- Android 百度地图—反地理编码—获取当前位置附近的大厦楼宇