文档章节

高德地图地理编码

Spoon2014
 Spoon2014
发布于 2015/05/27 10:49
字数 1087
阅读 45
收藏 0
import android.app.ProgressDialog;
import android.content.Context;

import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.geocoder.GeocodeAddress;
import com.amap.api.services.geocoder.GeocodeQuery;
import com.amap.api.services.geocoder.GeocodeResult;
import com.amap.api.services.geocoder.GeocodeSearch;
import com.amap.api.services.geocoder.GeocodeSearch.OnGeocodeSearchListener;
import com.amap.api.services.geocoder.RegeocodeQuery;
import com.amap.api.services.geocoder.RegeocodeResult;

/**
 * 地理编码
 * 
 * @author 勺子
 * 
 */
public class GeocoderService implements OnGeocodeSearchListener {
	private Context mContext;
	private String addressName;
	private ProgressDialog mProgressDialog = null;
	private boolean isMove = false;
	/* 搜索实例 */
	private GeocodeSearch mGeocodeSearch;
	/* 地图实例 */
	private AMap mAMap;
	/* 标记实例 */
	private Marker mMarker;
	private LatLonPoint mLatLonPoint;

	/**
	 * 构造方法
	 * 
	 * @param context
	 * @param isMove
	 * @param aMap
	 */
	public GeocoderService(Context context, boolean isMove, AMap aMap) {
		this.mContext = context;
		this.mAMap = aMap;
		this.isMove = isMove;
		init();
	}

	/**
	 * 初始化
	 */
	private void init() {
		mProgressDialog = new ProgressDialog(mContext);
		/* 初始化地址编码搜索 */
		mGeocodeSearch = new GeocodeSearch(mContext);
		mGeocodeSearch.setOnGeocodeSearchListener(this);
		mMarker = mAMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f).icon(
				BitmapDescriptorFactory
						.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
	}

	/**
	 * 响应地理编码
	 * 
	 * @param name
	 */
	public void getLatlon(String name) {
		showDialog();
		// 第一个参数表示地址,第二个参数表示查询城市010,中文或者中文全拼,citycode、adcode
		GeocodeQuery query = new GeocodeQuery(name, "adcode");
		// 设置同步地理编码请求
		mGeocodeSearch.getFromLocationNameAsyn(query);
	}

	/**
	 * 响应逆地理编码
	 * 
	 * @param latLonPoint
	 */
	public void getAddress(LatLonPoint latLonPoint) {
		showDialog();
		this.mLatLonPoint = latLonPoint;
		// 第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系
		RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 200,
				GeocodeSearch.AMAP);
		// 设置同步逆地理编码请求
		mGeocodeSearch.getFromLocationAsyn(query);
	}

	/**
	 * 地理编码查询回调
	 */
	@Override
	public void onGeocodeSearched(GeocodeResult result, int rCode) {
		dismissDialog();
		if (rCode == 0) {
			if (result != null && result.getGeocodeAddressList() != null
					&& result.getGeocodeAddressList().size() > 0) {
				GeocodeAddress address = result.getGeocodeAddressList().get(0);
				addressName = "经纬度值:" + address.getLatLonPoint() + "\n位置描述:"
						+ address.getFormatAddress();
				moveMapAndMarker(address.getLatLonPoint());
				ToastUtil.show(mContext, addressName);
			} else {
				ToastUtil.show(mContext, "对不起,没有搜索到相关数据!");
			}
		} else {
			ToastUtil.show(mContext, "搜索失败,请检查网络连接!");
		}
	}

	/**
	 * 逆地理编码回调
	 */
	@Override
	public void onRegeocodeSearched(RegeocodeResult result, int rCode) {
		dismissDialog();
		if (rCode == 0) {
			if (result != null && result.getRegeocodeAddress() != null
					&& result.getRegeocodeAddress().getFormatAddress() != null) {
				addressName = result.getRegeocodeAddress().getFormatAddress()
						+ "附近";
				moveMapAndMarker(mLatLonPoint);
				ToastUtil.show(mContext, addressName);
			} else {
				ToastUtil.show(mContext, "对不起,没有搜索到相关数据!");
			}
		} else {
			ToastUtil.show(mContext, "搜索失败,请检查网络连接!");
		}
	}

	/**
	 * 移动地图和标记
	 * 
	 * @param latLonPoint
	 */
	private void moveMapAndMarker(LatLonPoint latLonPoint) {
		if (isMove) {
			/* 可视区域动画是指从当前可视区域转换到一个指定位置的可视区域的过程。 */
			mAMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
					AMapUtil.convertToLatLng(latLonPoint), 15));
			/* 设置 marker 的经纬度位置。 */
			mMarker.setPosition(AMapUtil.convertToLatLng(latLonPoint));
		}
	}

	/**
	 * 显示进度条对话框
	 */
	private void showDialog() {
		mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
		mProgressDialog.setIndeterminate(false);
		mProgressDialog.setCancelable(true);
		mProgressDialog.setMessage("正在获取地址...");
		mProgressDialog.show();
	}

	/**
	 * 隐藏进度条对话框
	 */
	private void dismissDialog() {
		if (mProgressDialog != null) {
			mProgressDialog.dismiss();
		}
	}
}
高德官方Demo的几个类
/**
 * 
 */
