package com.zss.map;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.List;
import java.util.Locale;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
public class My_Map extends MapActivity {
/** Called when the activity is first created. */
private TextView text_long;
private Button button_begin,button_over;
private final static String tag = "ssss";
private static MapView map;
private static MapController mc;
private static int intZoomLevel = 10;
private double lat = 0;
private double lng = 0;
static final private int MENU_Search = Menu.FIRST;
static final private int MENU_Directions = Menu.FIRST + 1;
static final private int MENU_Point = Menu.FIRST + 2;
static final private int MENU_Location = Menu.FIRST + 3;
static final private int MENU_Layers = Menu.FIRST + 4;
static final private int MENU_Track = Menu.FIRST + 5;
static final private int MENU_Exit = Menu.FIRST + 6;
private GeoPoint currentGeoPoint;
private LocationManager mLocationManager;
private Location mLocation;
private String strLocationProvider = LocationManager.GPS_PROVIDER;//默认是gps定位
private boolean if_run = false;
private GeoPoint g_next;
private double distance = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(tag, "ddddd");
text_long = (TextView) findViewById(R.id.long_text);
button_begin = (Button) findViewById(R.id.begin);
button_over = (Button) findViewById(R.id.over);
text_long.setVisibility(View.GONE);
button_begin.setVisibility(View.GONE);
button_over.setVisibility(View.GONE);
map = (MapView) findViewById(R.id.map);
map.setBuiltInZoomControls(true);
mc = map.getController();
getArgs();
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
mLocation = getLocationProvider(mLocationManager);
Log.i("[My_Map.onCreate()]", "***mLocation :" + mLocation);
if (mLocation != null) {
processLocationUpdated(mLocation);
}
mLocationManager.requestLocationUpdates(strLocationProvider, 2000, 10,
mLocationListener);//应当谨慎使用,过于频繁地获得位置更新可能加快电池电量的消耗速度并使应用程序产生太多的无用数据。
}
private void getArgs() {
try {
Bundle bundle = this.getIntent().getExtras();
if (bundle != null) {
lat = bundle.getDouble("lat");
lng = bundle.getDouble("lng");
refreshMap();
}
} catch (Exception e) {
// TODO Auto-generated catch block
// Log.d(tag, e.getMessage());
e.printStackTrace();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
menu.add(0, MENU_Search, 0, R.string.Search).setIcon(
android.R.drawable.ic_search_category_default);
menu.add(0, MENU_Directions, 0, R.string.Directions).setIcon(
android.R.drawable.ic_menu_directions);
menu.add(0, MENU_Point, 0, R.string.Point).setIcon(
android.R.drawable.ic_menu_myplaces);
menu.add(0, MENU_Location, 0, R.string.Location).setIcon(
android.R.drawable.ic_menu_mylocation);
menu.add(0, MENU_Layers, 0, R.string.Layers).setIcon(
android.R.drawable.ic_menu_view);
menu.add(0, MENU_Track, 0, R.string.Track).setIcon(
android.R.drawable.ic_menu_upload);
menu.add(0, MENU_Exit, 0, R.string.Exit).setIcon(
android.R.drawable.ic_menu_close_clear_cancel);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case MENU_Search:
Search();
break;
case MENU_Directions:
Directions();
break;
case MENU_Point:
Point();
break;
case MENU_Location:
Location();
break;
case MENU_Layers:
selectViewMode();
break;
case MENU_Track:
track();
break;
case MENU_Exit:
My_Map.this.finish();
break;
}
return super.onOptionsItemSelected(item);
}
public final LocationListener mLocationListener = new LocationListener() {
public void onLocationChanged(android.location.Location location) {
// 根据Location获取位置信息
if(if_run){
g_next = getGeoByLocation(location);
setRoute();
refreshMapView();
distance += GetDistance(currentGeoPoint,g_next);
text_long.setText("移动距离: " + format(distance)+"M");
g_next = currentGeoPoint;
}
processLocationUpdated(location);
}
public void onProviderDisabled(String provider) {
// Provider被disable时触发此函数,比如GPS被关闭
}
public void onProviderEnabled(String provider) {
// Provider被enable时触发此函数,比如GPS被打开
}
public void onStatusChanged(String provider, int status, Bundle extras) {
// Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
}
};
private void processLocationUpdated(Location location) {
// TODO Auto-generated method stub
currentGeoPoint = getGeoByLocation(location);
g_next = currentGeoPoint;
refreshMapViewByGeoPoint(currentGeoPoint, map, intZoomLevel, true);
}
//根据经纬度获取GeoPoint对象
private GeoPoint getGeoByLocation(Location location) {
// TODO Auto-generated method stub
GeoPoint gp = null;
try {
if (location != null) {
double geolat = location.getLatitude() * 1E6;
double geolng = location.getLongitude() * 1E6;
gp = new GeoPoint((int) (geolat), (int) (geolng));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return gp;
}
private Location getLocationProvider(LocationManager mLocationManager) {
//android location provider有两个
//LocationManager.GPS_PROVIDER和 LocationManager.NETWORK_PROVIDER
//该方法可以根据当前设备情况自动选择哪种provider
Location location = null;
try {
Criteria mcriteria = new Criteria();
mcriteria.setAccuracy(Criteria.ACCURACY_FINE);//设置为最大精度
mcriteria.setAltitudeRequired(false);//不要求海拔信息
mcriteria.setBearingRequired(false);//不要求方位信息
mcriteria.setCostAllowed(true);//是否允许付费
mcriteria.setPowerRequirement(Criteria.POWER_LOW);//对电量要求
//mLocationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
strLocationProvider = mLocationManager.getBestProvider(mcriteria, true);
location = mLocationManager.getLastKnownLocation(strLocationProvider);//获取位置信息
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return location;
}
//根据GeoPoint获取地址
public String getAddresByGeoPoint(GeoPoint gp) {
String str = "";
try {
if (gp != null) {
Geocoder gc = new Geocoder(My_Map.this, Locale.getDefault());
double geoLat = (int) gp.getLatitudeE6() / 1E6;
double geolng = (int) gp.getLongitudeE6() / 1E6;
List<Address> lstAddress = gc
.getFromLocation(geoLat, geolng, 1);
StringBuilder sb = new StringBuilder();
if (lstAddress.size() > 0) {
Address adsLocation = lstAddress.get(0);
for (int i = 0; i < adsLocation.getMaxAddressLineIndex(); i++) {
sb.append(adsLocation.getAddressLine(i))
android map应用
需积分: 4 164 浏览量
2011-10-27
16:32:48
上传
评论
收藏 154KB RAR 举报
zhoushuangsheng429
- 粉丝: 1
- 资源: 14
最新资源
- 5G网络基础培训课件.zip
- 2024-spring-HIT-CS-大作业
- yolo目标检测项目实验
- downloadFile-1.hc
- C++课程设计:基于Qt的航班信息管理系统
- ADS7822UVerilog驱动,前面传的有点问题
- 基于python的高性能爬虫程序,使用了多线程+缓存+xpath实现的,这里以彼-岸图库为例,实现,仅用于学习交流
- 中分辨率成像光谱仪(MODIS)烧毁面积产品信息MODIS-C6-BA-User-Guide-1.2.pdf
- Screenshot_20240427_172613_com.huawei.browser.jpg
- 关于学习Python的相关资源网站链接及相关介绍.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