调用高德地图api 实现地址解析

应业务需求,实现输入一个地址,调用高德的地图的api将返回解析后的地址

高德地图的官方说明:https://lbs.amap.com/api/webservice/guide/api/georegeo


第一步,注册一个账号,创建一个应用取得appkey


第二步,仔细研读官网api,封装一个返回的实体类

package com.handkoo.entity;

import java.util.List;

/**
 * 输入地址返回解析结果的类
 * 
 * @author cp
 *
 */
public class GaodeLocation {
	private String status;// 结果状态0,表示失败,1:表示成功
	private String count;// 返回结果的数目
	private String info;// 返回状态说明
	private List<Geocodes> geocodes;// 识别的结果列表

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public String getCount() {
		return count;
	}

	public void setCount(String count) {
		this.count = count;
	}

	public String getInfo() {
		return info;
	}

	public void setInfo(String info) {
		this.info = info;
	}

	public List<Geocodes> getGeocodes() {
		return geocodes;
	}

	public void setGeocodes(List<Geocodes> geocodes) {
		this.geocodes = geocodes;
	}

}

package com.handkoo.entity;

import javax.print.DocFlavor.STRING;

public class Geocodes {
	// 结构化地址信息
	private String formatted_address;
	// 所在省
	private String province;
	// 城市
	private String city;
	// 城市编码
	private String citycode;
	// 地址所在的区
	private String district;
	// 地址所在的乡镇
	private String township;
	// 街道
	private String street;
	// 门牌
	private String number;
	// 区域编码
	private String adcode;
	// 坐标点
	private String location;
	// 匹配级别
	private String level;

	public String getFormatted_address() {
		return formatted_address;
	}

	public void setFormatted_address(String formatted_address) {
		this.formatted_address = formatted_address;
	}

	public String getProvince() {
		return province;
	}

	public void setProvince(String province) {
		this.province = province;
	}

	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}

	public String getCitycode() {
		return citycode;
	}

	public void setCitycode(String citycode) {
		this.citycode = citycode;
	}

	public String getDistrict() {
		return district;
	}

	public void setDistrict(String district) {
		this.district = district;
	}

	public String getTownship() {
		return township;
	}

	public void setTownship(String township) {
		this.township = township;
	}

	public String getStreet() {
		return street;
	}

	public void setStreet(String street) {
		this.street = street;
	}

	public String getNumber() {
		return number;
	}

	public void setNumber(String number) {
		this.number = number;
	}

	public String getAdcode() {
		return adcode;
	}

	public void setAdcode(String adcode) {
		this.adcode = adcode;
	}

	public String getLocation() {
		return location;
	}

	public void setLocation(String location) {
		this.location = location;
	}

	public String getLevel() {
		return level;
	}

	public void setLevel(String level) {
		this.level = level;
	}

}


第三步,调用api请求,解析返回的JSON数据封装到对象中

package com.handkoo.util;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.handkoo.entity.GaodeLocation;
import com.handkoo.entity.Geocodes;

/**
 * 高德地图测试
 * 
 * @author cp
 *
 */
public class GaoDeMapUtil {
	private static final Logger logger = LoggerFactory.getLogger(GaoDeMapUtil.class);

	// 高德应用的地址
	private static String gaodeAppID = "########";

	// 地理编码地址
	private static String map_codeurl = "http://restapi.amap.com/v3/geocode/geo?parameters";

	/*
	 * static { Properties properties = new Properties(); try { gaodeAppID =
	 * properties.getProperty("appkey"); } catch (Exception e) {
	 * e.printStackTrace(); } }
	 */

	/**
	 * 输入地址返回识别后的信息
	 * 
	 * @param address
	 * @return 返回的类gaodelocation,详见类
	 */
	public GaodeLocation getLocatoin(String address) {
		GaodeLocation location = null;
		if (address != null) {
			try {
				location = new GaodeLocation();
				String url = map_codeurl.replace("parameters", "");
				String params = "key=" + gaodeAppID + "&address=" + address;
				logger.info("高德地图params:" + params);
				String result = OKHttpUtil.httpPost(url, params);

				logger.info("高德地图返回结果:" + result);
				JSONObject jsonObject = JSONObject.parseObject(result);

				// 解析json
				location.setStatus(jsonObject.getString("status"));
				location.setInfo(jsonObject.getString("info"));
				location.setCount(jsonObject.getString("count"));
				List<Geocodes> geocodes = new ArrayList<>();
				JSONArray jsonArray = jsonObject.getJSONArray("geocodes");
				// 遍历解析出来的结果
				if ((jsonArray != null) && (jsonArray.size() > 0)) {
					JSONObject jo = (JSONObject) jsonArray.get(0);
					Geocodes go = new Geocodes();
					go.setFormatted_address(jo.getString("formatted_address"));
					go.setProvince(jo.getString("province"));
					go.setCitycode(jo.getString("citycode"));
					go.setCity(jo.getString("city"));
					go.setDistrict(jo.getString("district"));
					// 地址所在的乡镇
					JSONArray ts = jo.getJSONArray("township");
					if (ts != null && ts.size() > 0) {
						go.setTownship(ts.getString(0));
					}
					// 地址编号
					go.setAdcode(jo.getString("adcode"));
					// 街道
					JSONArray jd = jo.getJSONArray("street");
					if (jd != null && jd.size() > 0) {
						go.setStreet(jd.getString(0));
					}
					// 号码
					JSONArray hm = jo.getJSONArray("number");
					if (hm != null && hm.size() > 0) {
						go.setStreet(hm.getString(0));
					}
					go.setLocation(jo.getString("location"));
					go.setLevel(jo.getString("level"));
					geocodes.add(go);
				}
				location.setGeocodes(geocodes);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return location;
	}

	public static void main(String[] args) {
		GaoDeMapUtil gdm = new GaoDeMapUtil();
		GaodeLocation result = gdm.getLocatoin("槐古豪庭");
		System.out.println(JSON.toJSONString(result));
	}
}

第四步,测试结果:


### 回答1: 语法错误:错误:找不到模块'cache-loader'。 这个错误通常是由于缺少依赖项或安装不正确的模块引起的。您可以尝试重新安装缺少的模块或更新您的依赖项。如果问题仍然存在,请检查您的代码并确保正确导入了所需的模块。 ### 回答2: 发生此错误,说明在 Node.js 应用程序中引用了 'cache-loader' 模块,但 Node.js 无法找到此模块。故此错误出现通常有以下原因: 1. 模块没有正确安装:'cache-loader' 模块可能没有被正确地安装。 解决方法:使用 npm install cache-loader -g 命令全局安装此模块。 2. 模块被误删除:如果曾经安装过 'cache-loader' 模块,但删除了它,可能会导致这个错误。 解决方法:重新安装 'cache-loader' 模块即可。 3. Node.js 环境版本问题:'cache-loader' 模块需要 Node.js 环境支持,如果使用的 Node.js 版本不兼容,则会提示找不到模块。 解决方法:升级或降级 Node.js 环境即可。 4. 项目依赖不一致:项目中的其他依赖可能不兼容 'cache-loader' 模块,导致找不到此模块。 解决方法:尝试升级或降级项目中的其他依赖以解决依赖不一致问题。 总之,如果遇到此错误,最好确定 'cache-loader' 模块是否存在,如果存在,则需要查明问题的具体原因,并采取适当的解决方法。 ### 回答3: 该错误是因为在使用Webpack构建时,无法找到所需的模块“cache-loader”。这个模块通常是用来加速Webpack构建时间的。所以当我们试图使用缓存时,却找不到该模块时,就会出现这种错误。 如果出现这种错误,通常可以通过以下步骤来解决: 第一步是确认是否已经安装了“cache-loader”模块。如果没有安装,则需要使用npm命令来安装该模块。在终端中进入项目根目录,执行以下命令:npm install cache-loader --save-dev。 第二步是检查项目中是否存在依赖该模块的代码。如果没有,则需要在Webpack配置文件中将其删除。如果存在,则需要将其正确地引入到Webpack配置中。在Webpack配置文件中找到与该模块相关的配置项,将其添加到“module.rules”或“module.loaders”中。 第三步是重新启动Webpack构建,并确认是否还出现该错误。如果该错误仍然存在,则需要进一步排除问题。可以尝试升级或回滚该模块的版本,或尝试删除缓存和重新安装依赖项等方法。 总之,要解决这个错误,我们需要了解Webpack的基本概念和配置,掌握一些基本的调试技巧,以及有耐心、仔细地排除问题。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值