激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java servlet手機app訪問接口(三)高德地圖云存儲及檢索

java servlet手機app訪問接口(三)高德地圖云存儲及檢索

2020-07-16 11:48L-H Java教程

這篇文章主要為大家詳細介紹了java servlet手機app訪問接口(三),高德地圖云存儲及檢索,具有一定的參考價值,感興趣的小伙伴們可以參考一下

這篇關于高德地圖的隨筆內容會多一點,

一、業務說明

對應APP業務中的成員有兩類,一是服務人員,二是被服務人員, 主要實現功能, 對APP中的服務人員位置進行時時定位, 然后通過被服務人員登錄APP時提供的一個經緯度來計算服務人員與被服務人員之間的距離 單位m。

下面是整個詳細流程,從創建高德對應應用(這里注冊我就不說了)------最后完成此功能。

二、創建servlet對應的高德地圖應用,創建自己的云圖數據庫表

注冊帳號后登錄點擊右上角的控制臺,會出現下面這個界面,我截圖

java servlet手機app訪問接口(三)高德地圖云存儲及檢索

這里當然是我已經注冊好了的界面,如果沒注冊進來就一個 button 獲取key,這里你直接點進去,就可以創建你的應用了,應用名稱隨便取,由于我們這里是servlet來處理

相關的業務,所以選項為Web服務API, 這里你點擊獲取key就會出現下面的截圖

java servlet手機app訪問接口(三)高德地圖云存儲及檢索

這一步完成,后我們就可以去創建我們要的云圖表了,進入控制臺,選擇鼠標移到我的數據,然后選擇下面的數據管理臺(Web)進入增加云圖表界面

java servlet手機app訪問接口(三)高德地圖云存儲及檢索

下面是進入后的截圖,這個截圖完了我就直接使用文字講解了。

java servlet手機app訪問接口(三)高德地圖云存儲及檢索

上面這個截圖是我創建好的結果,這里我們需要先點擊右上角的 數據模版下載,將模版下載下來之后,修改相應的數據,增加自己需要的字段后,然后點新建地圖將

修改后的模版導入到云圖庫中去,這個模版其實就是一個EXCEL導出的數據庫表。下面我直接截取我創建的表,我這個表增加了兩個字段,并且將一個字段設置成了索引字段。

java servlet手機app訪問接口(三)高德地圖云存儲及檢索

記得紅色的字段名稱必須保留(內容可以隨便修改),那是系統模版自帶的,后面兩個黑色的字段是自己增加的,可以隨意修改,即使你將它上傳到了高德云圖服務器之后也是可以改的。

 

上傳上面的表后,你再打開之前 數據管理(WEB)就會出現之前一張地圖的界面了,左邊有一張地圖方塊出現,你點進去,就能看到你上傳人員的詳細信息,以及通過上傳的經緯度在地圖上展示的 黃色五角星標識。下面有截圖

java servlet手機app訪問接口(三)高德地圖云存儲及檢索

這個表中顯示的字段是我修改過的,不是剛才Excel中上傳的,點擊欄中的標題可以進行一系列的設置,這個我就不詳細說了,

只說下索引字段的設置,

java servlet手機app訪問接口(三)高德地圖云存儲及檢索

進去后我選擇是 篩選排序索引-->篩選排序索引就是對用戶自己新增加的字段設置一個篩選條件。

我這里使用的是上面云圖中截圖的用戶類型,它的作用我也給各位截下圖。

java servlet手機app訪問接口(三)高德地圖云存儲及檢索

到這一步我們整個創建云圖及上傳的步驟就完成了。。。接下去我會講調用的方法。

二、servlet查詢云圖庫的請求方法

1、先貼上開發者文檔地址:

http://lbs.amap.com/yuntu/reference/cloudsearch/ 這個我建議自己還是去看下

這里servlet使用的是云檢索API, 對應APP使用的是云存儲API,也許明天會增加一篇關于IOS客戶端對應這個接口的時時定位文章。

