高德地图云API使用

现在越来越多应用使用地图功能了,目前使用云地图功能调用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%3D%3D

猜你喜欢

转载自blog.csdn.net/rishengcsdn/article/details/77743202