From 433b18fddbdb38f0c2a0a2358bc74fe46e10c9ba Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Thu, 17 Aug 2023 11:07:41 +0800 Subject: [PATCH] chore:测试提交 --- screen-manage/src/main/java/com/moral/api/controller/TestController.java | 41 +++++ screen-manage/src/main/java/com/moral/api/service/HistorySecondCruiserService.java | 2 screen-manage/src/main/java/com/moral/api/service/impl/ManageCoordinateDetailServiceImpl.java | 92 ++++++++++++ screen-manage/src/main/java/com/moral/api/controller/CruiserController.java | 4 screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondCruiserServiceImpl.java | 28 +++ screen-manage/src/main/java/com/moral/api/service/ManageCoordinateDetailService.java | 10 + screen-manage/src/main/java/com/moral/api/util/RoadUtils.java | 157 ++++++++++++++++++++++ screen-manage/src/main/java/com/moral/api/pojo/dto/cruiser/CruiserDTO.java | 3 screen-manage/src/main/java/com/moral/api/controller/ManageCoordinateDetailController.java | 29 +++ screen-manage/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java | 5 10 files changed, 355 insertions(+), 16 deletions(-) diff --git a/screen-manage/src/main/java/com/moral/api/controller/CruiserController.java b/screen-manage/src/main/java/com/moral/api/controller/CruiserController.java index 2c34812..651b23f 100644 --- a/screen-manage/src/main/java/com/moral/api/controller/CruiserController.java +++ b/screen-manage/src/main/java/com/moral/api/controller/CruiserController.java @@ -69,9 +69,9 @@ if (!params.containsKey("mac") || !params.containsKey("time1")|| !params.containsKey("time2")) { return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } - List<CruiserDTO> data = historySecondCruiserService.getCruiserInFo(params); + Map<String, Object> cruiserInFo = historySecondCruiserService.getCruiserInFo(params); - return ObjectUtils.isEmpty(data)? ResultMessage.ok() : ResultMessage.ok(data); + return ObjectUtils.isEmpty(cruiserInFo)? ResultMessage.ok() : ResultMessage.ok(cruiserInFo); } diff --git a/screen-manage/src/main/java/com/moral/api/controller/ManageCoordinateDetailController.java b/screen-manage/src/main/java/com/moral/api/controller/ManageCoordinateDetailController.java index d819dd2..97ed93a 100644 --- a/screen-manage/src/main/java/com/moral/api/controller/ManageCoordinateDetailController.java +++ b/screen-manage/src/main/java/com/moral/api/controller/ManageCoordinateDetailController.java @@ -2,6 +2,8 @@ import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -9,6 +11,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.moral.api.entity.ManageCoordinateDetail; @@ -49,7 +53,18 @@ * @return */ @PostMapping("batch") - public ResultMessage getInserts(){ + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String"), + @ApiImplicitParam(name = "coordinateId", value = "������id", required = true, paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "time1", value = "���������2021-08-18", required = true, paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "time2", value = "���������2021-08-18", required = true, paramType = "query", dataType = "String") + }) + public ResultMessage getInserts(@RequestBody Map<String,Object> params){ + if (!params.containsKey("coordinateId") || !params.containsKey("time1")|| !params.containsKey("time2")) { + return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); + } + + return null; } @@ -84,7 +99,17 @@ * @return */ @GetMapping("select") - public ResultMessage selectAll(){ + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String"), + @ApiImplicitParam(name = "coordinateId", value = "������id", required = true, paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "time1", value = "���������2021-08-18", required = true, paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "time2", value = "���������2021-08-18", required = true, paramType = "query", dataType = "String") + }) + public ResultMessage selectAll(@RequestBody Map<String,Object> params){ + if (!params.containsKey("coordinateId") || !params.containsKey("time1")|| !params.containsKey("time2")) { + return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); + } + Map<String, Object> map = manageCoordinateDetailService.selectCoordinate(params); return null; } } diff --git a/screen-manage/src/main/java/com/moral/api/controller/TestController.java b/screen-manage/src/main/java/com/moral/api/controller/TestController.java index 35bd368..6222d6d 100644 --- a/screen-manage/src/main/java/com/moral/api/controller/TestController.java +++ b/screen-manage/src/main/java/com/moral/api/controller/TestController.java @@ -8,6 +8,10 @@ import com.moral.api.entity.Test; import com.moral.api.entity.UnitConversion; import com.moral.api.mapper.SysDictDataMapper; +import com.moral.api.pojo.dto.account.AccountDTO; +import com.moral.api.pojo.dto.accountRole.AccountRoleDTO; +import com.moral.api.pojo.dto.adjust.AdjustDTO; +import com.moral.api.service.DeviceService; import com.moral.api.service.SensorService; import com.moral.api.service.SysDictDataService; import com.moral.api.service.TestService; @@ -212,18 +216,43 @@ @Autowired SysDictDataMapper sysDictDataMapper; + @Autowired + private DeviceService deviceService; + @ApiOperation(value = "������������", notes = "������������") @ApiImplicitParams({ @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String") }) @RequestMapping(value = "getSensor", method = RequestMethod.GET) public void getSensor() { - QueryWrapper<Sensor> queryWrapper = new QueryWrapper<>(); - queryWrapper.select("code").eq("is_delete", Constants.NOT_DELETE); - List<Object> list = sensorService.listObjs(queryWrapper); - for (Object o : list) { - System.out.println(o); - } + HashMap<String, Object> deviceData = new HashMap<>(); + deviceData.put("time","1691996716839"); + deviceData.put("DataTime","20230814150000"); + deviceData.put("mac","p5dnd7a0245362"); + deviceData.put("a00e12","11479.2"); + deviceData.put("a00e13","44.0"); + deviceData.put("a21005","0.0264"); + deviceData.put("a21004","20.0"); + deviceData.put("a21026","30.5"); + deviceData.put("a01001","38.1"); + deviceData.put("a05024","279.6"); + deviceData.put("a01002","54.2"); + deviceData.put("a01007","2.45"); + deviceData.put("a01006","805.834"); + deviceData.put("a01008","102.0"); + deviceData.put("a34002","4.9"); + deviceData.put("a34004","4.9"); + deviceData.put("a00e03","798.5"); + deviceData.put("a00e04","2.9"); + deviceData.put("a99054","0.0348"); + deviceData.put("a31001","0.1"); + Map<String, Object> map = deviceService.adjustDeviceData(deviceData, "2"); +// QueryWrapper<Sensor> queryWrapper = new QueryWrapper<>(); +// queryWrapper.select("code").eq("is_delete", Constants.NOT_DELETE); +// List<Object> list = sensorService.listObjs(queryWrapper); +// for (Object o : list) { +// System.out.println(o); +// } } } diff --git a/screen-manage/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java b/screen-manage/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java index c87c537..ac6cc22 100644 --- a/screen-manage/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java +++ b/screen-manage/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java @@ -7,6 +7,7 @@ import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.extension.activerecord.Model; @@ -55,4 +56,8 @@ private String updayeUserName; + @TableField(exist = false) + private String code; + + } diff --git a/screen-manage/src/main/java/com/moral/api/pojo/dto/cruiser/CruiserDTO.java b/screen-manage/src/main/java/com/moral/api/pojo/dto/cruiser/CruiserDTO.java index af4c2ed..76364ec 100644 --- a/screen-manage/src/main/java/com/moral/api/pojo/dto/cruiser/CruiserDTO.java +++ b/screen-manage/src/main/java/com/moral/api/pojo/dto/cruiser/CruiserDTO.java @@ -28,6 +28,9 @@ private Double flyLon; + private String data; + + @Override public boolean equals(Object o) { diff --git a/screen-manage/src/main/java/com/moral/api/service/HistorySecondCruiserService.java b/screen-manage/src/main/java/com/moral/api/service/HistorySecondCruiserService.java index 37b16df..00c00c1 100644 --- a/screen-manage/src/main/java/com/moral/api/service/HistorySecondCruiserService.java +++ b/screen-manage/src/main/java/com/moral/api/service/HistorySecondCruiserService.java @@ -25,5 +25,5 @@ List<SpecialDevice> selectCruisers(); //��������������������� - List<CruiserDTO> getCruiserInFo(Map<String, Object> params); + Map<String,Object> getCruiserInFo(Map<String, Object> params); } diff --git a/screen-manage/src/main/java/com/moral/api/service/ManageCoordinateDetailService.java b/screen-manage/src/main/java/com/moral/api/service/ManageCoordinateDetailService.java index ae2d9a4..1ef383b 100644 --- a/screen-manage/src/main/java/com/moral/api/service/ManageCoordinateDetailService.java +++ b/screen-manage/src/main/java/com/moral/api/service/ManageCoordinateDetailService.java @@ -1,5 +1,7 @@ package com.moral.api.service; +import java.util.Map; + import com.baomidou.mybatisplus.extension.service.IService; import com.moral.api.entity.ManageCoordinateDetail; @@ -10,4 +12,12 @@ void deleteCoordinate(Integer id); + + + + Map<String,Object> selectCoordinate(Map<String,Object> params); + + + Integer batchAll(Map<String,Object> params); + } diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondCruiserServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondCruiserServiceImpl.java index 0b2e9af..4e5e34d 100644 --- a/screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondCruiserServiceImpl.java +++ b/screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondCruiserServiceImpl.java @@ -12,6 +12,7 @@ import com.moral.api.service.HistorySecondCruiserService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.service.SpecialDeviceService; +import com.moral.api.util.RoadUtils; import com.moral.constant.Constants; import com.moral.constant.RedisConstants; import com.moral.util.DateUtils; @@ -24,9 +25,13 @@ import org.springframework.util.ObjectUtils; import java.sql.Wrapper; +import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -97,6 +102,7 @@ @Override public List<SpecialDevice> selectCruisers() { QueryWrapper<SpecialDevice> wrapper = new QueryWrapper<>(); + wrapper.select("name","mac"); wrapper.eq("is_delete",Constants.NOT_DELETE); List<SpecialDevice> specialDevices = specialDeviceMapper.selectList(wrapper); return specialDevices; @@ -108,7 +114,8 @@ * @return */ @Override - public List<CruiserDTO> getCruiserInFo(Map<String, Object> params) { + public Map<String,Object> getCruiserInFo(Map<String, Object> params) { + HashMap<String, Object> map = new HashMap<>(); params.put("dateFormat", "%Y-%m-%d %H:%i:%s"); List<CruiserDTO> data = historySecondCruiserMapper.getCruiserInfo(params); List<CruiserDTO> rsCruiser = data.stream().distinct().collect(Collectors.toList()); @@ -118,6 +125,18 @@ } double lon = o.getFlyLon(); double lat = o.getFlyLat(); + double[] doubles = RoadUtils.transformWGS84ToBD09(lon, lat); + Matcher matcher = Pattern.compile("\\d*\\.\\d{8}").matcher(""+doubles[0]); + matcher.find(); + String s = matcher.group(); + Matcher matcher1 = Pattern.compile("\\d*\\.\\d{8}").matcher(""+doubles[1]); + matcher1.find(); + String s1 = matcher1.group(); + o.setFlyLon(Double.parseDouble(s)); + o.setFlyLat(Double.parseDouble(s1)); + o.setData(lon+"_"+lat); +// o.setFlyLon(doubles[0]); +// o.setFlyLat(doubles[1]); if (lon < 70 || lon > 150 || lat < 20 || lat > 60) { return true; } @@ -126,8 +145,13 @@ if(CollectionUtils.isEmpty(data)){ return null; } + map.put("rsData",rsCruiser); log.info(data.size()+""); log.info(rsCruiser.size()+""); - return rsCruiser; + return map; } + + + + } diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/ManageCoordinateDetailServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/ManageCoordinateDetailServiceImpl.java index 66fc777..45c3471 100644 --- a/screen-manage/src/main/java/com/moral/api/service/impl/ManageCoordinateDetailServiceImpl.java +++ b/screen-manage/src/main/java/com/moral/api/service/impl/ManageCoordinateDetailServiceImpl.java @@ -1,23 +1,34 @@ package com.moral.api.service.impl; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.Date; - +import java.util.List; +import java.util.Map; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.entity.ManageCoordinateDetail; +import com.moral.api.mapper.HistorySecondCruiserMapper; import com.moral.api.mapper.ManageCoordinateDetailMapper; +import com.moral.api.pojo.dto.cruiser.CruiserDTO; import com.moral.api.service.ManageCoordinateDetailService; +import com.moral.api.util.RoadUtils; @Service +@Slf4j public class ManageCoordinateDetailServiceImpl extends ServiceImpl<ManageCoordinateDetailMapper, ManageCoordinateDetail> implements ManageCoordinateDetailService { @Autowired private ManageCoordinateDetailMapper manageCoordinateDetailMapper; + + @Autowired + private HistorySecondCruiserMapper historySecondCruiserMapper; /** * ��������������� * @param manageCoordinateDetail @@ -25,14 +36,18 @@ */ @Override public Integer insertCoordinate(ManageCoordinateDetail manageCoordinateDetail) { + double[] doubles = RoadUtils.transformBD09ToWGS84(manageCoordinateDetail.getLongitude(), manageCoordinateDetail.getLatitude()); + log.info(doubles[0]+"_"+doubles[1]); QueryWrapper<ManageCoordinateDetail> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("coordinate_id",manageCoordinateDetail.getCoordinateId()); - queryWrapper.eq("longitude",manageCoordinateDetail.getLongitude()); - queryWrapper.eq("latitude",manageCoordinateDetail.getLatitude()); + queryWrapper.eq("longitude",doubles[0]); + queryWrapper.eq("latitude",doubles[1]); Integer integer = manageCoordinateDetailMapper.selectCount(queryWrapper); if (integer<1){ manageCoordinateDetail.setCreateTime(new Date()); manageCoordinateDetail.setUpdateTime(new Date()); + manageCoordinateDetail.setLongitude(doubles[0]); + manageCoordinateDetail.setLatitude(doubles[1]); int insert = manageCoordinateDetailMapper.insert(manageCoordinateDetail); return insert; } @@ -47,4 +62,75 @@ public void deleteCoordinate(Integer id) { manageCoordinateDetailMapper.deleteById(id); } + + + /** + * ��������������� + * @param params + * @return + */ + @Override + public Map<String, Object> selectCoordinate(Map<String, Object> params) { + params.put("dateFormat", "%Y-%m-%d %H:%i:%s"); + String coordinateId = params.get("coordinateId").toString(); + QueryWrapper<ManageCoordinateDetail> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("coordinate_id",coordinateId); + List<ManageCoordinateDetail> manageCoordinateDetails = manageCoordinateDetailMapper.selectList(queryWrapper); + ArrayList<String> list1 = new ArrayList<>(); + ArrayList<String> list2 = new ArrayList<>(); + for (ManageCoordinateDetail manageCoordinateDetail : manageCoordinateDetails) { + Double latitude = manageCoordinateDetail.getLatitude(); + Double longitude = manageCoordinateDetail.getLongitude(); + String s = longitude + "_" + latitude; + list1.add(s); + } + List<CruiserDTO> cruiserInfo = historySecondCruiserMapper.getCruiserInfo(params); + for (CruiserDTO cruiserDTO : cruiserInfo) { + String s = cruiserDTO.getFlyLat().toString(); + String s1 = cruiserDTO.getFlyLon().toString(); + String rs = s1 + "_" + s; + list2.add(rs); + } + //��������� + list1.retainAll(list2); + //��������� + list2.removeAll(list1); + + return null; + } + + + /** + * ������������ + * @param params + * @return + */ + @Override + @Transactional + public Integer batchAll(Map<String, Object> params) { + params.put("dateFormat", "%Y-%m-%d %H:%i:%s"); + String coordinateId = params.get("coordinateId").toString(); + QueryWrapper<ManageCoordinateDetail> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("coordinate_id",coordinateId); + List<ManageCoordinateDetail> manageCoordinateDetails = manageCoordinateDetailMapper.selectList(queryWrapper); + ArrayList<String> list1 = new ArrayList<>(); + ArrayList<String> list2 = new ArrayList<>(); + for (ManageCoordinateDetail manageCoordinateDetail : manageCoordinateDetails) { + Double latitude = manageCoordinateDetail.getLatitude(); + Double longitude = manageCoordinateDetail.getLongitude(); + String s = longitude + "_" + latitude; + list1.add(s); + } + List<CruiserDTO> cruiserInfo = historySecondCruiserMapper.getCruiserInfo(params); + for (CruiserDTO cruiserDTO : cruiserInfo) { + String s = cruiserDTO.getFlyLat().toString(); + String s1 = cruiserDTO.getFlyLon().toString(); + String rs = s1 + "_" + s; + list2.add(rs); + } + //��������� + list2.removeAll(list1); + + return null; + } } diff --git a/screen-manage/src/main/java/com/moral/api/util/RoadUtils.java b/screen-manage/src/main/java/com/moral/api/util/RoadUtils.java new file mode 100644 index 0000000..c0cbf62 --- /dev/null +++ b/screen-manage/src/main/java/com/moral/api/util/RoadUtils.java @@ -0,0 +1,157 @@ +package com.moral.api.util; + + +/** + * ��������������� + */ + +public class RoadUtils { + + private static final double x_PI = 3.14159265358979324 * 3000.0 / 180.0; + private static final double PI = 3.1415926535897932384626; + private static final double a = 6378245.0; + private static final double ee = 0.00669342162296594323; + /** + * WGS84 ������ ��� GCJ02 + * + * @param lng ������ + * @param lat ������ + * @return GCJ02 ���������[���������������] + */ + public static double[] transformWGS84ToGCJ02(double lng, double lat) { + if (outOfChina(lng, lat)) { + return new double[]{lng, lat}; + } else { + double dLat = transformLat(lng - 105.0, lat - 35.0); + double dLng = transformLng(lng - 105.0, lat - 35.0); + double redLat = lat / 180.0 * PI; + double magic = Math.sin(redLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * PI); + dLng = (dLng * 180.0) / (a / sqrtMagic * Math.cos(redLat) * PI); + double mgLat = lat + dLat; + double mgLng = lng + dLng; + return new double[]{mgLng, mgLat}; + } + } + + private static double transformLat(double lng, double lat) { + double ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng)); + ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0; + return ret; + } + + private static double transformLng(double lng, double lat) { + double ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng)); + ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0; + return ret; + } + /** + * ������������������������������ + * + * @param lng ������ + * @param lat ������ + * @return ��������������������� + */ + public static boolean outOfChina(double lng, double lat) { + return (lng < 72.004 || lng > 137.8347) || (lat < 0.8293 || lat > 55.8271); + } + + /** + * GCJ02 ��������������� + * + * @param lng GCJ02 ������ + * @param lat GCJ02 ������ + * @return ���������������[���������������] + */ + public static double[] transformGCJ02ToBD09(double lng, double lat) { + double z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI); + double theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI); + double bd_lng = z * Math.cos(theta) + 0.0065; + double bd_lat = z * Math.sin(theta) + 0.006; + return new double[]{bd_lng, bd_lat}; + } + + + /** + * WGS84 ��� ������������BD09 + * + * @param lng ������ + * @param lat ������ + * @return BD09 ���������[���������������] + */ + public static double[] transformWGS84ToBD09(double lng, double lat) { + double[] lngLat = transformWGS84ToGCJ02(lng, lat); + + return transformGCJ02ToBD09(lngLat[0], lngLat[1]); + } + + + + /** + * ���������������BD09������ GCJ02 + * + * @param lng ������������ + * @param lat ������������ + * @return GCJ02 ���������[���������������] + */ + public static double[] transformBD09ToGCJ02(double lng, double lat) { + double x = lng - 0.0065; + double y = lat - 0.006; + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_PI); + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_PI); + double gcj_lng = z * Math.cos(theta); + double gcj_lat = z * Math.sin(theta); + return new double[]{gcj_lng, gcj_lat}; + + } + + /** + * ������������BD09 ��� WGS84 + * + * @param lng ������ + * @param lat ������ + * @return WGS84 ���������[���������������] + */ + public static double[] transformBD09ToWGS84(double lng, double lat) { + double[] lngLat = transformBD09ToGCJ02(lng, lat); + + return transformGCJ02ToWGS84(lngLat[0], lngLat[1]); + } + + + /** + * GCJ02 ��� WGS84 + * + * @param lng ������ + * @param lat ������ + * @return WGS84���������[���������������] + */ + public static double[] transformGCJ02ToWGS84(double lng, double lat) { + if (outOfChina(lng, lat)) { + return new double[]{lng, lat}; + } else { + double dLat = transformLat(lng - 105.0, lat - 35.0); + double dLng = transformLng(lng - 105.0, lat - 35.0); + double radLat = lat / 180.0 * PI; + double magic = Math.sin(radLat); + magic = 1 - ee * magic * magic; + double sqrtMagic = Math.sqrt(magic); + dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * PI); + dLng = (dLng * 180.0) / (a / sqrtMagic * Math.cos(radLat) * PI); + double mgLat = lat + dLat; + double mgLng = lng + dLng; + return new double[]{lng * 2 - mgLng, lat * 2 - mgLat}; + } + } + + + + + +} -- Gitblit v1.8.0