现在越来越多应用使用地图功能了,目前使用云地图功能调用API实现是比较流行的解决方案。
下面就是高德云地图API使用例子讲解。
首先去高德开发网站注册一个开发者账号,
http://lbs.amap.com/
注册只需要提供手机号和邮箱就可以了。
测试只需要个人开发者,如果商业使用还是申请企业账号吧。
第二步,注册完毕,登陆管理控制台创建自己的应用。
系统默认给一个高德的key,为了更加安全还可以为应用创建一个私有Key
第三步,就可以参考网站的API开发了。下面是工具类代码,引用了一个第三方jar,fastjson-1.1.26.jar,JDK版本是1.8,
package com.meles.gaode; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; /** * * @author zhouxj * web页面查看http://yuntu.amap.com/datamanager/table.html?action=update&tableid=59a69a6f305a2a4ed7ec700a * 发布链接: https://yuntu.amap.com/share/zIzeia */ public class GaodeUtil { static String key = "fc3887a3d8583d3ede7452cd235279e6"; //高德Key static String privateKey = "ea6a2a2dbfb48239f0e06fd5a35bf531"; //应用私有key //String url = "http://yuntuapi.amap.com/datamanage/table/create"; static String gaode_createtable_url="http://yuntuapi.amap.com/datamanage/table/create"; static String gaode_createData_url="http://yuntuapi.amap.com/datamanage/data/create"; static String gaode_updateData_url="http://yuntuapi.amap.com/datamanage/data/update"; static String gaode_deleteData_url="http://yuntuapi.amap.com/datamanage/data/delete"; static String gaode_location_list_url="http://yuntuapi.amap.com/datamanage/data/list"; static String gaode_getDistance_url="http://restapi.amap.com/v3/distance"; static String gaode_dataSearchArround_url="http://yuntuapi.amap.com/datasearch/around"; static String tableId = "59a69a6f305a2a4ed7ec700a"; public static String createTable(String tableName) { Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("key", key); paramMap.put("name", tableName); paramMap.put("sig", getGaodeSign(paramMap, privateKey)); String result = Httpclient.sendPost(gaode_createtable_url, paramMap); return result; } public static String getGaodeSign(Map<String,Object> paramMap,String privateKey) { Iterator<Entry<String, Object>> it = paramMap.entrySet().iterator(); List<String> paramKeyList = new ArrayList<String>(); while(it.hasNext()) { Entry<String, Object> entry = it.next(); paramKeyList.add(entry.getKey()); } String[] array = new String[paramKeyList.size()]; paramKeyList.toArray(array); Arrays.sort(array); StringBuffer sb = new StringBuffer(); for(int i = 0;i < array.length;i++) { sb.append(array[i]); sb.append("="); sb.append(paramMap.get(array[i])); sb.append("&"); } String param = sb.substring(0, sb.length() - 1); param = param + privateKey; String sign = MD5Util.MD5Encode(param, "UTF-8"); return sign; } public static String createData(Map<String,Object> paramMap) { Map<String, Object> map = new HashMap<String, Object>(); map.put("key", key); map.put("tableid", tableId); //JSONObject json = JSONObject.fromObject(paramMap); String jsonStr=JSON.toJSONString(paramMap); map.put("data", jsonStr); map.put("sig", getGaodeSign(map, privateKey)); String result = Httpclient.sendPost(gaode_createData_url, map); System.out.println(result); return result; } public static String updateData(Map<String,Object> paramMap) { Map<String, Object> map = new HashMap<String, Object>(); map.put("key", key); map.put("tableid", tableId); String jsonStr=JSON.toJSONString(paramMap); map.put("data", jsonStr); map.put("sig", getGaodeSign(map, privateKey)); String result = Httpclient.sendPost(gaode_updateData_url, map); return result; } public static String deleteData(List<String> gaodeIdList,String tableId) { Map<String, Object> map = new HashMap<String, Object>(); map.put("key", key); map.put("tableid", tableId); StringBuffer sb = new StringBuffer(); for(int i = 0;i < gaodeIdList.size();i++) { String id = gaodeIdList.get(i); sb.append(id); sb.append(","); } String ids = sb.substring(0, sb.length() - 1); map.put("ids", ids); map.put("sig", getGaodeSign(map, privateKey)); String result = Httpclient.sendPost(gaode_deleteData_url, map); return result; } public static List<Map<String,String>> getLocationList(String bicycleId,String beginTimestamp,String endTimestamp) throws Exception { List<Map<String,String>> locationList = new ArrayList<Map<String,String>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("key", key); map.put("tableid", tableId); String filter = "bicycle_id:" + bicycleId + "+" + "time_stamp:[" + beginTimestamp + "," + endTimestamp + "]"; map.put("filter", filter); String sortrule = "_createtime:0"; map.put("sortrule", sortrule); map.put("limit", "100"); map.put("page", "1"); map.put("sig", getGaodeSign(map, privateKey)); map.put("filter", URLEncoder.encode(filter, "utf-8")); String result = Httpclient.sendPost(gaode_location_list_url, map); //JSONObject json = JSONObject.fromObject(result); JSONObject json = JSONObject.parseObject(result); int status = json.getInteger("status"); if(status == 1) { String datasString = json.getString("datas"); JSONArray datasJsonArray = com.alibaba.fastjson.JSONObject.parseArray(datasString); for(int i =0;i < datasJsonArray.size();i++) { Map<String,String> locationMap = new HashMap<String, String>(); com.alibaba.fastjson.JSONObject datasJson = (com.alibaba.fastjson.JSONObject) datasJsonArray.get(i); String location = datasJson.getString("_location"); String[] locations = location.split(","); locationMap.put("lng", locations[0]); locationMap.put("lat", locations[1]); locationList.add(locationMap); } int count = json.getInteger("count"); if(count > 100) { int page = count % 100 == 0 ? count / 100 : count /100 + 1; for(int i = 2;i <= page;i++) { map.put("key", key); map.put("tableid", tableId); filter = "bicycle_id:" + bicycleId + "+" + "time_stamp:[" + beginTimestamp + "," + endTimestamp + "]"; map.put("filter", filter); sortrule = "_createtime:0"; map.put("sortrule", sortrule); map.put("limit", "100"); map.put("page", String.valueOf(i)); map.put("sig", getGaodeSign(map, privateKey)); map.put("filter", URLEncoder.encode(filter, "utf-8")); result = Httpclient.sendPost(gaode_location_list_url, map); json = JSONObject.parseObject(result); status = json.getInteger("status"); if(status == 1) { datasString = json.getString("datas"); datasJsonArray = com.alibaba.fastjson.JSONObject.parseArray(datasString); for(int j =0;i < datasJsonArray.size();j++) { Map<String,String> locationMap = new HashMap<String, String>(); com.alibaba.fastjson.JSONObject datasJson = (com.alibaba.fastjson.JSONObject) datasJsonArray.get(j); String location = datasJson.getString("_location"); String[] locations = location.split(","); locationMap.put("lng", locations[0]); locationMap.put("lat", locations[1]); locationList.add(locationMap); } } } } } return locationList; } public static String getDistance() { Map<String, Object> map = new HashMap<String, Object>(); map.put("key", key); map.put("origins", "116.481028,39.989643"); map.put("destination", "114.465302,40.004717"); map.put("type", "0"); map.put("sig", getGaodeSign(map, privateKey)); String result = Httpclient.sendGet(gaode_getDistance_url, map); return result; } public static String getRideDistance(String beginLat,String beginLng,String endLat,String endLng) { Map<String, Object> map = new HashMap<String, Object>(); map.put("key", key); map.put("origins", beginLat+","+beginLng); map.put("destination", endLat+","+endLng); map.put("type","0"); map.put("sig", getGaodeSign(map, privateKey)); String result = Httpclient.sendGet(gaode_getDistance_url, map); com.alibaba.fastjson.JSONObject json = com.alibaba.fastjson.JSONObject.parseObject(result); String status = json.getString("status"); String location = "0"; if(status.equals("1")) { String datasString = json.getString("results"); JSONArray datasJsonArray = com.alibaba.fastjson.JSONObject.parseArray(datasString); for(int i =0;i<1;i++) { com.alibaba.fastjson.JSONObject datasJson = (com.alibaba.fastjson.JSONObject) datasJsonArray.get(i); location = datasJson.getString("distance"); } } return location; } public static double searchDistance(List<Map<String,String>> mapList){ double totalDistance = 0; Integer num = mapList.size(); if(num < 2){ return totalDistance; } for(int i = 0;i<num;i++){ if(i >= num-1){ break; } Map<String,String> beginMap = mapList.get(i); Map<String,String> endMap = mapList.get(i+1); String firstLat = beginMap.get("lat"); String firstLng = beginMap.get("lng"); String lastLat = endMap.get("lat"); String lastLng = endMap.get("lng"); String distance = getRideDistance(firstLat, firstLng,lastLat,lastLng); double distanceDouble = Double.valueOf(distance); totalDistance = totalDistance + distanceDouble; } return totalDistance; } public static String dataSearchArround() { Map<String, Object> paramMap= new HashMap<String, Object>(); paramMap.put("key", key); paramMap.put("tableid", tableId); paramMap.put("center", "116.35261,40.044567"); paramMap.put("radius", "5000"); paramMap.put("sig", getGaodeSign(paramMap, privateKey)); String result = Httpclient.sendPost(gaode_dataSearchArround_url, paramMap); return result; } public static void main(String[] args) { // System.out.println(createTable("myTestMap")); //返回:{"info":"OK","infocode":"10000","status":1,"tableid":"59a69a6f305a2a4ed7ec700a"} System.out.println(createDataTest()); //返回: {"info":"OK","infocode":"10000","status":1,"_id":"1"} System.out.println(dataSearchArround()); //返回:{"count":"1","info":"OK","infocode":"10000","status":1,"datas":[{"_id":"1","_location":"116.35261,40.044567","_name":"name6666666","_address":"北京市海淀区东升镇西小口路50号文龙家园三里","_createtime":"2017-08-31 10:07:41","_updatetime":"2017-08-31 10:07:41","_province":"北京市","_city":"北京市","_district":"海淀区","_distance":"0","_image":[]}]} System.out.println(updateDataTest()); //返回:{"info":"OK","infocode":"10000","status":1} } public static String createDataTest() { Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("_name", "name9766667"); paramMap.put("_location", "116.45971,40.144567"); paramMap.put("bicycle_id", "id9766667"); paramMap.put("bicycle_no", "9766667"); paramMap.put("status", "0"); paramMap.put("damage_status", "0"); paramMap.put("mch_id", "mch97667"); paramMap.put("is_red_packets", "0"); paramMap.put("bicycle_category_id", "2"); String result = createData(paramMap); JSONObject jsonObject = JSONObject.parseObject(result); String gaodeId = jsonObject.getString("_id"); return result; } public static String updateDataTest() { Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("_id", "4"); paramMap.put("_name", "updname9666667"); paramMap.put("_location", "116.45961,40.044567"); paramMap.put("bicycle_id", "id9666667"); paramMap.put("bicycle_no", "9666667"); paramMap.put("status", "0"); paramMap.put("damage_status", "0"); paramMap.put("mch_id", "mch96667"); paramMap.put("is_red_packets", "0"); paramMap.put("bicycle_category_id", "2"); String result = updateData(paramMap); JSONObject jsonObject = JSONObject.parseObject(result); String gaodeId = jsonObject.getString("_id"); return result; } }
如果密钥填写正常,而且tableId写的对的话就可以看到云地图效果了。
自己登录后台管理可以看到如下图:
别人能访问的地图如下图,发布链接: https://yuntu.amap.com/share/zIzeia:
是不是很方便啊。
手机查看地图效果图如下,如果开启定位功能则还有更多功能比如:定位,导航
全部源码下载链接:
http://www.meles.cn/bbs/forum.php?mod=attachment&aid=MTIwOXw1M2YyOTc1MXwxNTA0MjU4NDc0fDN8Njg5Mg==