下面是拼接的URL格式,直接在URL中輸入刷新可以已GET方式獲取相關數據。

http://yuntuapi.amap.com/datasearch/local?tableid=568bd32b305a2a31f604c650&city=北京&keywords=%20&filter=type:服務人員limit=15&page=1&key=? (這里的參數 KEY這些都是你自己的)

下面是封裝的請求方法代碼

java" id="highlighter_939624">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package Helper;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;
 
public class HttpRequest {
  /**
   * 向指定URL發送GET方法的請求
   *
   * @param url
   *      發送請求的URL
   * @param param
   *      請求參數,請求參數應該是 name1=value1&name2=value2 的形式。
   * @return URL 所代表遠程資源的響應結果
   */
  public static String sendGet(String url, String param) {
    String result = "";
    BufferedReader in = null;
    
    try {
      String urlNameString = url + "?" + param;
      URL realUrl = new URL(urlNameString);
      // 打開和URL之間的連接
      URLConnection connection = realUrl.openConnection();
      // 設置通用的請求屬性
      connection.setRequestProperty("accept", "*/*");
      connection.setRequestProperty("connection", "Keep-Alive");
      connection.setRequestProperty("user-agent",
          "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
      // 建立實際的連接
      connection.connect();
      // 獲取所有響應頭字段
      Map<String, List<String>> map = connection.getHeaderFields();
      // 遍歷所有的響應頭字段
      for (String key : map.keySet()) {
        System.out.println(key + "--->" + map.get(key));
      }
      // 定義 BufferedReader輸入流來讀取URL的響應
      in = new BufferedReader(new InputStreamReader(
          connection.getInputStream()));
      String line;
      while ((line = in.readLine()) != null) {
        result += line;
      }
    } catch (Exception e) {
      System.out.println("發送GET請求出現異常!" + e);
      e.printStackTrace();
    }
    // 使用finally塊來關閉輸入流
    finally {
      try {
        if (in != null) {
          in.close();
        }
      } catch (Exception e2) {
        e2.printStackTrace();
      }
    }
    return result;
  }
 
  /**
   * 向指定 URL 發送POST方法的請求
   *
   * @param url
   *      發送請求的 URL
   * @param param
   *      請求參數,請求參數應該是 name1=value1&name2=value2 的形式。
   * @return 所代表遠程資源的響應結果
   */
  public static String sendPost(String url, String param) {
    PrintWriter out = null;
    BufferedReader in = null;
    String result = "";
    try {
      URL realUrl = new URL(url);
      // 打開和URL之間的連接
      URLConnection conn = realUrl.openConnection();
      // 設置通用的請求屬性
      conn.setRequestProperty("accept", "*/*");
      conn.setRequestProperty("connection", "Keep-Alive");
      conn.setRequestProperty("user-agent",
          "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
      // 發送POST請求必須設置如下兩行
      conn.setDoOutput(true);
      conn.setDoInput(true);
      // 獲取URLConnection對象對應的輸出流
      out = new PrintWriter(conn.getOutputStream());
      // 發送請求參數
     
      out.print(param);
      // flush輸出流的緩沖
      out.flush();
      // 定義BufferedReader輸入流來讀取URL的響應
      in = new BufferedReader(
          new InputStreamReader(conn.getInputStream()));
      String line;
      while ((line = in.readLine()) != null) {
        result += line;
      }
    } catch (Exception e) {
      System.out.println("發送 POST 請求出現異常!"+e);
      e.printStackTrace();
    }
    //使用finally塊來關閉輸出流、輸入流
    finally{
      try{
        if(out!=null){
          out.close();
        }
        if(in!=null){
          in.close();
        }
      }
      catch(IOException ex){
        ex.printStackTrace();
      }
    }
    
    try {
      result= new String(result.getBytes("ISO8859-1"),"UTF-8");
    } catch (UnsupportedEncodingException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return result;
  
}

下面是請求方法

String mapParameter=new String("tableid=568bd32b305a2a31f604c650&city=北京&keywords=%20&filter=type:按摩師limit=15&page=1&key=?").getBytes("ISO8859-1"),"UTF-8");
String returnResult=HttpRequest.sendPost("http://yuntuapi.amap.com/datasearch/local", mapParameter);
out.println("<script> alert("+returnResult+");</script>");

java servlet手機app訪問接口(三)高德地圖云存儲及檢索

這里我們查詢的篩選條件就是我們自己創建的字段(并且它被我們設置成了索引字段) type:按摩師------------------上面的_updatetime前面的字段都是我們數據庫中放的數據,后面的都是通過傳的經緯度查詢出來的真實數據,但是在真正使用時用時,這些數據都是 App端往里面增加的,而且APP還需要傳當前定位的城市名稱給Servlet,所以這里的數據都是錯的。

三、servlet計算兩個經緯度間的距離

這里就是servlet通過經緯度計算被服務人員與服務人員的距離,這里其實是一對多的關系。一個被 被服務人員可以對應N個提供服務的人員。 被服務人員的所在位置經緯度會去匹配所有此次查詢出的服務人員的經緯度,計算出距離。

下面貼計算距離的方法,這個是一個公用的方法各大地圖都適用。

?
1
2
3
4
5
6
7
8
9
10
11
12
public static double getDistance(LatLng start,LatLng end){
    double lat1 = (Math.PI/180)*start.latitude;
    double lat2 = (Math.PI/180)*end.latitude;
     
    double lon1 = (Math.PI/180)*start.longitude;
    double lon2 = (Math.PI/180)*end.longitude;
  
    double R = 6371;
   
    double d = Math.acos(Math.sin(lat1)*Math.sin(lat2)+Math.cos(lat1)*Math.cos(lat2)*Math.cos(lon2-lon1))*R;
     return d*1000;
  }

參數中的LatLng 你可以自己創建一個類,里面包含兩個字段都是double類型。一個代表精度,一個代表緯度。
使用這個方法產生的流程:當用戶打開服務人員的APP界面時,請求了讀取服務人員列表的接口,這時候SERVLET就需要查詢一次高德云圖里面的服務人員信息,可以限制查詢條數,然后查詢出來,循環每條數據中的經緯度與使用被服務人員打開APP界面傳的經緯度,匹配計算出相對距離。 明天也許會發布一篇IOS的隨筆,就對應這個接口,主要貼在IOS上實現的時時定位傳云圖數據庫的代碼。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产91一区二区三区 | 久久色播 | 亚州精品在线视频 | 91情侣偷在线精品国产 | 久草在线观看福利 | 国产亚洲综合一区二区 | 黄在线观看 | 女人一区二区三区 | av电影在线观看免费 | 羞羞网站入口 | 日韩视频精品一区 | 精品一区二区三区在线视频 | www国产成人免费观看视频,深夜成人网 | 国产91porn| 新久久久久久 | av在线播放地址 | 成人免费一区二区三区在线观看 | 久久久久久久久久美女 | 国产午夜电影在线观看 | 久久久久成人精品免费播放 | 亚洲国产精品久久久久久久久久 | 九九热久久免费视频 | 91真视频 | 中国黄色一级生活片 | 一级做a爱片毛片免费 | 国产在线地址 | 激情视频免费看 | 欧美激情天堂 | 国产高潮好爽受不了了夜色 | av一二三四区 | 国产精品久久久久久久亚洲按摩 | 精品国产一区二区三区久久久蜜月 | 久久视频在线免费观看 | 91麻豆精品国产91久久久无需广告 | 高清国产午夜精品久久久久久 | 黄色av一区二区三区 | a黄色片 | 日本韩国欧美一级片 | 中文字幕一区二区三区久久 | 久久99综合 | 国产一区视频在线观看免费 |