高德地图工具包

package com.ybdc.yy.base.basis.utils.map;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;


import org.apache.commons.lang.StringUtils;


import net.sf.json.JSONArray;
import net.sf.json.JSONObject;


/**
 * @ClassName:MapUtil @Description:
 * @Author:chen
 * @Date:2017年5月17日下午5:49:40 @version:1.0.0
 */


public class MapUtil {
// 高德秘钥
private final static String key = "1da8ea5d3653cdef862b805333f3465a";
// url前缀
private final static String baseUrl = "http://restapi.amap.com/v3/";


/**
 * @MethodName:getDistance 计算两地之间骑行的距离(米)
 * @param originlon
 *            起始经度(高德)
 * @param origiinlat
 *            起始纬度(高德)
 * @param deslon
 *            结束经度(高德)
 * @param deslat
 *            结束纬度(高德)
 * @return
 * @ReturnType:BigDecimal @Description:
 * @Creator:chenhoudong
 * @CreateTime:2017年5月19日上午9:53:46 @Modifier: @ModifyTime:
 */


public static BigDecimal getDistanceByGaoDe(BigDecimal originlon, BigDecimal originlat, BigDecimal deslon,
BigDecimal deslat) {
// 0速度优先(时间)1费用优先(不走收费路段的最快道路)2距离优先 3不走快速路 4躲避拥堵
// 5多策略(同时使用速度优先、费用优先、距离优先三个策略计算路径)
// 6不走高速 7不走高速且避免收费 8躲避收费和拥堵 9不走高速且躲避收费和拥堵
String origins = originlon + "," + originlat;
String destination = deslon + "," + deslat;
int strategy = 2;
BigDecimal distance = null;
String url = baseUrl + "direction/driving?" + "origin=" + origins + "&destination=" + destination + "&strategy="
+ strategy + "&extensions=base&key=" + key;
JSONObject jsonobject = JSONObject.fromObject(getHttpResponse(url));
if ("1".equals(jsonobject.getString("status")) && StringUtils.equalsIgnoreCase("ok", jsonobject.getString("info"))) {
JSONArray pathArray = jsonobject.getJSONObject("route").getJSONArray("paths");
String distanceString = pathArray.getJSONObject(0).getString("distance");
distance = new BigDecimal(distanceString);
}
return distance;
}


/**
 * @MethodName:getDistance 几何计算两地距离
 * @param startlongitude
 * @param startdimensionality
 * @param endlongitude
 * @param enddimensionality
 * @return
 * @ReturnType:double @Description:
 * @Creator:chen
 * @CreateTime:2017年5月17日下午6:03:12 @Modifier: @ModifyTime:
 */


public static BigDecimal getDistanceByGeometry(double startlongitude, double startdimensionality,
double endlongitude, double enddimensionality) {
double lon1 = (Math.PI / 180) * startlongitude;
double lon2 = (Math.PI / 180) * endlongitude;
double lat1 = (Math.PI / 180) * startdimensionality;
double lat2 = (Math.PI / 180) * enddimensionality;
// 地球半径
double R = 6371;
// 两点间距离 km,如果想要米的话,结果*1000就可以了
double d = Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1))
* R;
BigDecimal distance = new BigDecimal(d * 1000);
return distance;
}


/**
 * @MethodName:coordinate 地址转化为高德坐标
 * @param address
 *            地址
 * @return
 * @ReturnType:String @Description:
 * @Creator:chenhoudong
 * @CreateTime:2017年5月17日下午5:28:56 @Modifier: @ModifyTime:
 */


