java servlet手機app訪問接口(三)高德地圖雲存儲及檢索。本站提示廣大學習愛好者:(java servlet手機app訪問接口(三)高德地圖雲存儲及檢索)文章只能為提供參考,不一定能成為您想要的結果。以下是java servlet手機app訪問接口(三)高德地圖雲存儲及檢索正文
這篇關於高德地圖的隨筆內容會多一點,
一、業務闡明
對應APP業務中的成員有兩類,一是服務人員,二是被服務人員, 次要完成功用, 對APP中的服務人員地位停止時時定位, 然後經過被服務人員登錄APP時提供的一個經緯度來計算服務人員與被服務人員之間的間隔 單位m。
上面是整個詳細流程,從創立高德對應使用(這裡注冊我就不說了)------最後完成此功用。
二、創立servlet對應的高德地圖使用,創立自己的雲圖數據庫表
注冊帳號後登錄點擊右上角的控制台,會呈現上面這個界面,我截圖
這裡當然是我曾經注冊好了的界面,假如沒注冊出去就一個 button 獲取key,這裡你直接點出來,就可以創立你的使用了,使用稱號隨意取,由於我們這裡是servlet來處置
相關的業務,所以選項為Web服務API, 這裡你點擊獲取key就會呈現上面的截圖
這一步完成,後我們就可以去創立我們要的雲圖表了,進入控制台,選擇鼠標移到我的數據,然後選擇上面的數據管理台(Web)進入添加雲圖表界面
上面是進入後的截圖,這個截圖完了我就直接運用文字解說了。
下面這個截圖是我創立好的後果,這裡我們需求先點擊右上角的 數據模版下載,將模版下載上去之後,修正相應的數據,添加自己需求的字段後,然後點新建地圖將
修正後的模版導入到雲圖庫中去,這個模版其實就是一個EXCEL導出的數據庫表。上面我直接截取我創立的表,我這個表添加了兩個字段,並且將一個字段設置成了索引字段。
記得白色的字段稱號必需保存(內容可以隨意修正),那是零碎模版自帶的,前面兩個黑色的字段是自己添加的,可以隨意修正,即便你將它上傳到了高德雲圖服務器之後也是可以改的。
上傳下面的表後,你再翻開之前 數據管理(WEB)就會呈現之前一張地圖的界面了,右邊有一張地圖方塊呈現,你點出來,就能看到你上傳人員的詳細信息,以及經過上傳的經緯度在地圖上展現的 黃色五角星標識。上面有截圖
這個表中顯示的字段是我修正過的,不是方才Excel中上傳的,點擊欄中的標題可以停止一系列的設置,這個我就不詳細說了,
只說下索引字段的設置,
出來後我選擇是 挑選排序索引-->挑選排序索引就是對用戶自己新添加的字段設置一個挑選條件。
我這裡運用的是下面雲圖中截圖的用戶類型,它的作用我也給各位截下圖。
到這一步我們整個創立雲圖及上傳的步驟就完成了。。。接下去我會講調用的辦法。
二、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這些都是你自己的)
上面是封裝的懇求辦法代碼
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>");
這裡我們查詢的挑選條件就是我們自己創立的字段(並且它被我們設置成了索引字段) type:按摩師------------------下面的_updatetime後面的字段都是我們數據庫中放的數據,前面的都是經過傳的經緯度查詢出來的真實數據,但是在真正運用時用時,這些數據都是 App端往外面添加的,而且APP還需求傳以後定位的城市稱號給Servlet,所以這裡的數據都是錯的。
三、servlet計算兩個經緯度間的間隔
這裡就是servlet經過經緯度計算被服務人員與服務人員的間隔,這裡其實是一對多的關系。一個被 被服務人員可以對應N個提供服務的人員。 被服務人員的所在地位經緯度會去婚配一切此次查詢出的服務人員的經緯度,計算出間隔。
上面貼計算間隔的辦法,這個是一個公用的辦法各大地圖都適用。
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上完成的時時定位傳雲圖數據庫的代碼。
以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支持。