zhujinghui 4 лет назад
Родитель
Сommit
311c0d194a
27 измененных файлов с 386 добавлено и 69 удалено
  1. 1 1
      .idea/artifacts/indoor_war.xml
  2. 6 2
      .idea/artifacts/indoor_war_exploded.xml
  3. 4 4
      indoor.iml
  4. 3 21
      pom.xml
  5. 6 1
      src/main/java/com/fdkankan/indoor/IndoorApplication.java
  6. 74 0
      src/main/java/com/fdkankan/indoor/base/util/JsonUtil/JsonUtil.java
  7. 19 20
      src/main/java/com/fdkankan/indoor/core/controller/JsonDataController.java
  8. 35 0
      src/main/java/com/fdkankan/indoor/core/controller/SiteModelController.java
  9. 16 0
      src/main/java/com/fdkankan/indoor/core/dto/QueryJsonDataBase.java
  10. 1 5
      src/main/java/com/fdkankan/indoor/core/dto/QueryJsonData.java
  11. 19 0
      src/main/java/com/fdkankan/indoor/core/dto/QueryJsonDataTwo.java
  12. 2 2
      src/main/java/com/fdkankan/indoor/core/service/JsonDataService.java
  13. 15 0
      src/main/java/com/fdkankan/indoor/core/service/SiteModelService.java
  14. 74 7
      src/main/java/com/fdkankan/indoor/core/service/impl/JsonDataServiceImpl.java
  15. 100 0
      src/main/java/com/fdkankan/indoor/core/service/impl/SiteModelServiceImpl.java
  16. 1 1
      src/main/resources/application-test.properties
  17. 1 1
      src/main/resources/application.properties
  18. 1 1
      target/classes/application-test.properties
  19. 1 1
      target/classes/application.properties
  20. BIN
      target/classes/com/fdkankan/indoor/core/controller/JsonDataController.class
  21. BIN
      target/classes/com/fdkankan/indoor/core/dto/QueryJsonData.class
  22. BIN
      target/classes/com/fdkankan/indoor/core/service/JsonDataService.class
  23. BIN
      target/classes/com/fdkankan/indoor/core/service/impl/JsonDataServiceImpl.class
  24. BIN
      target/indoor-0.0.1-SNAPSHOT.war
  25. BIN
      target/indoor-0.0.1-SNAPSHOT.war.original
  26. 1 1
      target/maven-archiver/pom.properties
  27. 6 1
      target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

+ 1 - 1
.idea/artifacts/indoor_war.xml

@@ -7,7 +7,7 @@
         <packaging>war</packaging>
       </options>
     </properties>
-    <root id="archive" name="indoor-0.0.1-SNAPSHOT.war">
+    <root id="archive" name="sxswsw-0.0.1-SNAPSHOT.war">
       <element id="artifact" artifact-name="indoor:war exploded" />
     </root>
   </artifact>

+ 6 - 2
.idea/artifacts/indoor_war_exploded.xml

@@ -1,6 +1,6 @@
 <component name="ArtifactManager">
   <artifact type="exploded-war" name="indoor:war exploded">
-    <output-path>$PROJECT_DIR$/target/indoor-0.0.1-SNAPSHOT</output-path>
+    <output-path>$PROJECT_DIR$/target/sxswsw-0.0.1-SNAPSHOT</output-path>
     <properties id="maven-jee-properties">
       <options>
         <exploded>true</exploded>
@@ -36,6 +36,10 @@
           <element id="library" level="project" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1" />
           <element id="library" level="project" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.1" />
           <element id="library" level="project" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.10.1" />
+          <element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.2.2.RELEASE" />
+          <element id="library" level="project" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.29" />
+          <element id="library" level="project" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.29" />
+          <element id="library" level="project" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.29" />
           <element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.2.2.RELEASE" />
           <element id="library" level="project" name="Maven: jakarta.validation:jakarta.validation-api:2.0.1" />
           <element id="library" level="project" name="Maven: org.hibernate.validator:hibernate-validator:6.0.18.Final" />