public static String coordinate(String address) {
try {
address = URLEncoder.encode(address, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String coordinateString = "";
String url = baseUrl + "geocode/geo?address=" + address + "&output=json&key=" + key;
JSONObject jsonobject = JSONObject.fromObject(getHttpResponse(url));
if ("1".equals(jsonobject.getString("status")) && StringUtils.equalsIgnoreCase("ok", jsonobject.getString("info"))) {
JSONArray pathArray = jsonobject.getJSONArray("geocodes");
coordinateString = pathArray.getJSONObject(0).getString("location");
}
return coordinateString;
}


/**
 * @MethodName:convert GPS坐标转化为高德坐标
 * @param coordsys
 *            GPS坐标
 * @return
 * @ReturnType:String 格式为 "经度,纬度" @Description:
 * @Creator:chen
 * @CreateTime:2017年5月17日下午5:27:32 @Modifier: @ModifyTime:
 */


public static String convert(BigDecimal lon, BigDecimal lat) {
String coordsys = lon + "," + lat;
try {
coordsys = URLEncoder.encode(coordsys, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String coordinateString = "";
String url = baseUrl + "assistant/coordinate/convert?locations=" + coordsys + "&coordsys=gps&output=json&key="
+ key;
JSONObject jsonobject = JSONObject.fromObject(getHttpResponse(url));
if ("1".equals(jsonobject.getString("status")) && StringUtils.equalsIgnoreCase("ok", jsonobject.getString("info"))) {
coordinateString = jsonobject.getString("locations");
}
return coordinateString;
}


/**
 * @MethodName:getAddress 高德坐标转换成地址信息
 * @param lon
 *            高德坐标经度
 * @param lat
 *            高德坐标纬度
 * @return
 * @ReturnType:String @Description:
 * @Creator:chen
 * @CreateTime:2017年5月17日下午4:12:46 @Modifier: @ModifyTime:
 */
public static String getAddress(BigDecimal lon, BigDecimal lat) {
String location = lon + "," + lat;
String url = baseUrl + "geocode/regeo?key=" + key + "&location=" + location;
try {
location = URLEncoder.encode(location, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
JSONObject jsonobject = JSONObject.fromObject(getHttpResponse(url));
String addressString = "";
if ("1".equals(jsonobject.getString("status")) && StringUtils.equalsIgnoreCase("ok", jsonobject.getString("info"))) {
String regeocodeString = jsonobject.getString("regeocode");
JSONObject regeocodeJson = JSONObject.fromObject(regeocodeString);
addressString = regeocodeJson.getString("formatted_address");
}


return addressString;
}


/**
 * @MethodName:getHttpResponse
 * @param allConfigUrl
 * @return
 * @ReturnType:String @Description:
 * @Creator:chen
 * @CreateTime:2017年5月17日下午3:45:39 @Modifier: @ModifyTime:
 */


public static String getHttpResponse(String allConfigUrl) {
BufferedReader in = null;
StringBuffer result = null;
try {
// url请求中如果有中文,要在接收方用相应字符转码
URI uri = new URI(allConfigUrl);
URL url = uri.toURL();
URLConnection connection = url.openConnection();
connection.setRequestProperty("Content-type", "text/html");
connection.setRequestProperty("Accept-Charset", "utf-8");
connection.setRequestProperty("contentType", "utf-8");
connection.connect();
result = new StringBuffer();
// 读取URL的响应
in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
String line;
while ((line = in.readLine()) != null) {
result.append(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result.toString();
}


/**
 * @MethodName:getLocalCity 根据坐标查询城市code
 * @param lon
 * @param lat
 * @return
 * @ReturnType:String @Description:
 * @Creator:chen
 * @CreateTime:2017年5月22日下午2:53:47 @Modifier: @ModifyTime:
 */


public static String getLocalCity(BigDecimal lon, BigDecimal lat) {
String location = lon + "," + lat;
String url = baseUrl + "geocode/regeo?key=" + key + "&location=" + location + "&radius=3000&roadlevel=1";
String city = "";
try {
location = URLEncoder.encode(location, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
JSONObject jsonobject = JSONObject.fromObject(getHttpResponse(url));
if ("1".equals(jsonobject.getString("status")) && StringUtils.equalsIgnoreCase("ok", jsonobject.getString("info"))) {
String regeocodeString = jsonobject.getString("regeocode");
JSONObject regeocodeJson = JSONObject.fromObject(regeocodeString);
String addressString = regeocodeJson.getString("addressComponent");
JSONObject cityaddress = JSONObject.fromObject(addressString);
city = cityaddress.getString("citycode");
}
return city;
}


// public static void main(String[] args) {
// // 格式: 经度,纬度
// // 注意:高德最多取小数点后六位
// BigDecimal originlon = new BigDecimal(104.043390);
// BigDecimal originlat = new BigDecimal(30.641982);
// BigDecimal deslon = new BigDecimal(106.655347);
// BigDecimal deslat = new BigDecimal(31.786691);
// String address = "成都市天府新区长虹科技大厦";
//
// String coordinate = coordinate(address); //高德坐标
// BigDecimal distance = getDistanceByGaoDe(originlon, originlat, deslon,
// deslat); //高德距离
// BigDecimal distance1=getDistanceByGeometry(104.043390,
// 30.641982,106.655347,31.786691);//几何距离
// System.out.println(distance);
// System.out.println(distance1);
// System.out.println("距离计算:");
// System.out.println("行驶距离-----" + distance+"米");
// System.out.println("=================================================");
// System.out.println("地址>>>>>>>>高德坐标:");
// System.out.println(address+"地址转换高德坐标-----" + coordinate);
// System.out.println("=================================================");
// BigDecimal coordsyslon =new BigDecimal(116.481499); //GPS坐标
// BigDecimal coordsyslat =new BigDecimal(39.990475); //GPS坐标
// System.out.println("GPS坐标>>>>>>>>高德坐标:");
// String moordsys =convert(coordsyslon,coordsyslat); //高德坐标
// System.out.println(moordsys);
// System.out.println("=================================================");
// BigDecimal lon=new BigDecimal(104.06342);
// BigDecimal lat=new BigDecimal(30.541304);
// String address2=getAddress(lon,lat);
// System.out.println(address2);
// System.out.println(getLocalCity(originlon,originlat));
// }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 高德地图瓦片切图工具.rar是一种用于切割高德地图瓦片的工具。高德地图是一款集地图浏览、路线规划、导航引导等功能于一体的移动应用程序,而瓦片是指将大型地图切割成小块的图片,方便加载和显示。 这个切图工具是以.rar格式打包的,需要解压缩后才能使用。它能够将高德地图切割成瓦片,这些瓦片是按照一定的规则和级别切割的,可以根据需要选择不同的切片级别,以满足不同的应用需求。 使用这个工具,用户可以自定义瓦片切割的参数,如地图级别、切片坐标范围、输出格式等等。通过设定这些参数,可以将大型的高德地图切割成小块的瓦片,方便在应用程序中加载和使用。 这个切图工具的使用方法可能会有一定的学习成本,但一旦熟悉了操作步骤,就可以快速地切割出所需的瓦片。这样,开发者就可以利用这些瓦片来构建自己的地图应用、导航应用,或者进行其他地图相关的开发工作。 总的来说,高德地图瓦片切图工具.rar是一款用于切割高德地图瓦片的工具,通过它可以将大型地图切割成小块的瓦片,以便在应用程序中使用。使用它需要一定的学习成本,但一旦掌握了使用方法,就能够快速地进行地图切割工作。 ### 回答2: 高德地图瓦片切图工具.rar是一种用于将高德地图数据切割成小块的软件工具。瓦片切图是一种将地图数据分割成一张张小图片的技术,可以提高地图的加载速度和显示效果。 高德地图瓦片切图工具.rar可以将高德地图数据按照一定的规则划分成瓦片,并保存为图片格式,方便在网页或移动应用上显示。通过切割成小块的方式,可以减小地图数据的大小,并且根据用户的需求加载相应的瓦片,从而提高地图的加载速度和显示效果。 使用高德地图瓦片切图工具.rar,用户可以自定义切图的参数,如瓦片的大小、格式和样式等。用户也可以选择特定的地图区域进行切图,以满足不同项目的需求。 高德地图瓦片切图工具.rar的使用非常简单,用户只需将地图数据导入工具中,选择合适的切图参数,点击切图按钮即可。切图完毕后,用户可以保存切割后的瓦片,并将其集成到自己的项目中进行展示。 总之,高德地图瓦片切图工具.rar是一款功能强大且易于使用的软件工具,能够帮助用户将高德地图数据切割成小块,以实现快速加载和优化地图显示效果的目的。 ### 回答3: 高德地图瓦片切图工具.rar是一个压缩文件,其中包含了高德地图所提供的瓦片切图工具。瓦片切图工具是一种用于将地图数据切割成小块瓦片的工具。 瓦片切图工具的作用是将整张地图分割成多个小区域瓦片,并将每个瓦片以相应的编号和坐标进行命名。这样,当用户需要查看特定区域的地图时,只需加载对应的瓦片资源,可以大大提高地图数据的加载速度和效率。 高德地图瓦片切图工具.rar文件中可能包含了瓦片切图工具的程序文件、配置文件以及相关的文档。用户需要解压缩这个压缩文件,然后根据提供的说明文档,配置瓦片切图工具的参数,如地图范围、瓦片大小等。接下来,用户可以运行瓦片切图工具,它会根据配置的参数自动将地图数据切割成多个瓦片,并生成对应的编号和坐标。 最后,用户可以将生成的瓦片资源用于自己的地图应用或网站上。当用户需要展示特定区域的地图时,只需加载相应的瓦片资源,就能够快速显示出地图,并且可以进行缩放和拖动等操作。 总的来说,高德地图瓦片切图工具.rar是一种用于切割地图数据为瓦片资源的工具,可以提高地图数据的加载速度和效率,方便用户在自己的应用或网站上展示地图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值