diff --git a/RuoYi-Vue-Plus/pom.xml b/RuoYi-Vue-Plus/pom.xml index bef08020..3885d66f 100644 --- a/RuoYi-Vue-Plus/pom.xml +++ b/RuoYi-Vue-Plus/pom.xml @@ -58,6 +58,8 @@ 3.11.0 3.1.2 1.3.0 + + 1.20.0 @@ -357,6 +359,13 @@ ${revision} + + + org.locationtech.jts + jts-core + ${jts.version} + + diff --git a/RuoYi-Vue-Plus/ruoyi-common/pom.xml b/RuoYi-Vue-Plus/ruoyi-common/pom.xml index 385d7114..b0bde13e 100644 --- a/RuoYi-Vue-Plus/ruoyi-common/pom.xml +++ b/RuoYi-Vue-Plus/ruoyi-common/pom.xml @@ -34,7 +34,7 @@ ruoyi-common-tenant ruoyi-common-websocket ruoyi-common-sse - ruoyi-common-mapbox + ruoyi-common-jts ruoyi-common diff --git a/RuoYi-Vue-Plus/ruoyi-common/ruoyi-common-bom/pom.xml b/RuoYi-Vue-Plus/ruoyi-common/ruoyi-common-bom/pom.xml index 24acb086..547640fd 100644 --- a/RuoYi-Vue-Plus/ruoyi-common/ruoyi-common-bom/pom.xml +++ b/RuoYi-Vue-Plus/ruoyi-common/ruoyi-common-bom/pom.xml @@ -179,6 +179,13 @@ ${revision} + + + org.dromara + ruoyi-common-jts + ${revision} + + diff --git a/RuoYi-Vue-Plus/ruoyi-common/ruoyi-common-json/src/main/java/org/dromara/common/json/config/JacksonConfig.java b/RuoYi-Vue-Plus/ruoyi-common/ruoyi-common-json/src/main/java/org/dromara/common/json/config/JacksonConfig.java index 8f5a45d1..36400bc9 100644 --- a/RuoYi-Vue-Plus/ruoyi-common/ruoyi-common-json/src/main/java/org/dromara/common/json/config/JacksonConfig.java +++ b/RuoYi-Vue-Plus/ruoyi-common/ruoyi-common-json/src/main/java/org/dromara/common/json/config/JacksonConfig.java @@ -4,8 +4,8 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; -import org.dromara.common.json.handler.BigNumberSerializer; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.json.handler.BigNumberSerializer; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; diff --git a/RuoYi-Vue-Plus/ruoyi-common/ruoyi-common-jts/pom.xml b/RuoYi-Vue-Plus/ruoyi-common/ruoyi-common-jts/pom.xml new file mode 100644 index 00000000..b4565041 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-common/ruoyi-common-jts/pom.xml @@ -0,0 +1,26 @@ + + + + org.dromara + ruoyi-common + ${revision} + + 4.0.0 + + ruoyi-common-jts + + + ruoyi-common-jts 地图工具模块 + + + + + + org.locationtech.jts + jts-core + + + + diff --git a/RuoYi-Vue-Plus/ruoyi-common/ruoyi-common-mapbox/pom.xml b/RuoYi-Vue-Plus/ruoyi-common/ruoyi-common-mapbox/pom.xml deleted file mode 100644 index be0f26fd..00000000 --- a/RuoYi-Vue-Plus/ruoyi-common/ruoyi-common-mapbox/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - org.dromara - ruoyi-common - ${revision} - - 4.0.0 - - ruoyi-common-mapbox - - - ruoyi-common-mapbox 地图工具模块 - - - - - com.mapbox.mapboxsdk - mapbox-sdk-geojson - 7.4.0 - - - - com.mapbox.mapboxsdk - mapbox-sdk-services - 7.4.0 - - - - com.mapbox.mapboxsdk - mapbox-sdk-turf - 7.4.0 - - - - com.mapbox.mapboxsdk - mapbox-sdk-core - 7.4.0 - - - - - - mapbox-repo - https://api.mapbox.com/downloads/v2/releases/maven - - false - - - - - diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/pom.xml b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/pom.xml index 0fc6d551..784a305b 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/pom.xml +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/pom.xml @@ -100,6 +100,11 @@ ruoyi-common-sse + + org.dromara + ruoyi-common-jts + + diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/constant/GeoJsonConstant.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/constant/GeoJsonConstant.java new file mode 100644 index 00000000..a4638756 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/constant/GeoJsonConstant.java @@ -0,0 +1,15 @@ +package org.dromara.constant; + +/** + * @author lcj + * @date 2025/4/24 17:44 + */ +public interface GeoJsonConstant { + + String POINT = "Point"; + + String LINE = "LineString"; + + String POLYGON = "Polygon"; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/controller/FacMatrixController.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/controller/FacMatrixController.java index 3e946e64..b6857a01 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/controller/FacMatrixController.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/controller/FacMatrixController.java @@ -15,6 +15,7 @@ import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; +import org.dromara.facility.domain.req.matrix.MatrixCreateByGeoJsonReq; import org.dromara.facility.domain.req.matrix.MatrixCreateReq; import org.dromara.facility.domain.req.matrix.MatrixQueryReq; import org.dromara.facility.domain.req.matrix.MatrixUpdateReq; @@ -71,6 +72,17 @@ public class FacMatrixController extends BaseController { return R.ok(facMatrixService.queryById(id)); } + /** + * 通过GeoJson新增设施-方阵 + */ + @SaCheckPermission("facility:matrix:add") + @Log(title = "设施-方阵", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/geoJson") + public R insertByGeoJson(@RequestBody MatrixCreateByGeoJsonReq req) { + return toAjax(facMatrixService.insertByGeoJson(req)); + } + /** * 新增设施-方阵 */ diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/controller/FacPhotovoltaicPanelController.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/controller/FacPhotovoltaicPanelController.java index 4b43564f..0b86850c 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/controller/FacPhotovoltaicPanelController.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/controller/FacPhotovoltaicPanelController.java @@ -15,6 +15,7 @@ import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; +import org.dromara.facility.domain.req.photovoltaicpanel.PhotovoltaicPanelCreateByGeoJsonReq; import org.dromara.facility.domain.req.photovoltaicpanel.PhotovoltaicPanelCreateReq; import org.dromara.facility.domain.req.photovoltaicpanel.PhotovoltaicPanelQueryReq; import org.dromara.facility.domain.req.photovoltaicpanel.PhotovoltaicPanelUpdateReq; @@ -82,6 +83,17 @@ public class FacPhotovoltaicPanelController extends BaseController { return R.ok(facPhotovoltaicPanelService.insertByBo(req)); } + /** + * 通过GeoJson新增设施-光伏板 + */ + @SaCheckPermission("facility:photovoltaicPanel:add") + @Log(title = "设施-光伏板", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/geoJson") + public R insertByGeoJson(@RequestBody PhotovoltaicPanelCreateByGeoJsonReq geoJson) { + return toAjax(facPhotovoltaicPanelService.insertByGeoJson(geoJson)); + } + /** * 修改设施-光伏板 */ diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/controller/FacPhotovoltaicPanelPartsController.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/controller/FacPhotovoltaicPanelPartsController.java index ba72aba6..9e4eb5e4 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/controller/FacPhotovoltaicPanelPartsController.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/controller/FacPhotovoltaicPanelPartsController.java @@ -5,10 +5,13 @@ import org.dromara.common.core.domain.R; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.web.core.BaseController; +import org.dromara.facility.domain.req.photovoltaicpanelparts.PhotovoltaicPanelPartsCreateByGeoJsonReq; import org.dromara.facility.domain.req.photovoltaicpanelparts.PhotovoltaicPanelPartsCreateReq; import org.dromara.facility.service.IFacPhotovoltaicPanelPartsService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -21,11 +24,21 @@ import org.springframework.web.bind.annotation.RestController; @Validated @RestController @RequestMapping("/facility/photovoltaicPanelPoint/parts") -public class FacPhotovoltaicPanelPartsController { +public class FacPhotovoltaicPanelPartsController extends BaseController { @Resource private IFacPhotovoltaicPanelPartsService photovoltaicPanelPartsService; + /** + * 通过GeoJson新增设施-光伏板桩点、立柱、支架 + */ + @Log(title = "设施-光伏板(桩点、立柱、支架)", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/geoJson") + public R insertPartsByGeoJson(@RequestBody PhotovoltaicPanelPartsCreateByGeoJsonReq req) { + return toAjax(photovoltaicPanelPartsService.insertPartsByGeoJson(req)); + } + /** * 新增设施-光伏板桩点、立柱、支架 */ diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/Feature.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/Feature.java new file mode 100644 index 00000000..05602534 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/Feature.java @@ -0,0 +1,22 @@ +package org.dromara.facility.domain.req.geojson; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author lcj + * @date 2025/4/24 17:38 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Feature { + + private String type; + + private Geometry geometry; + + private Properties properties; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/FeatureByLine.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/FeatureByLine.java new file mode 100644 index 00000000..beaa7604 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/FeatureByLine.java @@ -0,0 +1,22 @@ +package org.dromara.facility.domain.req.geojson; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author lcj + * @date 2025/4/24 10:40 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class FeatureByLine { + + private String type; + + private GeometryByLine geometry; + + private Properties properties; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/FeatureByPlane.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/FeatureByPlane.java new file mode 100644 index 00000000..9dee3724 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/FeatureByPlane.java @@ -0,0 +1,22 @@ +package org.dromara.facility.domain.req.geojson; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author lcj + * @date 2025/4/24 10:32 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class FeatureByPlane { + + private String type; + + private GeometryByPlane geometry; + + private Properties properties; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/FeatureByPoint.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/FeatureByPoint.java new file mode 100644 index 00000000..59e9e64c --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/FeatureByPoint.java @@ -0,0 +1,22 @@ +package org.dromara.facility.domain.req.geojson; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author lcj + * @date 2025/4/24 10:40 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class FeatureByPoint { + + private String type; + + private GeometryByPoint geometry; + + private Properties properties; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeoJson.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeoJson.java new file mode 100644 index 00000000..e6117815 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeoJson.java @@ -0,0 +1,24 @@ +package org.dromara.facility.domain.req.geojson; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author lcj + * @date 2025/4/24 17:37 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class GeoJson { + + private String name; + + private String type; + + private List features; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeoJsonByLine.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeoJsonByLine.java new file mode 100644 index 00000000..470385eb --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeoJsonByLine.java @@ -0,0 +1,25 @@ +package org.dromara.facility.domain.req.geojson; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * @author lcj + * @date 2025/4/24 10:38 + */ +@Data +public class GeoJsonByLine implements Serializable { + + @Serial + private static final long serialVersionUID = -1019429627483913266L; + + private String name; + + private String type; + + private List features; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeoJsonByPlane.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeoJsonByPlane.java new file mode 100644 index 00000000..508635d8 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeoJsonByPlane.java @@ -0,0 +1,25 @@ +package org.dromara.facility.domain.req.geojson; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * @author lcj + * @date 2025/4/24 10:32 + */ +@Data +public class GeoJsonByPlane implements Serializable { + + @Serial + private static final long serialVersionUID = 7407176569611285023L; + + private String name; + + private String type; + + private List features; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeoJsonByPoint.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeoJsonByPoint.java new file mode 100644 index 00000000..d63a391c --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeoJsonByPoint.java @@ -0,0 +1,25 @@ +package org.dromara.facility.domain.req.geojson; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * @author lcj + * @date 2025/4/24 10:38 + */ +@Data +public class GeoJsonByPoint implements Serializable { + + @Serial + private static final long serialVersionUID = 3829419654737988678L; + + private String name; + + private String type; + + private List features; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/Geometry.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/Geometry.java new file mode 100644 index 00000000..fbd5558c --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/Geometry.java @@ -0,0 +1,24 @@ +package org.dromara.facility.domain.req.geojson; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author lcj + * @date 2025/4/24 17:38 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Geometry { + + private String type; + + private List coordinates; + + private Long id; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeometryByLine.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeometryByLine.java new file mode 100644 index 00000000..840c2fa6 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeometryByLine.java @@ -0,0 +1,24 @@ +package org.dromara.facility.domain.req.geojson; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author lcj + * @date 2025/4/24 10:41 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class GeometryByLine { + + private String type; + + private List> coordinates; + + private Long id; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeometryByPlane.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeometryByPlane.java new file mode 100644 index 00000000..60ce2d28 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeometryByPlane.java @@ -0,0 +1,24 @@ +package org.dromara.facility.domain.req.geojson; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author lcj + * @date 2025/4/24 10:33 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class GeometryByPlane { + + private String type; + + private List>> coordinates; + + private Long id; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeometryByPoint.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeometryByPoint.java new file mode 100644 index 00000000..fe022bb7 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/GeometryByPoint.java @@ -0,0 +1,24 @@ +package org.dromara.facility.domain.req.geojson; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author lcj + * @date 2025/4/24 10:41 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class GeometryByPoint { + + private String type; + + private List coordinates; + + private Long id; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/Properties.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/Properties.java new file mode 100644 index 00000000..88d278fb --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/geojson/Properties.java @@ -0,0 +1,20 @@ +package org.dromara.facility.domain.req.geojson; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author lcj + * @date 2025/4/24 10:53 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Properties { + + private String type; + + private String text; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/matrix/MatrixCreateByGeoJsonReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/matrix/MatrixCreateByGeoJsonReq.java new file mode 100644 index 00000000..64b30ddd --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/matrix/MatrixCreateByGeoJsonReq.java @@ -0,0 +1,35 @@ +package org.dromara.facility.domain.req.matrix; + +import lombok.Data; +import org.dromara.facility.domain.req.geojson.GeoJson; +import org.dromara.facility.domain.req.geojson.GeoJsonByPoint; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lcj + * @date 2025/4/24 11:03 + */ +@Data +public class MatrixCreateByGeoJsonReq implements Serializable { + + @Serial + private static final long serialVersionUID = -3636617370172414549L; + + /** + * 项目id + */ + private Long projectId; + + /** + * 地理位置 + */ + private GeoJson locationGeoJson; + + /** + * 名称 + */ + private GeoJsonByPoint nameGeoJson; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/photovoltaicpanel/PhotovoltaicPanelCreateByGeoJsonReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/photovoltaicpanel/PhotovoltaicPanelCreateByGeoJsonReq.java new file mode 100644 index 00000000..ea04039d --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/photovoltaicpanel/PhotovoltaicPanelCreateByGeoJsonReq.java @@ -0,0 +1,35 @@ +package org.dromara.facility.domain.req.photovoltaicpanel; + +import lombok.Data; +import org.dromara.facility.domain.req.geojson.GeoJsonByPlane; +import org.dromara.facility.domain.req.geojson.GeoJsonByPoint; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lcj + * @date 2025/4/24 9:53 + */ +@Data +public class PhotovoltaicPanelCreateByGeoJsonReq implements Serializable { + + @Serial + private static final long serialVersionUID = -14887945592031533L; + + /** + * 项目id + */ + private Long projectId; + + /** + * 地理位置 + */ + private GeoJsonByPlane locationGeoJson; + + /** + * 名称 + */ + private GeoJsonByPoint nameGeoJson; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/photovoltaicpanelparts/PhotovoltaicPanelPartsCreateByGeoJsonReq.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/photovoltaicpanelparts/PhotovoltaicPanelPartsCreateByGeoJsonReq.java new file mode 100644 index 00000000..777a302f --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/req/photovoltaicpanelparts/PhotovoltaicPanelPartsCreateByGeoJsonReq.java @@ -0,0 +1,29 @@ +package org.dromara.facility.domain.req.photovoltaicpanelparts; + +import lombok.Data; +import org.dromara.facility.domain.req.geojson.GeoJsonByPoint; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lcj + * @date 2025/4/24 11:01 + */ +@Data +public class PhotovoltaicPanelPartsCreateByGeoJsonReq implements Serializable { + + @Serial + private static final long serialVersionUID = 5682597792623228174L; + + /** + * 项目id + */ + private Long projectId; + + /** + * 桩点、立柱、支架 GeoJson + */ + private GeoJsonByPoint pointGeoJson; + +} diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/IFacMatrixService.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/IFacMatrixService.java index 0e48e415..0fa9e887 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/IFacMatrixService.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/IFacMatrixService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.facility.domain.FacMatrix; +import org.dromara.facility.domain.req.matrix.MatrixCreateByGeoJsonReq; import org.dromara.facility.domain.req.matrix.MatrixCreateReq; import org.dromara.facility.domain.req.matrix.MatrixQueryReq; import org.dromara.facility.domain.req.matrix.MatrixUpdateReq; @@ -55,6 +56,14 @@ public interface IFacMatrixService extends IService { */ Long insertByBo(MatrixCreateReq req); + /** + * 新增设施-方阵 + * + * @param geoJson GeoJson格式 + * @return 新增方阵id + */ + Boolean insertByGeoJson(MatrixCreateByGeoJsonReq geoJson); + /** * 修改设施-方阵 * diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/IFacPhotovoltaicPanelPartsService.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/IFacPhotovoltaicPanelPartsService.java index 27c0746a..4b8a1856 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/IFacPhotovoltaicPanelPartsService.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/IFacPhotovoltaicPanelPartsService.java @@ -1,5 +1,6 @@ package org.dromara.facility.service; +import org.dromara.facility.domain.req.photovoltaicpanelparts.PhotovoltaicPanelPartsCreateByGeoJsonReq; import org.dromara.facility.domain.req.photovoltaicpanelparts.PhotovoltaicPanelPartsCreateReq; /** @@ -10,6 +11,14 @@ import org.dromara.facility.domain.req.photovoltaicpanelparts.PhotovoltaicPanelP */ public interface IFacPhotovoltaicPanelPartsService { + /** + * 批量新增设施-光伏板(桩点、立柱、支架) + * + * @param geoJson GeoJson格式 + * @return 是否新增成功 + */ + Boolean insertPartsByGeoJson(PhotovoltaicPanelPartsCreateByGeoJsonReq geoJson); + /** * 批量新增设施-光伏板(桩点、立柱、支架) * diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/IFacPhotovoltaicPanelService.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/IFacPhotovoltaicPanelService.java index 5459f52a..4aca8564 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/IFacPhotovoltaicPanelService.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/IFacPhotovoltaicPanelService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.facility.domain.FacPhotovoltaicPanel; +import org.dromara.facility.domain.req.photovoltaicpanel.PhotovoltaicPanelCreateByGeoJsonReq; import org.dromara.facility.domain.req.photovoltaicpanel.PhotovoltaicPanelCreateReq; import org.dromara.facility.domain.req.photovoltaicpanel.PhotovoltaicPanelQueryReq; import org.dromara.facility.domain.req.photovoltaicpanel.PhotovoltaicPanelUpdateReq; @@ -55,6 +56,14 @@ public interface IFacPhotovoltaicPanelService extends IService matrixList = new ArrayList<>(); + List locationFeatures = geoJson.getLocationGeoJson().getFeatures(); + List nameFeatures = geoJson.getNameGeoJson().getFeatures(); + for (Feature feature : locationFeatures) { + FacMatrix matrix = new FacMatrix(); + matrix.setProjectId(projectId); + Geometry geometry = feature.getGeometry(); + List coordinates = geometry.getCoordinates(); + if (geometry.getType().equals(GeoJsonConstant.POINT)) { + throw new ServiceException("点位无法创建方阵", HttpStatus.BAD_REQUEST); + } + // 获取方阵名称 + String name = null; + List> coordinatesList = new ArrayList<>(); + if (geometry.getType().equals(GeoJsonConstant.LINE)) { + for (Object obj : coordinates) { + if (obj instanceof List innerList) { + List point = new ArrayList<>(); + for (Object num : innerList) { + if (num instanceof Number) { + point.add(((Number) num).doubleValue()); + } + } + coordinatesList.add(point); + } + } + } else if (geometry.getType().equals(GeoJsonConstant.POLYGON)) { + coordinatesList = coordinates.stream() + .filter(obj -> obj instanceof List) + .flatMap(obj -> ((List) obj).stream()) + .filter(pointObj -> pointObj instanceof List) + .map(pointObj -> ((List) pointObj).stream() + .filter(num -> num instanceof Number) + .map(num -> ((Number) num).doubleValue()) + .collect(Collectors.toList())) + .collect(Collectors.toList()); + } + for (FeatureByPoint nameFeature : nameFeatures) { + List nameCoordinates = nameFeature.getGeometry().getCoordinates(); + Boolean result = GeoJsonUtils.pointIsWithInPlane(coordinatesList, nameCoordinates); + if (result) { + name = nameFeature.getProperties().getText(); + break; + } + } + if (name == null) { + continue; + } + String positionStr = JSONUtil.toJsonStr(coordinates); + matrix.setPositions(positionStr); + matrix.setMatrixName(name); + matrixList.add(matrix); + } + if (CollUtil.isNotEmpty(matrixList)) { + boolean result = this.saveBatch(matrixList); + if (!result) { + throw new ServiceException("批量新增方阵失败,数据库异常", HttpStatus.ERROR); + } + } + return true; + } + /** * 修改设施-方阵 * diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelPartsServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelPartsServiceImpl.java index 139e2fd5..b4aaa0b0 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelPartsServiceImpl.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelPartsServiceImpl.java @@ -6,16 +6,21 @@ import jakarta.annotation.Resource; import org.dromara.common.core.constant.HttpStatus; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.StringUtils; +import org.dromara.facility.domain.FacPhotovoltaicPanel; import org.dromara.facility.domain.FacPhotovoltaicPanelColumn; import org.dromara.facility.domain.FacPhotovoltaicPanelPoint; import org.dromara.facility.domain.FacPhotovoltaicPanelSupport; +import org.dromara.facility.domain.req.geojson.FeatureByPoint; +import org.dromara.facility.domain.req.photovoltaicpanelparts.PhotovoltaicPanelPartsCreateByGeoJsonReq; import org.dromara.facility.domain.req.photovoltaicpanelparts.PhotovoltaicPanelPartsCreateReq; import org.dromara.facility.service.*; import org.dromara.project.service.IBusProjectService; +import org.dromara.utils.GeoJsonUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; /** @@ -31,6 +36,9 @@ public class FacPhotovoltaicPanelPartsServiceImpl implements IFacPhotovoltaicPan @Resource private IFacMatrixService matrixService; + @Resource + private IFacPhotovoltaicPanelService photovoltaicPanelService; + @Resource private IFacPhotovoltaicPanelPointService photovoltaicPanelPointService; @@ -40,6 +48,89 @@ public class FacPhotovoltaicPanelPartsServiceImpl implements IFacPhotovoltaicPan @Resource private IFacPhotovoltaicPanelSupportService photovoltaicPanelSupportService; + /** + * 批量新增设施-光伏板(桩点、立柱、支架) + * + * @param geoJson GeoJson格式 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertPartsByGeoJson(PhotovoltaicPanelPartsCreateByGeoJsonReq geoJson) { + Long projectId = geoJson.getProjectId(); + if (projectService.getById(projectId) == null) { + throw new ServiceException("项目不存在", HttpStatus.NOT_FOUND); + } + List photovoltaicPanelList = photovoltaicPanelService.lambdaQuery() + .eq(FacPhotovoltaicPanel::getProjectId, projectId).list(); + if (CollUtil.isEmpty(photovoltaicPanelList)) { + throw new ServiceException("项目下未创建光伏板", HttpStatus.NOT_FOUND); + } + List features = geoJson.getPointGeoJson().getFeatures(); + List> pointList = new ArrayList<> + (features.stream().map(featureByPoint -> featureByPoint.getGeometry().getCoordinates()).toList()); + List photovoltaicPanelPointList = new ArrayList<>(); + List photovoltaicPanelColumnList = new ArrayList<>(); + List photovoltaicPanelSupportList = new ArrayList<>(); + for (FacPhotovoltaicPanel photovoltaicPanel : photovoltaicPanelList) { + String positions = photovoltaicPanel.getPositions(); + List> positionList = new ArrayList<>(); + List arr = JSONUtil.toList(positions, String.class); + for (String s : arr) { + positionList.add(JSONUtil.toList(s, Double.class)); + } + List> pointInPlaneList = GeoJsonUtils.getPointInPlaneList(positionList, pointList); + pointList.removeAll(pointInPlaneList); + if (CollUtil.isNotEmpty(pointInPlaneList)) { + int i = 1; + for (List list : pointInPlaneList) { + String str = String.format("%02d", i); + String name = photovoltaicPanel.getName() + "." + str; + Long matrixId = photovoltaicPanel.getMatrixId(); + String jsonStr = JSONUtil.toJsonStr(list); + FacPhotovoltaicPanelPoint photovoltaicPanelPoint = new FacPhotovoltaicPanelPoint(); + photovoltaicPanelPoint.setProjectId(projectId); + photovoltaicPanelPoint.setMatrixId(matrixId); + photovoltaicPanelPoint.setName(name); + photovoltaicPanelPoint.setPositions(jsonStr); + photovoltaicPanelPointList.add(photovoltaicPanelPoint); + FacPhotovoltaicPanelColumn photovoltaicPanelColumn = new FacPhotovoltaicPanelColumn(); + photovoltaicPanelColumn.setProjectId(projectId); + photovoltaicPanelColumn.setMatrixId(matrixId); + photovoltaicPanelColumn.setName(name); + photovoltaicPanelColumn.setPositions(jsonStr); + photovoltaicPanelColumnList.add(photovoltaicPanelColumn); + FacPhotovoltaicPanelSupport photovoltaicPanelSupport = new FacPhotovoltaicPanelSupport(); + photovoltaicPanelSupport.setProjectId(projectId); + photovoltaicPanelSupport.setMatrixId(matrixId); + photovoltaicPanelSupport.setName(name); + photovoltaicPanelSupport.setPositions(jsonStr); + photovoltaicPanelSupportList.add(photovoltaicPanelSupport); + i++; + } + } + } + if (CollUtil.isNotEmpty(photovoltaicPanelPointList)) { + boolean result = photovoltaicPanelPointService.saveBatch(photovoltaicPanelPointList); + if (!result) { + throw new ServiceException("批量新增光伏板桩点失败,数据库异常", HttpStatus.ERROR); + } + } + if (CollUtil.isNotEmpty(photovoltaicPanelColumnList)) { + boolean result = photovoltaicPanelColumnService.saveBatch(photovoltaicPanelColumnList); + if (!result) { + throw new ServiceException("批量新增光伏板立柱失败,数据库异常", HttpStatus.ERROR); + } + } + if (CollUtil.isNotEmpty(photovoltaicPanelSupportList)) { + boolean result = photovoltaicPanelSupportService.saveBatch(photovoltaicPanelSupportList); + if (!result) { + throw new ServiceException("批量新增光伏板支架失败,数据库异常", HttpStatus.ERROR); + } + } + return true; + } + /** * 批量新增设施-光伏板(桩点、立柱、支架) * diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelServiceImpl.java index 9d11017f..96c01c84 100644 --- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelServiceImpl.java +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelServiceImpl.java @@ -12,7 +12,12 @@ import org.dromara.common.core.utils.ObjectUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.facility.domain.FacMatrix; import org.dromara.facility.domain.FacPhotovoltaicPanel; +import org.dromara.facility.domain.req.geojson.FeatureByPlane; +import org.dromara.facility.domain.req.geojson.FeatureByPoint; +import org.dromara.facility.domain.req.geojson.GeometryByPlane; +import org.dromara.facility.domain.req.photovoltaicpanel.PhotovoltaicPanelCreateByGeoJsonReq; import org.dromara.facility.domain.req.photovoltaicpanel.PhotovoltaicPanelCreateReq; import org.dromara.facility.domain.req.photovoltaicpanel.PhotovoltaicPanelQueryReq; import org.dromara.facility.domain.req.photovoltaicpanel.PhotovoltaicPanelUpdateReq; @@ -21,6 +26,7 @@ import org.dromara.facility.mapper.FacPhotovoltaicPanelMapper; import org.dromara.facility.service.IFacMatrixService; import org.dromara.facility.service.IFacPhotovoltaicPanelService; import org.dromara.project.service.IBusProjectService; +import org.dromara.utils.GeoJsonUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -120,6 +126,76 @@ public class FacPhotovoltaicPanelServiceImpl extends ServiceImpl matrixList = matrixService.lambdaQuery() + .eq(FacMatrix::getProjectId, projectId).list(); + if (CollUtil.isEmpty(matrixList)) { + throw new ServiceException("项目下无方阵数据,请先创建方阵消息后再添加光伏板信息", HttpStatus.NOT_FOUND); + } + List photovoltaicPanelList = new ArrayList<>(); + List locationFeatures = geoJson.getLocationGeoJson().getFeatures(); + List nameFeatures = geoJson.getNameGeoJson().getFeatures(); + for (FeatureByPlane locationFeature : locationFeatures) { + FacPhotovoltaicPanel photovoltaicPanel = new FacPhotovoltaicPanel(); + GeometryByPlane geometry = locationFeature.getGeometry(); + List> coordinates = geometry.getCoordinates().get(0); + // 判断光伏板在哪个方阵里 + Long matrixId = null; + for (FacMatrix matrix : matrixList) { + String positions = matrix.getPositions(); + List> positionList = new ArrayList<>(); + List arr = JSONUtil.toList(positions, String.class); + for (String s : arr) { + positionList.add(JSONUtil.toList(s, Double.class)); + } + Boolean result = GeoJsonUtils.planeIsWithInPlane(positionList, coordinates); + if (result) { + matrixId = matrix.getId(); + break; + } + } + if (matrixId == null) { + continue; + } + photovoltaicPanel.setMatrixId(matrixId); + // 获取光伏板名称 + String name = null; + for (FeatureByPoint nameFeature : nameFeatures) { + List nameCoordinates = nameFeature.getGeometry().getCoordinates(); + Boolean result = GeoJsonUtils.pointIsWithInPlane(coordinates, nameCoordinates); + if (result) { + name = nameFeature.getProperties().getText(); + break; + } + } + if (name == null) { + continue; + } + photovoltaicPanel.setName(name); + photovoltaicPanel.setProjectId(projectId); + photovoltaicPanel.setPositions(JSONUtil.toJsonStr(coordinates)); + photovoltaicPanelList.add(photovoltaicPanel); + } + // 操作数据库,批量保存 + boolean save = this.saveBatch(photovoltaicPanelList); + if (!save) { + throw new ServiceException("新增光伏板失败,数据库异常", HttpStatus.ERROR); + } + return true; + } + /** * 修改设施-光伏板 * diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/utils/GeoJsonUtils.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/utils/GeoJsonUtils.java new file mode 100644 index 00000000..d24dc4d9 --- /dev/null +++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/utils/GeoJsonUtils.java @@ -0,0 +1,83 @@ +package org.dromara.utils; + +import org.locationtech.jts.geom.*; + +import java.util.List; + +/** + * @author lcj + * @date 2025/4/24 11:48 + */ +public class GeoJsonUtils { + + /** + * 点是否在平面内 + * + * @param planeLists 平面坐标 + * @param pointList 点坐标 + * @return 点是否在平面内 + */ + public static Boolean pointIsWithInPlane(List> planeLists, List pointList) { + GeometryFactory geometryFactory = new GeometryFactory(); + // 构建平面 + Coordinate[] coordinates = getPlaneCoordinate(planeLists); + Polygon polygon = geometryFactory.createPolygon(coordinates); + // 构建待判断点 + Point point = geometryFactory.createPoint(new Coordinate(pointList.get(0), pointList.get(1))); + // 判断是否在多边形内 + return polygon.contains(point); + } + + /** + * 获取平面内点列表集合 + * + * @param planeLists 平面坐标列表 + * @param pointLists 点坐标列表集合 + * @return 平面内点坐标列表集合 + */ + public static List> getPointInPlaneList(List> planeLists, List> pointLists) { + GeometryFactory geometryFactory = new GeometryFactory(); + // 构建平面 + Coordinate[] coordinates = getPlaneCoordinate(planeLists); + LinearRing shell = geometryFactory.createLinearRing(coordinates); + Polygon polygon = geometryFactory.createPolygon(shell); + // 获取平面内点结合 + return pointLists.stream().filter(pointList -> { + // 构建待判断点 + Point point = geometryFactory.createPoint(new Coordinate(pointList.get(0), pointList.get(1))); + // 判断是否在多边形内 + return polygon.contains(point); + }).toList(); + } + + /** + * 平面是否在平面内 + * + * @param referencePlane 参考平面 + * @param comparePlane 比较平面 + * @return 平面是否在平面内 + */ + public static Boolean planeIsWithInPlane(List> referencePlane, List> comparePlane) { + GeometryFactory geometryFactory = new GeometryFactory(); + // 构建参考平面 + Coordinate[] referenceCoordinates = getPlaneCoordinate(referencePlane); + Polygon referencePolygon = geometryFactory.createPolygon(referenceCoordinates); + // 构建比较平面 + Coordinate[] compareCoordinates = getPlaneCoordinate(comparePlane); + Polygon comparePolygon = geometryFactory.createPolygon(compareCoordinates); + // 判断是否在多边形内 + return referencePolygon.contains(comparePolygon); + } + + /** + * 获取平面坐标数组 + * + * @param planeLists 平面坐标列表 + * @return 平面坐标数组 + */ + public static Coordinate[] getPlaneCoordinate(List> planeLists) { + return planeLists.stream().map(planeList -> + new Coordinate(planeList.get(0), planeList.get(1))) + .toList().toArray(new Coordinate[0]); + } +}