Bläddra i källkod

修改坐标、modifyCloud

wuweihao 4 år sedan
förälder
incheckning
c349d5ef0a

+ 1 - 1
README.md

@@ -98,7 +98,7 @@ t-p307mDm   /mnt/data/00001001/872174780395028480/74ee2a32dbde_20210803173654643
 
 aa-p307mDm
 
-db.getCollection('t_special_point').find({"sceneCode":"t-RJlwqtc"})
+db.getCollection('t_special_point').find({"sceneCode":"t-SNZRfWt"})
 
 
 t-gWKRICl /mnt/data/00001002/872519700045627392/74ee2a39e656_202108041610248900/results

+ 31 - 0
laser/src/main/java/com/fdkankan/indoor/base/convert/ConvertToPanoInfoFor4dkk.java

@@ -11,6 +11,7 @@ import com.fdkankan.indoor.core.service.SpecialPointService;
 import lombok.extern.slf4j.Slf4j;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
+import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -140,6 +141,7 @@ public class ConvertToPanoInfoFor4dkk {
 				pointEntity.setId(SnowFlakeUUidUtils.getUuid("SP"));
 				pointEntity.setPoiKey(TypeConstant.POI_FIRST_VIEW);
 				specialPointService.save(pointEntity);
+				log.info("firstVieW保存成功");
 			}
 		}
 		return laserPanos;
@@ -170,4 +172,33 @@ public class ConvertToPanoInfoFor4dkk {
 //			e.printStackTrace();
 //		}
 //	}
+
+	/**
+	 * 测试控制点, 还有filter热点
+	 */
+	@Test
+	public void testFilter(){
+		String filterPath = "F:\\test\\project\\age_laser\\laserData\\vision.txt";
+		ControlPointEntity dto = new ControlPointEntity();
+
+//		 double[] controlLocation1 = {-1.803582f,-1.927333f};  // 四维看看坐标
+//		 double[] controlCoordinate1 = {113.60044921875,22.364469401041667}; //gps坐标
+//
+//		 double[] controlLocation2 = {3.489484f,0.962214f}; // 四维看看坐标
+//		 double[] controlCoordinate2 = {113.60044406467014,22.36447238498264};  //gps坐标
+
+
+		double[] controlLocation1 = {-0.803582f,-0.927333f};  // 四维看看坐标
+		double[] controlCoordinate1 = {113.70044921875,22.764469401041667}; //gps坐标
+
+		double[] controlLocation2 = {3.089484f,0.062214f}; // 四维看看坐标
+		double[] controlCoordinate2 = {113.00044406467014,22.06447238498264};  //gps坐标
+
+		dto.setAgeControlLocation1(controlLocation1);
+		dto.setAgeControlLocation2(controlLocation2);
+		dto.setGpsControlCoordinate1(controlCoordinate1);
+		dto.setGpsControlCoordinate2(controlCoordinate2);
+		JSONArray array = createFilter("t11", filterPath, dto);
+		System.out.println("111111111111");
+	}
 }

+ 5 - 2
laser/src/main/java/com/fdkankan/indoor/base/convert/DistanceUtil.java

