一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - java servlet手機(jī)app訪問(wèn)接口(三)高德地圖云存儲(chǔ)及檢索

java servlet手機(jī)app訪問(wèn)接口(三)高德地圖云存儲(chǔ)及檢索

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

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

這篇關(guān)于高德地圖的隨筆內(nèi)容會(huì)多一點(diǎn),

一、業(yè)務(wù)說(shuō)明

對(duì)應(yīng)APP業(yè)務(wù)中的成員有兩類(lèi),一是服務(wù)人員,二是被服務(wù)人員, 主要實(shí)現(xiàn)功能, 對(duì)APP中的服務(wù)人員位置進(jìn)行時(shí)時(shí)定位, 然后通過(guò)被服務(wù)人員登錄APP時(shí)提供的一個(gè)經(jīng)緯度來(lái)計(jì)算服務(wù)人員與被服務(wù)人員之間的距離 單位m。

下面是整個(gè)詳細(xì)流程,從創(chuàng)建高德對(duì)應(yīng)應(yīng)用(這里注冊(cè)我就不說(shuō)了)------最后完成此功能。

二、創(chuàng)建servlet對(duì)應(yīng)的高德地圖應(yīng)用,創(chuàng)建自己的云圖數(shù)據(jù)庫(kù)表

注冊(cè)帳號(hào)后登錄點(diǎn)擊右上角的控制臺(tái),會(huì)出現(xiàn)下面這個(gè)界面,我截圖

java servlet手機(jī)app訪問(wèn)接口(三)高德地圖云存儲(chǔ)及檢索

這里當(dāng)然是我已經(jīng)注冊(cè)好了的界面,如果沒(méi)注冊(cè)進(jìn)來(lái)就一個(gè) button 獲取key,這里你直接點(diǎn)進(jìn)去,就可以創(chuàng)建你的應(yīng)用了,應(yīng)用名稱(chēng)隨便取,由于我們這里是servlet來(lái)處理

相關(guān)的業(yè)務(wù),所以選項(xiàng)為Web服務(wù)API, 這里你點(diǎn)擊獲取key就會(huì)出現(xiàn)下面的截圖

java servlet手機(jī)app訪問(wèn)接口(三)高德地圖云存儲(chǔ)及檢索

這一步完成,后我們就可以去創(chuàng)建我們要的云圖表了,進(jìn)入控制臺(tái),選擇鼠標(biāo)移到我的數(shù)據(jù),然后選擇下面的數(shù)據(jù)管理臺(tái)(Web)進(jìn)入增加云圖表界面

java servlet手機(jī)app訪問(wèn)接口(三)高德地圖云存儲(chǔ)及檢索

下面是進(jìn)入后的截圖,這個(gè)截圖完了我就直接使用文字講解了。

java servlet手機(jī)app訪問(wèn)接口(三)高德地圖云存儲(chǔ)及檢索

上面這個(gè)截圖是我創(chuàng)建好的結(jié)果,這里我們需要先點(diǎn)擊右上角的 數(shù)據(jù)模版下載,將模版下載下來(lái)之后,修改相應(yīng)的數(shù)據(jù),增加自己需要的字段后,然后點(diǎn)新建地圖將

修改后的模版導(dǎo)入到云圖庫(kù)中去,這個(gè)模版其實(shí)就是一個(gè)EXCEL導(dǎo)出的數(shù)據(jù)庫(kù)表。下面我直接截取我創(chuàng)建的表,我這個(gè)表增加了兩個(gè)字段,并且將一個(gè)字段設(shè)置成了索引字段。

java servlet手機(jī)app訪問(wèn)接口(三)高德地圖云存儲(chǔ)及檢索

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

 

上傳上面的表后,你再打開(kāi)之前 數(shù)據(jù)管理(WEB)就會(huì)出現(xiàn)之前一張地圖的界面了,左邊有一張地圖方塊出現(xiàn),你點(diǎn)進(jìn)去,就能看到你上傳人員的詳細(xì)信息,以及通過(guò)上傳的經(jīng)緯度在地圖上展示的 黃色五角星標(biāo)識(shí)。下面有截圖

java servlet手機(jī)app訪問(wèn)接口(三)高德地圖云存儲(chǔ)及檢索

這個(gè)表中顯示的字段是我修改過(guò)的,不是剛才Excel中上傳的,點(diǎn)擊欄中的標(biāo)題可以進(jìn)行一系列的設(shè)置,這個(gè)我就不詳細(xì)說(shuō)了,

