main.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:id="@+id/TextView01" /><com.google.android.maps.MapViewandroid:id="@+id/MapView01"android:layout_width="fill_parent"android:layout_height="fill_parent"android:apiKey="0axCo4Wu7FStW2yuF-kfg0X8Rr50919GvKpiCrA" /></LinearLayout>


AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.magus.location"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="8" /><applicationandroid:icon="@drawable/icon"android:label="@string/app_name"><uses-libraryandroid:name="com.google.android.maps" /><activityandroid:name="Activity01"android:label="@string/app_name"><intent-filter><actionandroid:name="android.intent.action.MAIN" /><categoryandroid:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application><uses-permissionandroid:name="android.permission.INTERNET" /><uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION" /></manifest>



Activity01:
package com.magus.location;import java.io.IOException;import java.util.List;import java.util.Locale;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.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Point;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.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.TextView;public class Activity01 extends MapActivity {public MapController mapController;public MyLocationOverlay myPosition;public MapView myMapView;private static final int ZOOM_IN = Menu.FIRST;private static final int ZOOM_OUT = Menu.FIRST + 1;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);// 取得LocationManager实例LocationManager locationManager;String context = Context.LOCATION_SERVICE;locationManager = (LocationManager) getSystemService(context);myMapView = (MapView) findViewById(R.id.MapView01);// 取得MapController实例,控制地图mapController = myMapView.getController();// 设置显示模式myMapView.setSatellite(true);myMapView.setStreetView(true);// 设置缩放控制,这里我们自己实现缩放菜单myMapView.displayZoomControls(false);// 设置使用MyLocationOverlay来绘图mapController.setZoom(17);myPosition = new MyLocationOverlay();List<Overlay> overlays = myMapView.getOverlays();overlays.add(myPosition);// 设置Criteria(服务商)的信息Criteria criteria = new Criteria();// 经度要求criteria.setAccuracy(Criteria.ACCURACY_FINE);criteria.setAltitudeRequired(false);criteria.setBearingRequired(false);criteria.setCostAllowed(false);criteria.setPowerRequirement(Criteria.POWER_LOW);// 取得效果最好的criteriaString provider = locationManager.getBestProvider(criteria, true);// 得到坐标相关的信息Location location = locationManager.getLastKnownLocation(provider);// 更新坐标updateWithNewLocation(location);// 注册一个周期性的更新,3000ms更新一次// locationListener用来监听定位信息的改变locationManager.requestLocationUpdates(provider, 3000, 0,locationListener);}private void updateWithNewLocation(Location location) {String latLongString;TextView myLocationText = (TextView) findViewById(R.id.TextView01);String addressString = "没有找到地址\n";if (location != null) {// 为绘制标志的类设置坐标myPosition.setLocation(location);// 取得经度和纬度Double geoLat = location.getLatitude() * 1E6;Double geoLng = location.getLongitude() * 1E6;// 将其转换为int型GeoPoint point = new GeoPoint(geoLat.intValue(), geoLng.intValue());// 定位到指定坐标mapController.animateTo(point);double lat = location.getLatitude();double lng = location.getLongitude();latLongString = "经度:" + lat + "\n纬度:" + lng;double latitude = location.getLatitude();double longitude = location.getLongitude();// 根据地理环境来确定编码Geocoder gc = new Geocoder(this, Locale.getDefault());try {// 取得地址相关的一些信息、经度、纬度List<Address> addresses = gc.getFromLocation(latitude,longitude, 1);StringBuilder sb = new StringBuilder();if (addresses.size() > 0) {Address address = addresses.get(0);for (int i = 0; i < address.getMaxAddressLineIndex(); i++)sb.append(address.getAddressLine(i)).append("\n");sb.append(address.getLocality()).append("\n");sb.append(address.getPostalCode()).append("\n");sb.append(address.getCountryName());addressString = sb.toString();}} catch (IOException e) {}} else {latLongString = "没有找到坐标.\n";}// 显示myLocationText.setText("你当前的坐标如下:\n" + latLongString + "\n"+ addressString);}private final LocationListener locationListener = new LocationListener() {// 当坐标改变时触发此函数public void onLocationChanged(Location location) {updateWithNewLocation(location);}// Provider禁用时触发此函数,比如GPS被关闭public void onProviderDisabled(String provider) {updateWithNewLocation(null);}// Provider启用时触发此函数,比如GPS被打开public void onProviderEnabled(String provider) {}// Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数public void onStatusChanged(String provider, int status, Bundle extras) {}};protected boolean isRouteDisplayed() {return false;}// 为应用程序添加菜单public boolean onCreateOptionsMenu(Menu menu) {super.onCreateOptionsMenu(menu);menu.add(0, ZOOM_IN, Menu.NONE, "放大");menu.add(0, ZOOM_OUT, Menu.NONE, "缩小");return true;}public boolean onOptionsItemSelected(MenuItem item) {super.onOptionsItemSelected(item);switch (item.getItemId()) {case (ZOOM_IN):// 放大mapController.zoomIn();return true;case (ZOOM_OUT):// 缩小mapController.zoomOut();return true;}return true;}class MyLocationOverlay extends Overlay {Location mLocation;// 在更新坐标时,设置该坐标,以便画图public void setLocation(Location location) {mLocation = location;}@Overridepublic boolean draw(Canvas canvas, MapView mapView, boolean shadow,long when) {super.draw(canvas, mapView, shadow);Paint paint = new Paint();Point myScreenCoords = new Point();// 将经纬度转换成实际屏幕坐标GeoPoint tmpGeoPoint = new GeoPoint((int) (mLocation.getLatitude() * 1E6), (int) (mLocation.getLongitude() * 1E6));//模拟器上运行时必须先给定一个坐标,否则报空指针,真机运行时打开上面的注释//GeoPoint tmpGeoPoint = new GeoPoint(35410000, 139460000);mapView.getProjection().toPixels(tmpGeoPoint, myScreenCoords);paint.setStrokeWidth(1);paint.setARGB(255, 255, 0, 0);paint.setStyle(Paint.Style.STROKE);Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.home);canvas.drawBitmap(bmp, myScreenCoords.x, myScreenCoords.y, paint);canvas.drawText("Here am I", myScreenCoords.x, myScreenCoords.y,paint);return true;}}}

更多相关文章

  1. Android之获取控件的坐标
  2. 【Android】手机地图功能——利用手机GPS获取用户地理坐标
  3. android百度地图定位,点击给定经纬度的某点进行弹窗
  4. android坐标图解
  5. Android 的坐标系及矩阵变换
  6. Android进阶之光读书笔记:View体系(一) View与 ViewGroup、View坐标
  7. Android 定位地址,获取经纬度,并转换为中文地址

随机推荐

  1. 为Android加入busybox工具
  2. android布局tips,基础知识搜集
  3. android shape的使用
  4. android HAL介绍
  5. Android中的坐标系以及获取坐标的方法
  6. Android(安卓)各种实现Tab效果的实现方式
  7. Android(安卓)内核简单分析
  8. Android(安卓)开发笔记 —— AndroidStud
  9. Android层次化安全架构及核心组件概览
  10. 应用界面主题Theme使用方法