目录
事件起因环境和工具操作过程结束语事件起因
在项目中有时会使用到地图编码或逆编码,比如在记录物流运输过程时,会记录这些物资的收发货地址或运输途中的地址,便可将经纬度作为一个位置指标进行获取和存储,当然具体的中文地址
地图编码:将中文地址转换为经纬度;
地图逆编码:将经纬度转变为中文地址。
环境和工具
idea
操作过程
一个app应用使用地图逆编码api的流程:手机端获取到定位的位置(其实是经纬度),使用该经纬度就可调用地图逆编码api从而得到 具体的中文地址。
工具类如下所示:
使用指南:直接运行里面的main方法的话,会调用高德地图提供的api中的逆地理编码将准备好的经纬度"116.23128", “40.22077” 转换为中文地址
里面的key各位需要自己去申请一下,我后面做自己的项目可能会将这个服务的接口给关掉,里面的key就会失效,代码里面的注释有提供高德和百度地图的开放平台的网页地址,自己在平台注册即可,建议使用高德,因为高德的申请流程较为简单,百度需要多次认证
import com.alibaba.fastjson.JSONObject;/*** @author qc* @description get CH address from lat* @create -07-01*/import .URL;import java.util.Date;import com.chinamobile.monConstants;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.alibaba.fastjson.JSONObject;public class GetAddressFromLatUtil {private final static Logger logger = LoggerFactory.getLogger(GetAddressFromLatUtil.class);public static void main(String[] args) {// lat 31.2990170 纬度//log 121.3466440 经度String add = GetAddressFromLatUtil.getAdd("116.23128", "40.22077");logger.info(add);// System.out.println(System.currentTimeMillis());}/***根据经纬度获取省市区* @param log* @param lat* @return*/public static String getAdd(String log, String lat ){//lat 小 log 大//注意key是在高德/百度开放平台申请的key,高德地图具体获得key的步骤请查看网址:/api/webservice/guide/create-project/get-key//百度地图开放平台的网址:/index.php 在该平台注册即可String key = "c391f6981647fca0cz221764f73551c2fa";//地理编码 : 详细中文地址转为经纬度信息 请求地址:/v3/geocode/geo?parameters//地理逆编码:经纬度信息转中文地址信息 请求地址:/v3/geocode/regeo?parameters//第一个是高德的逆地理编码 第二个是百度的逆地理编码 均为get请求String urlString = "/v3/geocode/regeo?location="+log+","+lat+"&extensions=base&batch=false&roadlevel=0&key="+ key;//String urlString = "https://api./reverse_geocoding/v3/?ak="+key+"&output=json&coordtype=wgs84ll&location="+lat+","+log;String res = "";try {URL url = new URL(urlString);.HttpURLConnection conn = (.HttpURLConnection)url.openConnection();conn.setDoOutput(true);conn.setRequestMethod("POST");java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream(),"UTF-8"));String line;while ((line = in.readLine()) != null) {res += line+"\n";}in.close();//解析结果JSONObject jsonObject = JSONObject.parseObject(res);logger.info(jsonObject.toJSONString());//这个是高德的JSONObject jsonObject1 = jsonObject.getJSONObject("regeocode");//这个是百度的//JSONObject jsonObject1 = jsonObject.getJSONObject("result");res =jsonObject1.getString("formatted_address");} catch (Exception e) {logger.error("获取地址信息异常{}",e.getMessage());return null;}System.out.println("通过API获取到具体位置:"+res);return res;}}
直接运行里面的main方法得到的结果为:
上面的 代码中的getAddress()函数方法,可作为一个函数调用来使用 它有两个参数,第一个参数是经度longitude,第二个参数是纬度latitude
调用这个函数方法时,传入经纬度后它会请求得到一个json,再经过代码段try里面的内容对json进行解析和获取得到具体的中文地址 getAddress方法返回的值就只是中文地址而不是请求得到的json
结束语
若是对你有所帮助的话,希望能获得你的 点赞、评论、收藏,这将是对我很大的鼓励!!! 这对我真的很重要!!!
蟹蟹٩(‘ω’)و
【java实现地图经纬度逆编码】通过使用百度/高德地图的开放平台 实现经纬度与中文地址的转换(附代码方法)