只說(shuō)下索引字段的設(shè)置,

java servlet手機(jī)app訪問(wèn)接口(三)高德地圖云存儲(chǔ)及檢索

進(jìn)去后我選擇是 篩選排序索引-->篩選排序索引就是對(duì)用戶自己新增加的字段設(shè)置一個(gè)篩選條件。

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

java servlet手機(jī)app訪問(wèn)接口(三)高德地圖云存儲(chǔ)及檢索

到這一步我們整個(gè)創(chuàng)建云圖及上傳的步驟就完成了。。。接下去我會(huì)講調(diào)用的方法。

二、servlet查詢?cè)茍D庫(kù)的請(qǐng)求方法

1、先貼上開(kāi)發(fā)者文檔地址:

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

這里servlet使用的是云檢索API, 對(duì)應(yīng)APP使用的是云存儲(chǔ)API,也許明天會(huì)增加一篇關(guān)于IOS客戶端對(duì)應(yīng)這個(gè)接口的時(shí)時(shí)定位文章。

下面是拼接的URL格式,直接在URL中輸入刷新可以已GET方式獲取相關(guān)數(shù)據(jù)。

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

下面是封裝的請(qǐng)求方法代碼

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發(fā)送GET方法的請(qǐng)求
   *
   * @param url
   *      發(fā)送請(qǐng)求的URL
   * @param param
   *      請(qǐng)求參數(shù),請(qǐng)求參數(shù)應(yīng)該是 name1=value1&name2=value2 的形式。
   * @return URL 所代表遠(yuǎn)程資源的響應(yīng)結(jié)果
   */
  public static String sendGet(String url, String param) {
    String result = "";
    BufferedReader in = null;
    
    try {
      String urlNameString = url + "?" + param;
      URL realUrl = new URL(urlNameString);
      // 打開(kāi)和URL之間的連接
      URLConnection connection = realUrl.openConnection();
      // 設(shè)置通用的請(qǐng)求屬性
      connection.setRequestProperty("accept", "*/*");
      connection.setRequestProperty("connection", "Keep-Alive");
      connection.setRequestProperty("user-agent",
          "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
      // 建立實(shí)際的連接
      connection.connect();
      // 獲取所有響應(yīng)頭字段
      Map<String, List<String>> map = connection.getHeaderFields();
      // 遍歷所有的響應(yīng)頭字段
      for (String key : map.keySet()) {
        System.out.println(key + "--->" + map.get(key));
      }
      // 定義 BufferedReader輸入流來(lái)讀取URL的響應(yīng)
      in = new BufferedReader(new InputStreamReader(
          connection.getInputStream()));
      String line;
      while ((line = in.readLine()) != null) {
        result += line;
      }
    } catch (Exception e) {
      System.out.println("發(fā)送GET請(qǐng)求出現(xiàn)異常!" + e);
      e.printStackTrace();
    }
    // 使用finally塊來(lái)關(guān)閉輸入流
    finally {
      try {
        if (in != null) {
          in.close();
        }
      } catch (Exception e2) {
        e2.printStackTrace();
      }
    }
    return result;
  }
 
  /**
   * 向指定 URL 發(fā)送POST方法的請(qǐng)求
   *
   * @param url
   *      發(fā)送請(qǐng)求的 URL
   * @param param
   *      請(qǐng)求參數(shù),請(qǐng)求參數(shù)應(yīng)該是 name1=value1&name2=value2 的形式。
   * @return 所代表遠(yuǎn)程資源的響應(yīng)結(jié)果
   */
  public static String sendPost(String url, String param) {
    PrintWriter out = null;
    BufferedReader in = null;
    String result = "";
    try {
      URL realUrl = new URL(url);
      // 打開(kāi)和URL之間的連接
      URLConnection conn = realUrl.openConnection();
      // 設(shè)置通用的請(qǐng)求屬性
      conn.setRequestProperty("accept", "*/*");
      conn.setRequestProperty("connection", "Keep-Alive");
      conn.setRequestProperty("user-agent",
          "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
      // 發(fā)送POST請(qǐng)求必須設(shè)置如下兩行
      conn.setDoOutput(true);
      conn.setDoInput(true);
      // 獲取URLConnection對(duì)象對(duì)應(yīng)的輸出流
      out = new PrintWriter(conn.getOutputStream());
      // 發(fā)送請(qǐng)求參數(shù)
     
      out.print(param);
      // flush輸出流的緩沖
      out.flush();
      // 定義BufferedReader輸入流來(lái)讀取URL的響應(yīng)
      in = new BufferedReader(
          new InputStreamReader(conn.getInputStream()));
      String line;
      while ((line = in.readLine()) != null) {
        result += line;
      }
    } catch (Exception e) {
      System.out.println("發(fā)送 POST 請(qǐng)求出現(xiàn)異常!"+e);
      e.printStackTrace();
    }
    //使用finally塊來(lái)關(guān)閉輸出流、輸入流
    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;
  
}

下面是請(qǐng)求方法

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手機(jī)app訪問(wèn)接口(三)高德地圖云存儲(chǔ)及檢索

這里我們查詢的篩選條件就是我們自己創(chuàng)建的字段(并且它被我們?cè)O(shè)置成了索引字段) type:按摩師------------------上面的_updatetime前面的字段都是我們數(shù)據(jù)庫(kù)中放的數(shù)據(jù),后面的都是通過(guò)傳的經(jīng)緯度查詢出來(lái)的真實(shí)數(shù)據(jù),但是在真正使用時(shí)用時(shí),這些數(shù)據(jù)都是 App端往里面增加的,而且APP還需要傳當(dāng)前定位的城市名稱(chēng)給Servlet,所以這里的數(shù)據(jù)都是錯(cuò)的。

三、servlet計(jì)算兩個(gè)經(jīng)緯度間的距離

這里就是servlet通過(guò)經(jīng)緯度計(jì)算被服務(wù)人員與服務(wù)人員的距離,這里其實(shí)是一對(duì)多的關(guān)系。一個(gè)被 被服務(wù)人員可以對(duì)應(yīng)N個(gè)提供服務(wù)的人員。 被服務(wù)人員的所在位置經(jīng)緯度會(huì)去匹配所有此次查詢出的服務(wù)人員的經(jīng)緯度,計(jì)算出距離。

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

?
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;
  }