@@ -98,7 +102,7 @@
         </element>
       </element>
       <element id="directory" name="META-INF">
-        <element id="file-copy" path="$PROJECT_DIR$/target/indoor-0.0.1-SNAPSHOT/META-INF/MANIFEST.MF" />
+        <element id="file-copy" path="$PROJECT_DIR$/target/sxswsw-0.0.1-SNAPSHOT/META-INF/MANIFEST.MF" />
       </element>
       <element id="javaee-facet-resources" facet="indoor/web/Web" />
     </root>

+ 4 - 4
indoor.iml

@@ -49,6 +49,10 @@
     <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.1" level="project" />
     <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.1" level="project" />
     <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.10.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.2.2.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.29" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.29" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.29" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.2.2.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.1" level="project" />
     <orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.18.Final" level="project" />
@@ -59,10 +63,6 @@
     <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.2.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.2.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.2.RELEASE" level="project" />
-    <orderEntry type="library" scope="PROVIDED" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.2.2.RELEASE" level="project" />
-    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.29" level="project" />
-    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.29" level="project" />
-    <orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.29" level="project" />
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-mongodb:2.2.2.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.mongodb:mongodb-driver:3.11.2" level="project" />
     <orderEntry type="library" name="Maven: org.mongodb:bson:3.11.2" level="project" />

+ 3 - 21
pom.xml

@@ -9,10 +9,10 @@
 		<relativePath/> <!-- lookup parent from repository -->
 	</parent>
 	<groupId>com.fdkankan</groupId>
-	<artifactId>sxswsw</artifactId>
+	<artifactId>indoor</artifactId>
 	<version>0.0.1-SNAPSHOT</version>
-	<packaging>war</packaging>
-	<name>sxswsw</name>
+	<packaging>jar</packaging>
+	<name>indoor</name>
 	<description>Demo project for Spring Boot</description>
 
 	<properties>
@@ -48,24 +48,6 @@
 			<artifactId>spring-boot-starter-data-mongodb</artifactId>
 		</dependency>
 
-		<!-- fastjson -->
-<!--		<dependency>-->
-<!--			<groupId>com.alibaba</groupId>-->
-<!--			<artifactId>fastjson</artifactId>-->
-<!--			<version>1.2.67</version>-->
-<!--		</dependency>-->
-<!--		<dependency>-->
-<!--			<groupId>com.fasterxml.jackson.core</groupId>-->
-<!--			<artifactId>jackson-databind</artifactId>-->
-<!--			<version>2.9.5</version>-->
-<!--			<exclusions>-->
-<!--				<exclusion>-->
-<!--					<groupId>com.fasterxml.jackson.core</groupId>-->
-<!--					<artifactId>jackson-annotations</artifactId>-->
-<!--				</exclusion>-->
-<!--			</exclusions>-->
-<!--		</dependency>-->
-
 
 		<dependency>
 			<groupId>org.projectlombok</groupId>

+ 6 - 1
src/main/java/com/fdkankan/indoor/IndoorApplication.java

@@ -12,7 +12,12 @@ import org.springframework.scheduling.annotation.EnableScheduling;
  */
 @SpringBootApplication
 @Slf4j
