Android学习笔记之地图(根据地名查询经纬度)

 

Android 通过地名获得经纬度并标识在地图上   -- 未审核

编辑文档

要是调用GeocodergetFromLocationName(),该方法可以传入地名。

  在使用该方法前需要geo = new Geocoder(this, Locale.CHINA);

  不然在地图上是查询不到的。

  Java代码

  /**

  *

  */

  package com.decarta.demo;

  import java.io.IOException;

  import java.util.List;

  import java.util.Locale;

  import Android.app.AlertDialog;

  import android.app.Dialog;

  import android.content.Context;

  import android.graphics.Bitmap;

  import android.graphics.BitmapFactory;

  import android.graphics.Canvas;

  import android.graphics.Point;

  import android.location.Address;

  import android.location.Geocoder;

  import android.os.Bundle;

  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 com.google.android.maps.Projection;

  /**

  * @author Tony Shen

  *

  */

  public class Main extends MapActivity {

  // 地图显示控制相关变量定义

  private MapView map = null;

  private MapController mapCon;

  private Geocoder geo;

  private static final int ERROR_DIALOG = 1;

  /** Called when the activity is first created. */

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  geo = new Geocoder(this, Locale.CHINA);

  // 获取MapView

  map = (MapView) findViewById(R.id.map);

  // 设置显示模式

  map.setTraffic(true);

  map.setSatellite(false);

  map.setStreetView(true);

// 设置可以缩放

  map.setBuiltInZoomControls(true);

  List

addresses = null;
  try {

  addresses = geo.getFromLocationName("江苏省苏州市寒山寺", 1);

  } catch (IOException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  }

  if(addresses.size() == 0) {

  showDialog(ERROR_DIALOG);

  GeoPoint geoBeijing = new GeoPoint(

  (int) (39.906033* 1000000),

  (int) (116.397700 * 1000000));

  mapCon = map.getController();

  mapCon.setCenter(geoBeijing);

  mapCon.setZoom(4);

  } else {

  Address address = addresses.get(0);

  // 设置初始地图的中心位置

  GeoPoint geoPoint = new GeoPoint(

  (int) (address.getLatitude() * 1000000),

  (int) (address.getLongitude() * 1000000));

  mapCon = map.getController();

  mapCon.setCenter(geoPoint);

  mapCon.setZoom(16);

  List overlays = this.map.getOverlays();

  overlays.add(new PositionOverlay(geoPoint, this, R.drawable.ic_red_pin));

  }

  }

  @Override

  protected boolean isRouteDisplayed() {

  return false;

  }

  @Override

  protected Dialog onCreateDialog(int id) {

  return new AlertDialog.Builder(this).setTitle("查询出错哦")

  .setMessage("路名/地名出错,请重新输入!").create();

  }

  class PositionOverlay extends Overlay {

  private GeoPoint geoPoint;

  private Context context;

  private int drawable;

  public PositionOverlay(GeoPoint geoPoint, Context context, int drawable) {

  super();

  this.geoPoint = geoPoint;

  this.context = context;

  this.drawable = drawable;

  }

  @Override

  public void draw(Canvas canvas, MapView mapView, boolean shadow) {

Projection projection = mapView.getProjection();

  Point point = new Point();

  projection.toPixels(geoPoint, point);

  Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),

  drawable);

  canvas.drawBitmap(bitmap, point.x-bitmap.getWidth()/2 , point.y-bitmap.getHeight(), null);

  super.draw(canvas, mapView, shadow);

  }

  }

  }

  /**

  *

  */

  package com.decarta.demo;

  import java.io.IOException;

  import java.util.List;

  import java.util.Locale;

  import android.app.AlertDialog;

  import android.app.Dialog;

  import android.content.Context;

  import android.graphics.Bitmap;

  import android.graphics.BitmapFactory;

  import android.graphics.Canvas;

  import android.graphics.Point;

  import android.location.Address;

  import android.location.Geocoder;

  import android.os.Bundle;

  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 com.google.android.maps.Projection;

  /**

  * @author Tony Shen

  *

  */

  public class Main extends MapActivity {

  // 地图显示控制相关变量定义

  private MapView map = null;

  private MapController mapCon;

  private Geocoder geo;

  private static final int ERROR_DIALOG = 1;

  /** Called when the activity is first created. */

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  geo = new Geocoder(this, Locale.CHINA);

// 获取MapView

  map = (MapView) findViewById(R.id.map);

  // 设置显示模式

  map.setTraffic(true);

  map.setSatellite(false);

  map.setStreetView(true);

  // 设置可以缩放

  map.setBuiltInZoomControls(true);

  List

addresses = null;
  try {

  addresses = geo.getFromLocationName("江苏省苏州市寒山寺", 1);

  } catch (IOException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  }

  if(addresses.size() == 0) {

  showDialog(ERROR_DIALOG);

  GeoPoint geoBeijing = new GeoPoint(

  (int) (39.906033* 1000000),

  (int) (116.397700 * 1000000));

  mapCon = map.getController();

  mapCon.setCenter(geoBeijing);

  mapCon.setZoom(4);

  } else {

  Address address = addresses.get(0);

  // 设置初始地图的中心位置

  GeoPoint geoPoint = new GeoPoint(

  (int) (address.getLatitude() * 1000000),

  (int) (address.getLongitude() * 1000000));

  mapCon = map.getController();

  mapCon.setCenter(geoPoint);

  mapCon.setZoom(16);

  List overlays = this.map.getOverlays();

  overlays.add(new PositionOverlay(geoPoint, this, R.drawable.ic_red_pin));

  }

  }

  @Override

  protected boolean isRouteDisplayed() {

  return false;

  }

  @Override

  protected Dialog onCreateDialog(int id) {

  return new AlertDialog.Builder(this).setTitle("查询出错哦")

  .setMessage("路名/地名出错,请重新输入!").create();

  }

  class PositionOverlay extends Overlay {

  private GeoPoint geoPoint;

  private Context context;

  private int drawable;

  public PositionOverlay(GeoPoint geoPoint, Context context, int drawable)

{

  super();

  this.geoPoint = geoPoint;

  this.context = context;

  this.drawable = drawable;

  }

  @Override

  public void draw(Canvas canvas, MapView mapView, boolean shadow) {

  Projection projection = mapView.getProjection();

  Point point = new Point();

  projection.toPixels(geoPoint, point);

  Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),

  drawable);

  canvas.drawBitmap(bitmap, point.x-bitmap.getWidth()/2 , point.y-bitmap.getHeight(), null);

  super.draw(canvas, mapView, shadow);

  }

  }

  }

  效果图如下:

Android 通过地名获得经纬度并标识在地图上

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值