參數(shù)中的LatLng 你可以自己創(chuàng)建一個(gè)類(lèi),里面包含兩個(gè)字段都是double類(lèi)型。一個(gè)代表精度,一個(gè)代表緯度。
使用這個(gè)方法產(chǎn)生的流程:當(dāng)用戶打開(kāi)服務(wù)人員的APP界面時(shí),請(qǐng)求了讀取服務(wù)人員列表的接口,這時(shí)候SERVLET就需要查詢一次高德云圖里面的服務(wù)人員信息,可以限制查詢條數(shù),然后查詢出來(lái),循環(huán)每條數(shù)據(jù)中的經(jīng)緯度與使用被服務(wù)人員打開(kāi)APP界面?zhèn)鞯慕?jīng)緯度,匹配計(jì)算出相對(duì)距離。 明天也許會(huì)發(fā)布一篇IOS的隨筆,就對(duì)應(yīng)這個(gè)接口,主要貼在IOS上實(shí)現(xiàn)的時(shí)時(shí)定位傳云圖數(shù)據(jù)庫(kù)的代碼。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久99精国产一区二区三区四区 | 女人被爽到呻吟娇喘的视频动态图 | 2021日产国产麻豆 | 97久久久亚洲综合久久88 | 国产成人精品一区二三区2022 | 免费的强动漫人物 | 欧美影院一区二区三区 | 精品国产综合 | 四虎影院新网址 | 日本捏胸吃奶视频免费 | 亚洲网站大全 | 亚洲 欧美 日韩 综合 | 特级夫妻大片免费在线播放 | 色卡7707c| 四虎e234hcom | 2022av小四郎的最新地址 | 色综合久久最新中文字幕 | 福利一区福利二区 | 久久青青草视频在线观 | 日本老妇和子乱视频 | 福利片福利一区二区三区 | 久青草国产观看在线视频 | 99精品99 | 亚洲黄色三级视频 | 美女模特被c免费视频 | 黑人巨大爆粗亚裔女人 | 乌克兰少妇大胆大BBW | 国产免费不卡视频 | japanese秘书丝袜 | 国产精品热久久毛片 | 国产美女极品免费视频 | 日日干影院 | 久久99re热在线观看视频 | 日本高h| 美女流白浆| 午夜国产在线视频 | 国产乱插 | 国产肥老上视频 | 京东热在线观看 | 11 13加污女qq看他下面 | 色哟约 |