package com.amap.map3d.demo.util;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import android.text.Html;
import android.text.Spanned;
import android.widget.EditText;

import com.amap.api.maps.model.LatLng;
import com.amap.api.services.core.LatLonPoint;

public class AMapUtil {
	/**
	 * 判断edittext是否null
	 */
	public static String checkEditText(EditText editText) {
		if (editText != null && editText.getText() != null
				&& !(editText.getText().toString().trim().equals(""))) {
			return editText.getText().toString().trim();
		} else {
			return "";
		}
	}

	public static Spanned stringToSpan(String src) {
		return src == null ? null : Html.fromHtml(src.replace("\n", "<br />"));
	}

	public static String colorFont(String src, String color) {
		StringBuffer strBuf = new StringBuffer();

		strBuf.append("<font color=").append(color).append(">").append(src)
				.append("</font>");
		return strBuf.toString();
	}

	public static String makeHtmlNewLine() {
		return "<br />";
	}

	public static String makeHtmlSpace(int number) {
		final String space = "&nbsp;";
		StringBuilder result = new StringBuilder();
		for (int i = 0; i < number; i++) {
			result.append(space);
		}
		return result.toString();
	}

	public static String getFriendlyLength(int lenMeter) {
		if (lenMeter > 10000) // 10 km
		{
			int dis = lenMeter / 1000;
			return dis + ChString.Kilometer;
		}

		if (lenMeter > 1000) {
			float dis = (float) lenMeter / 1000;
			DecimalFormat fnum = new DecimalFormat("##0.0");
			String dstr = fnum.format(dis);
			return dstr + ChString.Kilometer;
		}

		if (lenMeter > 100) {
			int dis = lenMeter / 50 * 50;
			return dis + ChString.Meter;
		}

		int dis = lenMeter / 10 * 10;
		if (dis == 0) {
			dis = 10;
		}

		return dis + ChString.Meter;
	}

	public static boolean IsEmptyOrNullString(String s) {
		return (s == null) || (s.trim().length() == 0);
	}

	/**
	 * 把LatLng对象转化为LatLonPoint对象
	 */
	public static LatLonPoint convertToLatLonPoint(LatLng latlon) {
		return new LatLonPoint(latlon.latitude, latlon.longitude);
	}

	/**
	 * 把LatLonPoint对象转化为LatLon对象
	 */
	public static LatLng convertToLatLng(LatLonPoint latLonPoint) {
		return new LatLng(latLonPoint.getLatitude(), latLonPoint.getLongitude());
	}

	/**
	 * 把集合体的LatLonPoint转化为集合体的LatLng
	 */
	public static ArrayList<LatLng> convertArrList(List<LatLonPoint> shapes) {
		ArrayList<LatLng> lineShapes = new ArrayList<LatLng>();
		for (LatLonPoint point : shapes) {
			LatLng latLngTemp = AMapUtil.convertToLatLng(point);
			lineShapes.add(latLngTemp);
		}
		return lineShapes;
	}

	/**
	 * long类型时间格式化
	 */
	public static String convertToTime(long time) {
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = new Date(time);
		return df.format(date);
	}

	public static final String HtmlBlack = "#000000";
	public static final String HtmlGray = "#808080";
}
package com.amap.map3d.demo.util;

public class ChString {
	public static final String Kilometer = "\u516c\u91cc";// "公里";
	public static final String Meter = "\u7c73";// "米";
	public static final String ByFoot = "\u6b65\u884c";// "步行";
	public static final String To = "\u53bb\u5f80";// "去往";
	public static final String Station = "\u8f66\u7ad9";// "车站";
	public static final String TargetPlace = "\u76ee\u7684\u5730";// "目的地";
	public static final String StartPlace = "\u51fa\u53d1\u5730";// "出发地";
	public static final String About = "\u5927\u7ea6";// "大约";
	public static final String Direction = "\u65b9\u5411";// "方向";

	public static final String GetOn = "\u4e0a\u8f66";// "上车";
	public static final String GetOff = "\u4e0b\u8f66";// "下车";
	public static final String Zhan = "\u7ad9";// "站";

