`

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 通过地名获得经纬度并标识在地图上

 

分享到:
评论
1 楼 xkb281 2012-08-10  
我草 
百度地图 你用的是google map的工具类

相关推荐

    第一行代码 android学习笔记 完整版

    "Android学习笔记" Android学习笔记是Android开发者的必读书籍,书中涵盖了Android系统架构、Activity、Intent、资源管理等多方面的知识。本笔记对应的学习资源《第一行代码》是Android开发者的入门必读书籍,书中...

    QT5使用百度地图实现经典经纬度查询

    QT5使用百度地图实现经典经纬度查询的知识点涵盖了多个方面,包括QT框架的理解与应用、C++编程基础、网络通信以及地图API的使用。以下是对这些知识点的详细说明: 1. **QT框架**:QT是跨平台的应用程序开发框架,...

    Android学习笔记(十)——实现新闻列表

    Android学习笔记(一)——创建第一个Android项目 Android学习笔记(二)android studio基本控件及布局(实现图片查看器) Android学习笔记(三)android studio中CheckBox自定义样式(更换复选框左侧的勾选图像) ...

    Android google Map地图学习

    此资料包含 Android学习笔记 - 地图.doc 通过地名获得经纬度并标识在地图上.doc 点中overlay弹出带尾巴的气泡的实现.doc 传递坐标到Google地图.doc android map.doc Android地图和定位学习总结 .doc 希望对大家有...

    经纬度地图转多普勒天气雷达地图 学习笔记.docx

    ### 经纬度地图转多普勒天气雷达地图学习笔记 #### 一、地图投影基础 在进行经纬度地图到多普勒天气雷达地图转换的过程中,我们首先需要了解地图投影的相关概念。地图投影是将地球表面的信息从球面或者椭球面转移...

    Android学习笔记之百度地图(分条目覆盖物:ItemizedOverlay)

    在Android开发中,百度地图API是一个广泛使用的工具,它提供了丰富的功能,如定位、路径规划、地图渲染等。本文将深入探讨如何利用Android SDK中的`ItemizedOverlay`类来实现地图上的分条目覆盖物,这在显示多个点...

    Android开发学习笔记

    ### Android开发学习笔记 #### Button按钮的实现与交互 在Android开发中,`Button`控件是最常用的用户界面元素之一,用于触发特定的操作或事件。本文档将详细讲解如何创建并自定义一个简单的按钮,并设置点击事件...

    ArcGIS for android学习笔记

    本篇学习笔记主要涵盖了ArcGIS for Android的基础配置和核心组件MapVie的使用。 首先,配置ArcGIS for Android项目需要在`Project`级别的`build.gradle`文件中添加Esri的仓库,确保能获取到所需的库。接着,在`...

    Android地图学习

    总之,Android地图学习是一个广泛的领域,包括地图的初始化、定位服务、自定义元素和交互设计。通过深入研究这些文档,开发者可以掌握构建强大地图应用所需的关键技能。同时,持续关注官方更新和最佳实践,以确保...

    Android开发学习笔记(整理)

    Android开发学习笔记(整理),整理论坛android学习笔记,较完整的讲解了android的内容。包括:view、activity、service、intent、广播机制、http连接、数据sqllite存储、后台线程、各种layout、偏好、本地文件操作、...

    android 学习笔记

    Android学习笔记(1)-永远不变的Hello World Google的Android SDK发布也有一段时间了,一直想研究一下却苦于找不到时间。利用这个周未,开始强迫自己再次进入学习状态,原因很简单:我看好开放的gPhone。 SDK的下载...

    Android 学习笔记

    这篇学习笔记主要涵盖了关于布局的一些基本概念,特别是`fill_parent`和`wrap_content`这两种尺寸指定方式,以及如何通过XML布局文件来精确控制组件的位置。 首先,`fill_parent`和`wrap_content`是Android布局中的...

    java学习细节 android学习笔记

    根据给定的信息,我们可以从Java和Android学习笔记中提取出一系列重要的知识点,下面将逐一进行详细解释。 ### Java基础知识 #### 1. 命令行基础操作 - **`javacmd`**: 这个命令是Java命令行工具的一部分,用于...

    Android学习笔记之开发环境搭建(Eclipse和NetBeans).pdf

    Android学习笔记之开发环境搭建(Eclipse和NetBeans).pdf

    android学习笔记之二

    在“android学习笔记之二”中,我们主要探讨的是如何在Android平台上实现一个用户登录的模拟工程。这个项目,名为“UserLoginTestProject”,旨在帮助开发者理解和实践Android应用中的用户认证流程。通过这个实例,...

    Android学习笔记之开发环境搭建(Eclipse和NetBeans)

    Android学习笔记之开发环境搭建(Eclipse和NetBeans)

Global site tag (gtag.js) - Google Analytics