From 640ff18d2d7f4be02ddb7f8f75e899f05545eb98 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期一, 05 二月 2024 11:56:52 +0800
Subject: [PATCH] 更新bug修改

---
 cloud-server-management/src/main/java/com/dsh/course/util/GoogleMap/GoogleMapUtil.java |  247 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 247 insertions(+), 0 deletions(-)

diff --git a/cloud-server-management/src/main/java/com/dsh/course/util/GoogleMap/GoogleMapUtil.java b/cloud-server-management/src/main/java/com/dsh/course/util/GoogleMap/GoogleMapUtil.java
new file mode 100644
index 0000000..9d1a1a3
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/util/GoogleMap/GoogleMapUtil.java
@@ -0,0 +1,247 @@
+package com.dsh.course.util.GoogleMap;
+
+import com.alibaba.fastjson.JSON;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.maps.*;
+import com.google.maps.model.*;
+import org.springframework.stereotype.Component;
+
+import java.time.Instant;
+
+/**
+ * 谷歌地图工具类
+ */
+@Component
+public class GoogleMapUtil {
+
+    private final String key = "AIzaSyBNgMRPVj8zt4OEGrUoyHifEDE9SCHYSLE";
+
+
+    /**
+     * 地理编码(地址获取位置坐标)
+     * @param address       地址信息
+     * @throws Exception
+     */
+    public GeocodeVo getGeocode(String address) throws Exception{
+        GeoApiContext context = new GeoApiContext.Builder()
+                .apiKey(key)
+                .build();
+        GeocodingResult[] results =  GeocodingApi.geocode(context, address).await();
+        GeocodeVo vo = null;
+        if(results.length > 0){
+            Gson gson = new GsonBuilder().setPrettyPrinting().create();
+            System.out.println(gson.toJson(results[0].addressComponents));
+
+            Geometry geometry = results[0].geometry;
+            LatLng location = geometry.location;
+            vo = new GeocodeVo();
+            vo.setLat(location.lat);
+            vo.setLng(location.lng);
+        }
+        context.shutdown();
+        return vo;
+    }
+
+
+    /**
+     * 逆地理编码获取地址信息
+     * @param lat   纬度
+     * @param lng   经度
+     * @return
+     * @throws Exception
+     */
+    public ReverseGeocodeVo getReverseGeocode(double lat, double lng) throws Exception{
+        GeoApiContext context = new GeoApiContext.Builder()
+                .apiKey(key)
+                .build();
+        GeocodingApiRequest request = GeocodingApi.reverseGeocode(context, new LatLng(lat, lng));
+        GeocodingResult[] results = request.await();
+        ReverseGeocodeVo vo = null;
+        if(results.length > 0){
+            Gson gson = new GsonBuilder().setPrettyPrinting().create();
+            System.out.println(gson.toJson(results[0].addressComponents));
+
+
+            vo = new ReverseGeocodeVo();
+            AddressComponent[] addressComponents = results[0].addressComponents;
+            AddressComponentsVo[] addressComponentsVos = new AddressComponentsVo[addressComponents.length];
+            for (int i = 0; i < addressComponents.length; i++) {
+                AddressComponentsVo addressComponentsVos1 = new AddressComponentsVo();
+                addressComponentsVos1.setLongName(addressComponents[i].longName);
+                addressComponentsVos1.setShortName(addressComponents[i].shortName);
+                addressComponentsVos[i] = addressComponentsVos1;
+            }
+            String address = results[0].formattedAddress;
+            vo.setAddressComponentsVos(addressComponentsVos);
+            vo.setAddress(address);
+        }
+        context.shutdown();
+        return vo;
+    }
+
+
+    /**
+     * 搜索地图获取地图结果
+     * @param input
+     * @return
+     * @throws Exception
+     */
+    public FindPlaceFromTextVo findplacefromtext(String input) throws Exception{
+        GeoApiContext context = new GeoApiContext.Builder()
+                .apiKey(key)
+                .build();
+        FindPlaceFromTextRequest request = new FindPlaceFromTextRequest(context);
+        request.input(input);
+        request.inputType(FindPlaceFromTextRequest.InputType.TEXT_QUERY);
+        FindPlaceFromText findPlaceFromText = request.await();
+        PlacesSearchResult[] candidates = findPlaceFromText.candidates;
+        FindPlaceFromTextVo vo = null;
+        System.err.println(JSON.toJSONString(candidates));
+        if(candidates.length > 0){
+            vo = new FindPlaceFromTextVo();
+            String formattedAddress = candidates[0].formattedAddress;
+            String name = candidates[0].name;
+            Geometry geometry = candidates[0].geometry;
+            if(null == geometry){//没有返回结果,使用place_id继续搜索
+                // [{"permanentlyClosed":false,"placeId":"ChIJy1edVzvF7zYRaOqiGTkmb6I","rating":0.0,"userRatingsTotal":0}]
+                String placeId = candidates[0].placeId;
+
+
+            }
+            LatLng location = geometry.location;
+            double lat = location.lat;
+            double lng = location.lng;
+
+            vo.setName(name);
+            vo.setAddress(formattedAddress);
+            vo.setLat(lat);
+            vo.setLng(lng);
+        }
+        return vo;
+    }
+
+
+    /**
+     * 模糊搜索地图内容
+     * @param query
+     * @return
+     * @throws Exception
+     */
+    public FindPlaceFromTextVo textsearch(String query) throws Exception{
+        GeoApiContext context = new GeoApiContext.Builder()
+                .apiKey(key)
+                .build();
+        TextSearchRequest request = new TextSearchRequest(context);
+        request.query(query);
+        PlacesSearchResponse placesSearchResponse = request.await();
+        PlacesSearchResult[] results = placesSearchResponse.results;
+        FindPlaceFromTextVo vo = null;
+        System.err.println(JSON.toJSONString(results));
+        if(results.length > 0){
+            vo = new FindPlaceFromTextVo();
+            String formattedAddress = results[0].formattedAddress;
+            String name = results[0].name;
+            Geometry geometry = results[0].geometry;
+            LatLng location = geometry.location;
+            double lat = location.lat;
+            double lng = location.lng;
+
+            vo.setName(name);
+            vo.setAddress(formattedAddress);
+            vo.setLat(lat);
+            vo.setLng(lng);
+        }
+        return vo;
+    }
+
+
+    /**
+     * 获取两个地点之间的预估里程和预估时间
+     * @param origin        起点名称
+     * @param destination   终点名称
+     * @return
+     * @throws Exception
+     */
+    public DistancematrixVo getDistancematrix(String origin, String destination) throws Exception{
+        GeoApiContext context = new GeoApiContext.Builder()
+                .apiKey(key)
+                .build();
+        DistanceMatrixApiRequest request = DistanceMatrixApi.getDistanceMatrix(context, new String[]{origin}, new String[]{destination});
+        request.mode(TravelMode.DRIVING);//出行方式(驾车)
+        request.avoid(DirectionsApi.RouteRestriction.TOLLS);
+        request.trafficModel(TrafficModel.BEST_GUESS);
+        request.departureTime(Instant.now());
+        DistanceMatrix distanceMatrix = request.await();
+        Gson gson = new GsonBuilder().setPrettyPrinting().create();
+        System.out.println(gson.toJson(distanceMatrix));
+        context.shutdown();
+
+        DistanceMatrixElement elements = distanceMatrix.rows[0].elements[0];
+        DistancematrixVo vo = new DistancematrixVo();
+        vo.setDistance(elements.distance.inMeters);
+        vo.setDuration(elements.duration.inSeconds);
+        return vo;
+    }
+
+
+    /**
+     * 获取两点之间的距离
+     * @param sLat
+     * @param sLnt
+     * @param eLat
+     * @param eLnt
+     * @return
+     * @throws Exception
+     */
+    public DistancematrixVo getDistancematrix(Double sLat, Double sLnt, Double eLat, Double eLnt) throws Exception{
+        GeoApiContext context = new GeoApiContext.Builder()
+                .apiKey(key)
+                .build();
+        DistanceMatrixApiRequest request = DistanceMatrixApi.newRequest(context);
+        request.origins(new LatLng(sLat, sLnt));
+        request.destinations(new LatLng(eLat, eLnt));
+        request.mode(TravelMode.DRIVING);//出行方式(驾车)
+        request.avoid(DirectionsApi.RouteRestriction.TOLLS);
+        request.trafficModel(TrafficModel.BEST_GUESS);
+        request.departureTime(Instant.now());
+        DistanceMatrix distanceMatrix = request.await();
+        Gson gson = new GsonBuilder().setPrettyPrinting().create();
+        System.out.println(gson.toJson(distanceMatrix));
+        context.shutdown();
+
+        DistanceMatrixElement elements = distanceMatrix.rows[0].elements[0];
+        DistancematrixVo vo = new DistancematrixVo();
+        vo.setDistance(elements.distance.inMeters);
+        vo.setDuration(elements.duration.inSeconds);
+        return vo;
+    }
+
+
+    /**
+     * 获取两地点之间的线路规划
+     * @param origin        起点 要计算方向的位置ID、地址或文本纬度/经度值。目标参数的选项与原点参数的相同。
+     * @param destination   终点 要计算方向的位置ID、地址或文本纬度/经度值。目标参数的选项与原点参数的相同。
+     *
+     */
+    public void getDirections(String origin, String destination) throws Exception{
+        GeoApiContext context = new GeoApiContext.Builder()
+                .apiKey(key)
+                .build();
+        DirectionsApiRequest directions = DirectionsApi.getDirections(context, origin, destination);
+        directions.mode(TravelMode.BICYCLING);//出行方式(骑行)
+        DirectionsResult result = directions.await();
+
+        Gson gson = new GsonBuilder().setPrettyPrinting().create();
+        System.out.println(gson.toJson(result));
+        context.shutdown();
+    }
+
+
+
+
+
+
+
+
+}

--
Gitblit v1.7.1