	public static final String cross = "\u4ea4\u53c9\u8def\u53e3"; // 交叉路口
	public static final String type = "\u7c7b\u522b"; // 类别
	public static final String address = "\u5730\u5740"; // 地址
	public static final String PrevStep = "\u4e0a\u4e00\u6b65";
	public static final String NextStep = "\u4e0b\u4e00\u6b65";
	public static final String Gong = "\u516c\u4ea4";
	public static final String ByBus = "\u4e58\u8f66";
	public static final String Arrive = "\u5230\u8FBE";// 到达
}
/**
 * 
 */
package com.amap.map3d.demo.util;

import android.content.Context;
import android.widget.Toast;

public class ToastUtil {

	public static void show(Context context, String info) {
		Toast.makeText(context, info, Toast.LENGTH_LONG).show();
	}

	public static void show(Context context, int info) {
		Toast.makeText(context, info, Toast.LENGTH_LONG).show();
	}
}


© 著作权归作者所有

下一篇: 可变参数
Spoon2014
粉丝 0
博文 47
码字总数 12039
作品 0
太原
程序员
私信 提问
高德地图逆地理编码的的回调函数加什么东西吗?为什么我的程序没有回调

高德地图逆地理编码的的回调函数加什么东西吗?为什么我的程序没有回调 -(void)reverseGeocodingSearch:(MAReverseGeocodingSearchOption*)geoCodingSearchOption Result:(MAReverseGeocodin...

夏柳柳
2012/09/13
2.9K
0
【高德地图API】从零开始学高德JS API(八)——地址解析与逆地址解析

摘要:无论是百度LBS开放平台,还是高德LBS开放平台,其调用量最高的接口,必然是定位,其次就是地址解析了,又称为地理编码。地址解析,就是将地址转换为经纬度。而逆地址解析,就是将经纬度...

酸奶小妹GIS
2014/07/23
0
0
【高德地图API】从零开始学高德JS API(八)——地址解析与逆地址解析

摘要:无论是百度LBS开放平台,还是高德LBS开放平台,其调用量最高的接口,必然是定位,其次就是地址解析了,又称为地理编码。地址解析,就是将地址转换为经纬度。而逆地址解析,就是将经纬度...

酸奶小妹GIS
2014/07/23
0
0
基于高德地图的位置选择插件--Bootstrap-AMapPositionPicker

bootstrap.AMapPositionPicker是一个高德地图位置选择jQuery插件。主要特性有: data-*属性配置 字段验证 字段控件绑定 支持高德地图地理逆编码 自定义Modal外观样式 效果图...

Kinegratii
2016/12/11
4.8K
0
iOS定位服务与地图应用开发:高德地图开发

由于博客迁移至www.coderyi.com,文章请看http://www.coderyi.com/archives/419 之前工作在一家智能设备的公司,做过一个亲友定位监控系统,类似现在比较流行的360儿童手环。所以这里简单介绍...

flyicarus
2014/07/09
24.9K
1

没有更多内容

加载失败,请刷新页面

加载更多

以GPS为例,深入浅出讲解射频接收路径的匹配调试流程

RF接收路径的匹配流程----以GPS为例 调Matching前,至少准备两块板子。 一块完整PCB,有上全部零件 : 一块裸版,完全都没上零件 : 匹配前注意事项—铜管 可能很多人忽略这点,但其实这才是...

demyar
27分钟前
11
0
TI AM570x浮点DSP C66x + ARM Cortex-A15开发板的LCD触摸屏接口、LED指示灯

TL570x-EVM是一款由创龙基于SOM-TL570x核心板设计的开发板,它为用户提供了SOM-TL570x核心板的测试平台,用于快速评估SOM-TL570x核心板的整体性能。 TL570x-EVM底板采用沉金无铅工艺的4层板设...

Tronlong创龙
27分钟前
8
0
docker部署springboot项目

前提条件: 1.可以运行jar包的环境 2.机器上已经安装了docker 3.准备部署的springboot的jar包 4.Dockerfile文件 首先在xshell中连接服务器,然后再创建docker_test,在docker_test下创建jar...

故久呵呵
33分钟前
6
0
MaxCompute问答整理之10月

本文是基于本人对MaxCompute产品的学习进度,再结合开发者社区里面的一些问题,进而整理成文。希望对大家有所帮助。 问题一、DataStudio中是否可以通过shell节点调取MaxCompute sql语句? 不...

一肥仔
33分钟前
7
0
GMAT阅读高速解题6招秘籍分享

在做GMAT阅读题时,你是否曾因为文章内容无聊昏昏欲睡?是否看到第二段就神游不知所云?又是否看完问题选择觉得似乎每个都是正确答案?如果上面这些情况曾经发生在你身上,那么你的阅读方式和心...

bole6
34分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部