Heim >Java >javaLernprogramm >Wie rufe ich mit Java die Baidu-Schnittstelle auf, um die Entfernung zwischen zwei Standorten zu ermitteln?
Anforderung: Überprüfen Sie, ob die Lieferadresse außerhalb des Lieferbereichs liegt Gleichzeitig können Sie den „Geokodierungsdienst“ von Baidu verwenden, um den entsprechenden Längen- und Breitengrad abzurufen Breitengrad der beiden. Zu diesem Zeitpunkt können Sie die Entfernung durch Parsen von JSON ermitteln, um festzustellen, ob die Entfernung überschritten wird. Registrieren Sie ein Baidu-Konto. Es ist eine Authentifizierung mit echtem Namen erforderlich und Sie müssen einige grundlegende Informationen eingeben.
Zunächst müssen Sie eine AK von Baidu Map erhalten. 🎜🎜#
Melden Sie sich bei der offenen Baidu Map-Plattform an: https://lbsyun.baidu.com/
#🎜 🎜#
Beim Erstellen einer Anwendung:
Typ: Server auswählenIP-Whitelist: 0.0.0.0/0
Dafür werden zwei Baidu-Schnittstellen verwendet. Die Schnittstellenadressen lauten wie folgt:
Geokodierungsdienst: https:/ /lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding#🎜 🎜#https://lbsyun.baidu.com/index.php?title=webapi/directionlite-v1# 🎜🎜#Tool-Klasse zum Senden von AnfragenCode schreiben:
1. Grundkonfigurationsattributsky: baidumap: shop-address: 北京市西城区广安门内大街167号翔达大厦1层 ak: XXXXXXXXXXXXXXXXXXXXXXXXXX default-distance: 5000 // 这里在本文中没有使用,
Erklärung Da wir jetzt eine Anfrage vom Server senden müssen, müssen wir zu diesem Zeitpunkt das HttpClient Framework verwenden, um diese Funktion zu implementieren. Die folgende Toolklasse ist ein Paket dieses Frameworks
package com.sky.utils; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.http.NameValuePair; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.springframework.stereotype.Service; import java.io.IOException; import java.net.URI; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * Http工具类 */ @Slf4j public class HttpClientUtil { static final int TIMEOUT_MSEC = 5 * 1000; /** * 发送GET方式请求 * * @param url * @param paramMap * @return */ public static String doGet(String url, Map<String, String> paramMap) { // 创建Httpclient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); String result = ""; CloseableHttpResponse response = null; try { URIBuilder builder = new URIBuilder(url); if (paramMap != null) { for (String key : paramMap.keySet()) { builder.addParameter(key, paramMap.get(key)); } } URI uri = builder.build(); log.info("发送的请求====>{}", uri); //创建GET请求 HttpGet httpGet = new HttpGet(uri); //发送请求 response = httpClient.execute(httpGet); //判断响应状态 if (response.getStatusLine().getStatusCode() == 200) { result = EntityUtils.toString(response.getEntity(), "UTF-8"); } } catch (Exception e) { e.printStackTrace(); } finally { try { response.close(); httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } return result; } /** * 发送POST方式请求 * * @param url * @param paramMap * @return * @throws IOException */ public static String doPost(String url, Map<String, String> paramMap) throws IOException { // 创建Httpclient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = null; String resultString = ""; try { // 创建Http Post请求 HttpPost httpPost = new HttpPost(url); // 创建参数列表 if (paramMap != null) { List<NameValuePair> paramList = new ArrayList(); for (Map.Entry<String, String> param : paramMap.entrySet()) { paramList.add(new BasicNameValuePair(param.getKey(), param.getValue())); } // 模拟表单 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList); httpPost.setEntity(entity); } httpPost.setConfig(builderRequestConfig()); // 执行http请求 response = httpClient.execute(httpPost); resultString = EntityUtils.toString(response.getEntity(), "UTF-8"); } catch (Exception e) { throw e; } finally { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } return resultString; } /** * 发送POST方式请求 * * @param url * @param paramMap * @return * @throws IOException */ public static String doPost4Json(String url, Map<String, String> paramMap) throws IOException { // 创建Httpclient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = null; String resultString = ""; try { // 创建Http Post请求 HttpPost httpPost = new HttpPost(url); if (paramMap != null) { //构造json格式数据 JSONObject jsonObject = new JSONObject(); for (Map.Entry<String, String> param : paramMap.entrySet()) { jsonObject.put(param.getKey(), param.getValue()); } StringEntity entity = new StringEntity(jsonObject.toString(), "utf-8"); //设置请求编码 entity.setContentEncoding("utf-8"); //设置数据类型 entity.setContentType("application/json"); httpPost.setEntity(entity); } httpPost.setConfig(builderRequestConfig()); // 执行http请求 response = httpClient.execute(httpPost); resultString = EntityUtils.toString(response.getEntity(), "UTF-8"); } catch (Exception e) { throw e; } finally { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } return resultString; } private static RequestConfig builderRequestConfig() { return RequestConfig.custom() .setConnectTimeout(TIMEOUT_MSEC) .setConnectionRequestTimeout(TIMEOUT_MSEC) .setSocketTimeout(TIMEOUT_MSEC).build(); } }#🎜🎜 #Definieren Sie eine Standortklasse, um die Längen- und Breitengradinformationen der Adresse zu speichern Zukunft. Hinweis: Da die Symbolleiste von mir selbst geschrieben wurde, gibt es möglicherweise viele unangemessene Orte. Bitte weisen Sie darauf hin. Darüber hinaus gibt es einige Wenn nicht, ändern Sie es einfach in RuntimeException
package com.sky.entity; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; /** * @author : Cookie * date : 2023/4/20 9:20 * explain : */ @Data @Builder @NoArgsConstructor @AllArgsConstructor public class Location { /** * 纬度值 */ private double lat; /** * 经度值 */ private double lng; }
Zu diesem Zeitpunkt können Sie den Abstand zwischen den beiden ermitteln, indem Sie die Tool-Klasse aufrufen und das # übergeben. 🎜🎜# Methode.
Das obige ist der detaillierte Inhalt vonWie rufe ich mit Java die Baidu-Schnittstelle auf, um die Entfernung zwischen zwei Standorten zu ermitteln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!