@@ -47,8 +47,11 @@ public class DistanceUtil {
      * @return     返回值单位是米
      */
     public  static  double distance3(Double[] coordinates1, Double[] coordinates2){
-        double[] p1= GisCoordinateTransform.Convert2000BLToGauss(coordinates1[0],coordinates1[1]);
-        double[] p2= GisCoordinateTransform.Convert2000BLToGauss(coordinates2[0],coordinates2[1]);
+//        double[] p1= GisCoordinateTransform.Convert2000BLToGauss(coordinates1[0],coordinates1[1]);
+//        double[] p2= GisCoordinateTransform.Convert2000BLToGauss(coordinates2[0],coordinates2[1]);
+
+        double[] p1= GisCoordinateTransform.convert2000BLToGauss(coordinates1[0],coordinates1[1]);
+        double[] p2= GisCoordinateTransform.convert2000BLToGauss(coordinates2[0],coordinates2[1]);
         double l=Math.pow(p1[0]-p2[0],2) +Math.pow(p1[1]-p2[1],2)+Math.pow(coordinates1[2]-coordinates2[2],2);
         //double l=Math.pow(coordinates1[0]-coordinates2[0],2) +Math.pow(coordinates1[1]-coordinates2[1],2)+Math.pow(coordinates1[2]-coordinates2[2],2);
         return Math.sqrt(l);

+ 80 - 16
laser/src/main/java/com/fdkankan/indoor/base/convert/GisCoordinateTransform.java

@@ -10,7 +10,7 @@ public  class GisCoordinateTransform {
     //WGS84坐标系参数
     private  static double WGS84_a=6378137.0;
     private  static double WGS84_f=1/298.2572236;
-
+    private static  double  earthRadius= 6378137;//地球半径
     /**
      * 求三度分带的中央经线
      * @param longitude
@@ -19,23 +19,95 @@ public  class GisCoordinateTransform {
     public static double getZone3CenterLon(double longitude){
         return  Math.round(longitude/3)*3;
     }
+
+    /**
+     * 2000坐标系 经纬度转平面坐标算法  也就是经纬度转米
+     * @param longitude 经度
+     * @param latitude  纬度
+     * @return
+     */
+    public static double[] convertWGS_84BLToGauss(double longitude, double latitude)
+    {
+        return  convertGaussToBL(longitude,  latitude,  WGS84_a,WGS84_f);
+    }
+
+    /**
+     * 2000坐标系 平面转经纬度坐标算法  也就是米转经纬度
+     * @param x x坐标,对应经度
+     * @param y  y坐标,对应纬度
+     * @param  centerlon  所处带的中央经线
+     * @return
+     */
+    public static double[] convertWGS_84GaussToBL(double x, double y,double centerlon)
+    {
+        return   convertGaussToBL(x,  y, centerlon, WGS84_a,WGS84_f);
+    }
+
     /**
      * 2000坐标系 经纬度转平面坐标算法  也就是经纬度转米
      * @param longitude 经度
      * @param latitude  纬度
      * @return
      */
-    public static double[] Convert2000BLToGauss(double longitude, double latitude)
+    public static double[] convert2000BLToGauss(double longitude, double latitude)
+    {
+        return  convertGaussToBL(longitude,  latitude,  CGCS2000_a,CGCS2000_f);
+    }
+
+    /**
+     * 2000坐标系 平面转经纬度坐标算法  也就是米转经纬度
+     * @param x x坐标,对应经度
+     * @param y  y坐标,对应纬度
+     * @param  centerlon  所处带的中央经线
+     * @return
+     */
+    public static double[] convert2000GaussToBL(double x, double y,double centerlon)
     {
+        return   convertGaussToBL(x,  y, centerlon, CGCS2000_a,CGCS2000_f);
+    }
+
+    /**
+     * 4326转33857
+     * @param longitude
+     * @param latitude
+     * @return
+     */
+    public static double[] WGS84_4326To3857(double longitude, double latitude) {
+        double a=longitude,b=latitude;
+        double[] output = new double[2];
+        if(89.99999 > b&&-89.99999 < b){
+            b *= .017453292519943;
+        }
+        output[0] = 0.017453292519943 * a * earthRadius;
+        output[1] = earthRadius/2 * Math.log((1 + Math.sin(b)) / (1 - Math.sin(b)));
+        return output;
+    }
+
+    /**
+     *  3857平面坐标转4326地理坐标,单位转换是米转经纬度
+     * @param x
+     * @param y
+     * @return
+     */
+    public static double[] WGS84_3857To4326(double x, double y) {
+        double a=x,b=y;
+        double[] output = new double[2];
+        a = a / earthRadius * 57.29577951308232;
+        output[0] =  a - 360 * Math.floor((a + 180) / 360);
+        output[1] = 57.29577951308232 * (Math.PI / 2 - 2 * Math.atan(Math.exp(-1 * b / earthRadius)));
+        return output;
+    }
+
+    private static  double[] convertGaussToBL(double longitude, double latitude,double a,double f){
         double[] output = new double[2];
         double longitude1,latitude1,longitude0,  X0,Y0, xval,yval;
         //NN曲率半径,测量学里面用N表示
         //M为子午线弧长,测量学里用大X表示
         //fai为底点纬度,由子午弧长反算公式得到,测量学里用Bf表示
         //R为底点所对的曲率半径,测量学里用Nf表示
-        double a,f, e2,ee, NN, T,C,A, M, iPI;
+        double  e2,ee, NN, T,C,A, M, iPI;
         iPI = 0.0174532925199433; //3.1415926535898/180.0;
-        a= CGCS2000_a; f=CGCS2000_f; //CGCS2000坐标系参数
+        // a= CGCS2000_a; f=CGCS2000_f; //CGCS2000坐标系参数
         longitude0=Math.round(longitude/3)*3;//中央子午线计算
         longitude0 = longitude0 * iPI ;//中央子午线转换为弧度
         longitude1 = longitude * iPI ; //经度转换为弧度
@@ -62,25 +134,17 @@ public  class GisCoordinateTransform {
         return output;
     }
 
-    /**
-     * 2000坐标系 平面转经纬度坐标算法  也就是米转经纬度
-     * @param x x坐标,对应经度
-     * @param y  y坐标,对应纬度
-     * @param  centerlon  所处带的中央经线
-     * @return
-     */
-    public static double[] Convert2000GaussToBL(double x, double y,double centerlon)
-    {
+    private static  double[] convertGaussToBL(double x, double y,double centerlon,double a,double f){
         double[] output = new double[2];
         int ProjNo; int ZoneWide; ////带宽
         double longitude1,latitude1, longitude0,latitude0, X0,Y0, xval,yval;
-        double e1,e2,f,a, ee, NN, T,C, M, D,R,u,fai, iPI;
+        double e1,e2, ee, NN, T,C, M, D,R,u,fai, iPI;
         iPI = 0.0174532925199433; ////3.1415926535898/180.0;
-        a=CGCS2000_a; f=CGCS2000_f; //CGCS2000坐标系参数
+        // a=CGCS2000_a; f=CGCS2000_f; //CGCS2000坐标系参数
         ZoneWide = 3; ////3度带宽
         ProjNo = (int)(x/1000000L) ; //查找带号
         longitude0 = (ProjNo-1) * ZoneWide + ZoneWide / 2;
-       // System.out.println(longitude0);
+        // System.out.println(longitude0);
         longitude0=centerlon;
         longitude0 = longitude0 * iPI ; //中央经线
         X0 = ProjNo*1000000L+500000L;

+ 25 - 9
laser/src/main/java/com/fdkankan/indoor/base/convert/GisCoordinateUtil.java

@@ -74,11 +74,25 @@ public class GisCoordinateUtil {
      * @param bX
      * @param bY
      */
+//    public  static  void calculateVariable (double alon,double alat,double aX,double aY,double blon,double blat,double bX,double bY){
+//       double[] a= GisCoordinateTransform.Convert2000BLToGauss(alon,alat);
+//       double[] b= GisCoordinateTransform.Convert2000BLToGauss(blon,blat);
+//       dx=a[0]-aX;
+//       dy=a[1]-aY;
+//        locationplaneVector=new double[2];
+//        locationplaneVector[0]=a[0]-b[0];
+//        locationplaneVector[1]=a[1]-b[1];
+//        geographicplaneVector=new double[2];
+//        geographicplaneVector[0]=aX-bX;
+//        geographicplaneVector[1]=aY-bY;
+//        centerLon=GisCoordinateTransform.getZone3CenterLon(alon);
+//    }
+
     public  static  void calculateVariable (double alon,double alat,double aX,double aY,double blon,double blat,double bX,double bY){
-       double[] a= GisCoordinateTransform.Convert2000BLToGauss(alon,alat);
-       double[] b= GisCoordinateTransform.Convert2000BLToGauss(blon,blat);
-       dx=a[0]-aX;
-       dy=a[1]-aY;
+        double[] a= GisCoordinateTransform.WGS84_4326To3857(alon,alat);
+        double[] b= GisCoordinateTransform.WGS84_4326To3857(blon,blat);
+        dx=a[0]-aX;
+        dy=a[1]-aY;
         locationplaneVector=new double[2];
         locationplaneVector[0]=a[0]-b[0];
         locationplaneVector[1]=a[1]-b[1];
@@ -88,6 +102,7 @@ public class GisCoordinateUtil {
         centerLon=GisCoordinateTransform.getZone3CenterLon(alon);
     }
 
+
     /**
      * 本地坐标转经纬度
      * @param loctionX
@@ -99,10 +114,10 @@ public class GisCoordinateUtil {
         double y1=locationplaneVector[1];
         double x2=geographicplaneVector[0];
         double y2=geographicplaneVector[1];
-        double tana1=y1/x1;
-        double tana2=y2/x2;
-        double a1=Math.atan(tana1);
-        double a2=Math.atan(tana2);
+//        double tana1=y1/x1;
+//        double tana2=y2/x2;
+        double a1=Math.atan2(y1, x1);
+        double a2=Math.atan2(y2, x2);
         double a=a2-a1;
         double sinazimuth,cosazimuth;
         cosazimuth=Math.cos(a);
@@ -112,6 +127,7 @@ public class GisCoordinateUtil {
         double x=resultX+dx;
         double y=resultY+dy;
 
-        return GisCoordinateTransform.Convert2000GaussToBL(x,y,centerLon);
+//        return GisCoordinateTransform.Convert2000GaussToBL(x,y,centerLon);
+        return GisCoordinateTransform.WGS84_3857To4326(x,y);
     }
 }

+ 4 - 1
laser/src/main/java/com/fdkankan/indoor/base/convert/ModifyCloud.java

@@ -44,7 +44,10 @@ public class ModifyCloud {
 	}
 	
 	public static JSONObject getBoundingBox(JSONObject json) {
-		JSONObject boundingBox = json.getJSONObject("boundingBox");
+//		JSONObject boundingBox = json.getJSONObject("boundingBox");
+		JSONObject boundingBox = json.getJSONObject("tightBoundingBox");
+
+
 		JSONObject result = new JSONObject();
 		
 		result.put("maxX", boundingBox.getDouble("ux"));

+ 3 - 1
laser/src/main/java/com/fdkankan/indoor/base/convert/TransformGPS.java

@@ -98,7 +98,9 @@ public class TransformGPS {
     public static void main(String[] args) {
         //String url = "src/main/resources/demo.cp";
         //GisCoordinateUtil.parseControlPointsFile(url);
-    	GisCoordinateUtil.calculateVariable (controlCoordinate1[0],controlCoordinate1[1],controlLocation1[0],controlLocation1[1],controlCoordinate2[0],controlCoordinate2[1],controlLocation2[0],controlLocation2[1]);
+    	GisCoordinateUtil.calculateVariable (
+    			controlCoordinate1[0],controlCoordinate1[1],controlLocation1[0],controlLocation1[1],
+				controlCoordinate2[0],controlCoordinate2[1],controlLocation2[0],controlLocation2[1]);
 //        double[] d = GisCoordinateUtil.transformLocationToBL(3.489638, -11.538544);