Heim  >  Artikel  >  Java  >  Wie rufe ich mit Java die Baidu-Schnittstelle auf, um die Entfernung zwischen zwei Standorten zu ermitteln?

Wie rufe ich mit Java die Baidu-Schnittstelle auf, um die Entfernung zwischen zwei Standorten zu ermitteln?

王林
王林nach vorne
2023-05-07 23:22:061691Durchsuche

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/

Betreten Sie die Konsole, erstellen Sie eine Anwendung und holen Sie sich den AK: #🎜🎜 #

#🎜 🎜#

Beim Erstellen einer Anwendung:

Typ: Server auswählen

IP-Whitelist: 0.0.0.0/0Wie rufe ich mit Java die Baidu-Schnittstelle auf, um die Entfernung zwischen zwei Standorten zu ermitteln?

Dafür werden zwei Baidu-Schnittstellen verwendet. Die Schnittstellenadressen lauten wie folgt: Wie rufe ich mit Java die Baidu-Schnittstelle auf, um die Entfernung zwischen zwei Standorten zu ermitteln?

Geokodierungsdienst: https:/ /lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding#🎜 🎜#
https://lbsyun.baidu.com/index.php?title=webapi/directionlite-v1# 🎜🎜#

Code schreiben:

1. Grundkonfigurationsattribut

sky:
  baidumap:
    shop-address: 北京市西城区广安门内大街167号翔达大厦1层
    ak: XXXXXXXXXXXXXXXXXXXXXXXXXX
    default-distance: 5000   // 这里在本文中没有使用,
Tool-Klasse zum Senden von Anfragen

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen