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