-public class IndoorApplication {
+public class IndoorApplication extends SpringBootServletInitializer {
+
+	@Override
+	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+		return application.sources(IndoorApplication.class);
+	}
 
 	public static void main(String[] args) {
 		SpringApplication.run(IndoorApplication.class, args);

+ 74 - 0
src/main/java/com/fdkankan/indoor/base/util/JsonUtil/JsonUtil.java

@@ -1,5 +1,8 @@
 package com.fdkankan.indoor.base.util.JsonUtil;
 
+import java.awt.geom.Point2D;
+import java.util.List;
+
 /**
  * @author Admin
  */
@@ -38,5 +41,76 @@ public class JsonUtil {
     }
 
 
+    /**
+     * 判断点是否在多边形内
+     * @param point 检测点
+     * @param pts   多边形的顶点
+     * @return      点在多边形内返回true,否则返回false
+     */
+    public static boolean IsPtInPoly(Point2D.Double point, List<Point2D.Double> pts){
+
+        int N = pts.size();
+        boolean boundOrVertex = true; //如果点位于多边形的顶点或边上,也算做点在多边形内,直接返回true
+        int intersectCount = 0;//cross points count of x
+        double precision = 2e-10; //浮点类型计算时候与0比较时候的容差
+        Point2D.Double p1, p2;//neighbour bound vertices
+        Point2D.Double p = point; //当前点
+
+        p1 = pts.get(0);//left vertex
+        for(int i = 1; i <= N; ++i){//check all rays
+            if(p.equals(p1)){
+                return boundOrVertex;//p is an vertex
+            }
+
+            p2 = pts.get(i % N);//right vertex
+            if(p.x < Math.min(p1.x, p2.x) || p.x > Math.max(p1.x, p2.x)){//ray is outside of our interests
+                p1 = p2;
+                continue;//next ray left point
+            }
+
+            if(p.x > Math.min(p1.x, p2.x) && p.x < Math.max(p1.x, p2.x)){//横坐标 内  ray is crossing over by the algorithm (common part of)
+                if(p.y <= Math.max(p1.y, p2.y)){//y下  x is before of ray
+                    if(p1.x == p2.x && p.y >= Math.min(p1.y, p2.y)){//overlies on a horizontal ray  垂线
+                        return boundOrVertex;
+                    }
+
+                    if(p1.y == p2.y){//水平线 ray is vertical
+                        if(p1.y == p.y){//水平线内 overlies on a vertical ray
+                            return boundOrVertex;
+                        }else{//before ray
+                            ++intersectCount;  //交点在上方
+                        }
+                    }else{//cross point on the left side
+                        double xinters = (p.x - p1.x) * (p2.y - p1.y) / (p2.x - p1.x) + p1.y;//两点式化简,交点y坐标 cross point of y
+                        if(Math.abs(p.y - xinters) < precision){//== 0  在线上  overlies on a ray
+                            return boundOrVertex;
+                        }
+
+                        if(p.y < xinters){//before ray
+                            ++intersectCount;  //交点在上方
+                        }
+                    }
+                }
+            }else{//special case when ray is crossing through the vertex
+                if(p.x == p2.x && p.y <= p2.y){//p crossing over p2
+                    Point2D.Double p3 = pts.get((i+1) % N); //next vertex
+                    if(p.x >= Math.min(p1.x, p3.x) && p.x <= Math.max(p1.x, p3.x)){//p.x lies between p1.x & p3.x
+                        ++intersectCount;
+                    }else{
+                        intersectCount += 2;
+                    }
+                }
+            }
+            p1 = p2;//next ray left point
+        }
+
+        if(intersectCount % 2 == 0){//偶数在多边形外
+            return false;
+        } else { //奇数在多边形内
+            return true;
+        }
+
+    }
+
 
 }

+ 19 - 20
src/main/java/com/fdkankan/indoor/core/controller/JsonDataController.java

@@ -1,9 +1,9 @@
 package com.fdkankan.indoor.core.controller;
 
-import com.fdkankan.indoor.base.model.ViewResult;
-import com.fdkankan.indoor.core.dto.QueryJsonData;
+import com.fdkankan.indoor.core.dto.QueryJsonDataBase;
+import com.fdkankan.indoor.core.dto.QueryJsonDataOne;
+import com.fdkankan.indoor.core.dto.QueryJsonDataTwo;
 import com.fdkankan.indoor.core.entity.jsonData.JsonData;
-import com.fdkankan.indoor.core.entity.siteModel.SiteModel;
 import com.fdkankan.indoor.core.service.JsonDataService;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
@@ -11,7 +11,6 @@ import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
@@ -21,6 +20,7 @@ import java.util.List;
  */
 @Api(tags = "json数据接口")
 @RestController
+//todo
 @RequestMapping("/api/images")
 @AllArgsConstructor
 public class JsonDataController {
@@ -30,24 +30,23 @@ public class JsonDataController {
     @ApiOperation(value = "json数据")
     @ApiOperationSupport(order = 1)
     @GetMapping("/filter")
-    public ViewResult filter(
-            @RequestParam String sceneNum,
-            @RequestParam Double radius,
-            @RequestParam Double lat,
-            @RequestParam Double lon,
-            Integer limit,
-            Double z,
-            Long siteModelEntity) {
-        QueryJsonData queryJsonData = new QueryJsonData(sceneNum, radius, lat, lon, limit, z, siteModelEntity);
-        List<JsonData> jsonDataList = jsonDataService.filterJsonData(queryJsonData);
-        return ViewResult.success(jsonDataList);
+    public List<JsonData> filter(QueryJsonDataOne queryJsonDataOne, QueryJsonDataTwo queryJsonDataTwo) {
+        //todo
+        QueryJsonDataBase data = switchQueryData(queryJsonDataOne, queryJsonDataTwo);
+        List<JsonData> jsonDataList = jsonDataService.filterJsonData(data);
+        return jsonDataList;
     }
 
-    @ApiOperation(value = "siteModel数据")
-    @ApiOperationSupport(order = 2)
-    @GetMapping("/listSiteModel")
-    public ViewResult listSiteModel(@RequestParam String lat, @RequestParam String lon, @RequestParam String radius, SiteModel siteModel) {
-        return null;
+    private QueryJsonDataBase switchQueryData(QueryJsonDataOne queryJsonDataOne, QueryJsonDataTwo queryJsonDataTwo) {
+        QueryJsonDataBase data = new QueryJsonDataBase();
+        if (queryJsonDataOne.getLat() != null && queryJsonDataOne.getLon() != null) {
+            data = queryJsonDataOne;
+        } else if (queryJsonDataTwo.getLat_min() != null && queryJsonDataTwo.getLat_max() != null
+                && queryJsonDataTwo.getLon_min() != null && queryJsonDataTwo.getLon_max() != null) {
+            data = queryJsonDataTwo;
+        }
+        return data;
     }
 
+
 }

+ 35 - 0
src/main/java/com/fdkankan/indoor/core/controller/SiteModelController.java

@@ -0,0 +1,35 @@
+package com.fdkankan.indoor.core.controller;
+
+import com.fdkankan.indoor.core.entity.siteModel.SiteModel;
+import com.fdkankan.indoor.core.service.SiteModelService;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author Admin
+ */
+@Api(tags = "json数据接口")
+@RestController
+//todo
+@RequestMapping("/api/site_model")
+@AllArgsConstructor
+public class SiteModelController {
+
+    private final SiteModelService siteModelService;
+
+    @ApiOperation(value = "siteModel数据")
+    @ApiOperationSupport(order = 1)
+    @GetMapping("/within")
+    //todo
+    public SiteModel within(Double[] location, String type) {
+        return siteModelService.within(location, type);
+    }
+
+
+
+}

+ 16 - 0
src/main/java/com/fdkankan/indoor/core/dto/QueryJsonDataBase.java

@@ -0,0 +1,16 @@
+package com.fdkankan.indoor.core.dto;
+
+import lombok.Data;
+
+/**
+ * @author Admin
+ */
+@Data
+public class QueryJsonDataBase {
+
+    private String sceneNum;
+    private Integer limit;
+    private Double z;
+    private Long siteModelEntity;
+    private Integer step;
+}

+ 1 - 5
src/main/java/com/fdkankan/indoor/core/dto/QueryJsonData.java

@@ -10,13 +10,9 @@ import lombok.NoArgsConstructor;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-public class QueryJsonData {
+public class QueryJsonDataOne extends QueryJsonDataBase {
 
-    private String sceneNum;
     private Double radius;
     private Double lat;
     private Double lon;
-    private Integer limit;
-    private Double z;
-    private Long siteModelEntityId;
 }

+ 19 - 0
src/main/java/com/fdkankan/indoor/core/dto/QueryJsonDataTwo.java

@@ -0,0 +1,19 @@
+package com.fdkankan.indoor.core.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author Admin
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class QueryJsonDataTwo extends QueryJsonDataBase {
+
+    private Double lat_max;
+    private Double lat_min;
+    private Double lon_max;
+    private Double lon_min;
+}

+ 2 - 2
src/main/java/com/fdkankan/indoor/core/service/JsonDataService.java

@@ -1,6 +1,6 @@
 package com.fdkankan.indoor.core.service;
 
-import com.fdkankan.indoor.core.dto.QueryJsonData;
+import com.fdkankan.indoor.core.dto.QueryJsonDataBase;
 import com.fdkankan.indoor.core.entity.jsonData.JsonData;
 
 import java.util.List;
@@ -10,5 +10,5 @@ import java.util.List;
  */
 public interface JsonDataService {
 
-    List<JsonData> filterJsonData(QueryJsonData queryJsonData);
+    List<JsonData> filterJsonData(QueryJsonDataBase data);
 }

+ 15 - 0
src/main/java/com/fdkankan/indoor/core/service/SiteModelService.java

@@ -0,0 +1,15 @@
+package com.fdkankan.indoor.core.service;
+
+import com.fdkankan.indoor.core.dto.QueryJsonDataBase;
+import com.fdkankan.indoor.core.entity.jsonData.JsonData;
+import com.fdkankan.indoor.core.entity.siteModel.SiteModel;
+
+import java.util.List;
+
+/**
+ * @author Admin
+ */
+public interface SiteModelService {
+
+    SiteModel within(Double[] location, String type);
+}

+ 74 - 7
src/main/java/com/fdkankan/indoor/core/service/impl/JsonDataServiceImpl.java

@@ -2,7 +2,9 @@ package com.fdkankan.indoor.core.service.impl;
 
 import com.fdkankan.indoor.base.util.JsonUtil.JsonUtil;
 import com.fdkankan.indoor.base.util.JsonUtil.Options;
-import com.fdkankan.indoor.core.dto.QueryJsonData;
+import com.fdkankan.indoor.core.dto.QueryJsonDataBase;
+import com.fdkankan.indoor.core.dto.QueryJsonDataOne;
+import com.fdkankan.indoor.core.dto.QueryJsonDataTwo;
 import com.fdkankan.indoor.core.entity.jsonData.JsonData;
 import com.fdkankan.indoor.core.service.JsonDataService;
 import lombok.AllArgsConstructor;
@@ -11,8 +13,11 @@ import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -26,13 +31,60 @@ public class JsonDataServiceImpl implements JsonDataService {
 
     private final MongoTemplate mongoTemplate;
 
+
     @Override
-    public List<JsonData> filterJsonData(QueryJsonData queryJsonData) {
+    public List<JsonData> filterJsonData(QueryJsonDataBase data) {
+        List<JsonData> list;
+        if (data instanceof QueryJsonDataOne) {
+            QueryJsonDataOne one = (QueryJsonDataOne) data;
+            list = queryDataOne(one);
+        } else if (data instanceof QueryJsonDataTwo) {
+            QueryJsonDataTwo two = (QueryJsonDataTwo) data;
+            list = queryDataTwo(two);
+        } else {
+            throw new RuntimeException("没有查询到数据,请检查入参");
+        }
+        return list;
+    }
+
+    private List<JsonData> queryDataTwo(QueryJsonDataTwo queryJsonData) {
+        Query query = new Query();
+        if (queryJsonData.getSiteModelEntity() != null) {
+            query.addCriteria(Criteria.where("site_model_entity_id").is(queryJsonData.getSiteModelEntity()));
+        }
+        List<JsonData> jsonDataList = mongoTemplate.find(query, JsonData.class);
+
+        jsonDataList = jsonDataList.stream().filter(jsonData ->
+                jsonData.getLocation()[0] >= queryJsonData.getLon_min() && jsonData.getLocation()[0] <= queryJsonData.getLon_max()
+                && jsonData.getLocation()[1] >= queryJsonData.getLat_min() && jsonData.getLocation()[1] <= queryJsonData.getLat_max())
+                .collect(Collectors.toList());
+
+        List<JsonData> newJsonData = fillNewJsonData(queryJsonData, jsonDataList);
+
+        return newJsonData;
+    }
+
+    private List<JsonData> fillNewJsonData(QueryJsonDataTwo queryJsonData, List<JsonData> jsonDataList) {
+        List<JsonData> newJsonData = new ArrayList<>();
+        int step = 0;
+        if (queryJsonData.getStep() != null) {
+            for (JsonData jsonData : jsonDataList) {
+                if (step % queryJsonData.getStep() == 0 || step == 0) {
+                    newJsonData.add(jsonData);
+                }
+                step++;
+            }
+        }
+        return newJsonData;
+    }
+
+    private List<JsonData> queryDataOne(QueryJsonDataOne queryJsonData) {
         List<JsonData> newJsonData = new ArrayList<>();
         Query query = new Query();
-        if (queryJsonData.getSiteModelEntityId() != null) {
-            query.addCriteria(Criteria.where("site_model_entity_id").is(queryJsonData.getSiteModelEntityId()));
+        if (queryJsonData.getSiteModelEntity() != null) {
+            query.addCriteria(Criteria.where("site_model_entity_id").is(queryJsonData.getSiteModelEntity()));
         }
+        // todo
 //        if (queryJsonData.getZ() != null) {
 //            query.addCriteria(Criteria.where("location[3]")..lte(queryJsonData.getZ())
 //                    .and("floor_location[3]").gte(queryJsonData.getZ()));
@@ -43,6 +95,21 @@ public class JsonDataServiceImpl implements JsonDataService {
                     jsonData.getLocation()[2] >= queryJsonData.getZ() && jsonData.getFloor_location()[2] <= queryJsonData.getZ())
                     .collect(Collectors.toList());
         }
+
+        if (queryJsonData.getRadius() != null) {
+            newJsonData = calcule(queryJsonData, jsonDataList);
+        } else {
+            newJsonData.addAll(jsonDataList);
+        }
+
+        if (queryJsonData.getLimit() != null) {
+            newJsonData = newJsonData.stream().limit(queryJsonData.getLimit()).collect(Collectors.toList());
+        }
+        return newJsonData;
+    }
+
+    private List<JsonData> calcule(QueryJsonDataOne queryJsonData, List<JsonData> jsonDataList) {
+        List<JsonData> newJsonData = new ArrayList<>();
         for (JsonData jsonData : jsonDataList) {
             Double[] coordinates1 = new Double[2];
             coordinates1[0] = queryJsonData.getLon();
@@ -52,14 +119,14 @@ public class JsonDataServiceImpl implements JsonDataService {
             coordinates2[0] = jsonData.getLocation()[0];
             coordinates2[1] = jsonData.getLocation()[1];
 
+            // todo
             Double distance = JsonUtil.distance(coordinates1, coordinates2, new Options().setUnits("miles"));
             if (queryJsonData.getRadius() > distance) {
                 newJsonData.add(jsonData);
             }
         }
-        if (queryJsonData.getLimit() != null) {
-            newJsonData = newJsonData.stream().limit(queryJsonData.getLimit()).collect(Collectors.toList());
-        }
         return newJsonData;
     }
+
+
 }

+ 100 - 0
src/main/java/com/fdkankan/indoor/core/service/impl/SiteModelServiceImpl.java

@@ -0,0 +1,100 @@
+package com.fdkankan.indoor.core.service.impl;
+
+import com.fdkankan.indoor.base.util.JsonUtil.JsonUtil;
+import com.fdkankan.indoor.core.entity.siteModel.SiteModel;
+import com.fdkankan.indoor.core.service.SiteModelService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author Admin
+ */
+@Service
+@Slf4j
+@AllArgsConstructor
+public class SiteModelServiceImpl implements SiteModelService {
+
+    private final MongoTemplate mongoTemplate;
+
+
+    @Override
+    public SiteModel within(Double[] location, String type) {
+        List<SiteModel> models = new ArrayList<>();
+
+        SiteModel siteModel = mongoTemplate.findOne(new Query(), SiteModel.class);
+
+        models.add(copyModelNotContainChildren(siteModel));
+        if (!CollectionUtils.isEmpty(siteModel.getChildren())) {
+            organizeModels(siteModel, models);
+        }
+        models = models.stream().filter(mod -> filterModels(mod, location, type)).collect(Collectors.toList());
+        
+        Point2D.Double pointParam = new Point2D.Double(location[0], location[1]);
+        SiteModel siteModel1 = models.stream().filter(sm -> getSm(sm, pointParam)).findAny()
+                .orElseThrow(() -> new RuntimeException("没有找到符合多边形的点"));
+        return siteModel1;
+    }
+
+    private boolean filterModels(SiteModel mod, Double[] location, String type) {
+        if (!StringUtils.isEmpty(type)) {
+            if (mod.getPolygon() == null || !type.equals(mod.getPolygon().getType())) {
+                return false;
+            }
+        }
+
+        if (location != null && location.length == 3) {
+            if (mod.getZ_max() == null || mod.getZ_min() == null) {
+                return false;
+            }
+            if (mod.getZ_max() >= location[2] && mod.getZ_min() <= location[2]) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean getSm(SiteModel model, Point2D.Double pointParam) {
+        if (CollectionUtils.isEmpty(model.getPolygon().getCoordinates())
+                || CollectionUtils.isEmpty(model.getPolygon().getCoordinates().get(0))
+                || CollectionUtils.isEmpty(model.getPolygon().getCoordinates().get(0).get(0))) {
+            return false;
+        }
+
+        List<Point2D.Double> allPoints = model.getPolygon().getCoordinates().get(0).stream()
+                .map(points -> new Point2D.Double(points.get(0), points.get(1))).collect(Collectors.toList());
+        if (JsonUtil.IsPtInPoly(pointParam, allPoints)) {
+            return true;
+        }
+        return false;
+    }
+
+
+    private SiteModel copyModelNotContainChildren(SiteModel siteModel) {
+        SiteModel newSiteModel = new SiteModel();
+        BeanUtils.copyProperties(siteModel, newSiteModel);
+        newSiteModel.setChildren(null);
+        return newSiteModel;
+    }
+
+
+    private void organizeModels(SiteModel siteModel, List<SiteModel> models) {
+        for (SiteModel child : siteModel.getChildren()) {
+            models.add(copyModelNotContainChildren(child));
+            if (!CollectionUtils.isEmpty(child.getChildren())) {
+                organizeModels(child, models);
+            }
+        }
+    }
+}

+ 1 - 1
src/main/resources/application-test.properties

@@ -1,4 +1,4 @@
-spring.data.mongodb.uri=mongodb://192.168.0.47:27017/json_data
+spring.data.mongodb.uri=mongodb://221.4.210.172:27017/json_data
 spring.data.mongodb.username=4dage
 spring.data.mongodb.password=1234
 

+ 1 - 1
src/main/resources/application.properties

@@ -2,7 +2,7 @@ server.port=9294
 
 spring.profiles.active=dev
 
-server.servlet.context-path=/sxswsw
+server.servlet.context-path=/indoor
 
 #log
 logging.config=classpath:logback-spring.xml

+ 1 - 1
target/classes/application-test.properties

@@ -1,4 +1,4 @@
-spring.data.mongodb.uri=mongodb://192.168.0.47:27017/json_data
+spring.data.mongodb.uri=mongodb://221.4.210.172:27017/json_data
 spring.data.mongodb.username=4dage
 spring.data.mongodb.password=1234
 

+ 1 - 1
target/classes/application.properties

@@ -2,7 +2,7 @@ server.port=9294
 
 spring.profiles.active=dev
 
-server.servlet.context-path=/sxswsw
+server.servlet.context-path=/indoor
 
 #log
 logging.config=classpath:logback-spring.xml

BIN
target/classes/com/fdkankan/indoor/core/controller/JsonDataController.class


BIN
target/classes/com/fdkankan/indoor/core/dto/QueryJsonData.class


BIN
target/classes/com/fdkankan/indoor/core/service/JsonDataService.class


BIN
target/classes/com/fdkankan/indoor/core/service/impl/JsonDataServiceImpl.class


BIN
target/indoor-0.0.1-SNAPSHOT.war


BIN
target/indoor-0.0.1-SNAPSHOT.war.original


+ 1 - 1
target/maven-archiver/pom.properties

@@ -1,3 +1,3 @@
 version=0.0.1-SNAPSHOT
 groupId=com.fdkankan
-artifactId=sxswsw
+artifactId=indoor

+ 6 - 1
target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

@@ -1,13 +1,18 @@
+F:\proj\indoor\src\main\java\com\fdkankan\indoor\core\dto\QueryJsonDataTwo.java
 F:\proj\indoor\src\main\java\com\fdkankan\indoor\core\entity\siteModel\SiteModel.java
 F:\proj\indoor\src\main\java\com\fdkankan\indoor\core\service\impl\JsonDataServiceImpl.java
-F:\proj\indoor\src\main\java\com\fdkankan\indoor\core\dto\QueryJsonData.java
 F:\proj\indoor\src\main\java\com\fdkankan\indoor\core\entity\siteModel\Polygon.java
 F:\proj\indoor\src\main\java\com\fdkankan\indoor\core\entity\jsonData\JsonData.java
+F:\proj\indoor\src\main\java\com\fdkankan\indoor\core\dto\QueryJsonDataOne.java
+F:\proj\indoor\src\main\java\com\fdkankan\indoor\core\service\impl\SiteModelServiceImpl.java
 F:\proj\indoor\src\main\java\com\fdkankan\indoor\base\model\ViewResult.java
 F:\proj\indoor\src\main\java\com\fdkankan\indoor\core\controller\JsonDataController.java
+F:\proj\indoor\src\main\java\com\fdkankan\indoor\core\controller\SiteModelController.java
 F:\proj\indoor\src\main\java\com\fdkankan\indoor\base\util\JsonUtil\JsonUtil.java
 F:\proj\indoor\src\main\java\com\fdkankan\indoor\core\service\JsonDataService.java
 F:\proj\indoor\src\main\java\com\fdkankan\indoor\IndoorApplication.java
+F:\proj\indoor\src\main\java\com\fdkankan\indoor\core\dto\QueryJsonDataBase.java
 F:\proj\indoor\src\main\java\com\fdkankan\indoor\base\util\JsonUtil\Factors.java
+F:\proj\indoor\src\main\java\com\fdkankan\indoor\core\service\SiteModelService.java
 F:\proj\indoor\src\main\java\com\fdkankan\indoor\base\util\JsonUtil\Options.java
 F:\proj\indoor\src\main\java\com\fdkankan\indoor\core\entity\siteModel\Attributes.java