From d5481139f31ec7c1a1e793a465e4e969b869b5a9 Mon Sep 17 00:00:00 2001
From: luo <2855143437@qq.com>
Date: 星期二, 26 九月 2023 22:56:41 +0800
Subject: [PATCH] 9.26。11
---
cloud-server-management/src/main/java/com/dsh/course/util/GoogleMap/GoogleMapUtil.java | 253 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 253 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..0ebb8c3
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/util/GoogleMap/GoogleMapUtil.java
@@ -0,0 +1,253 @@
+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();
+ }
+
+
+
+
+
+// public void main(String[] ages){
+// try {
+// } catch (Exception e) {
+// e.printStackTrace();
+// }
+// }
+
+
+
+}
--
Gitblit v1.7.1