将GeoJson转换,并存储
This commit is contained in:
@ -58,6 +58,8 @@
|
||||
<maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
|
||||
<maven-surefire-plugin.version>3.1.2</maven-surefire-plugin.version>
|
||||
<flatten-maven-plugin.version>1.3.0</flatten-maven-plugin.version>
|
||||
<!-- JTS库版本 -->
|
||||
<jts.version>1.20.0</jts.version>
|
||||
</properties>
|
||||
|
||||
<profiles>
|
||||
@ -357,6 +359,13 @@
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/org.locationtech.jts/jts-core -->
|
||||
<dependency>
|
||||
<groupId>org.locationtech.jts</groupId>
|
||||
<artifactId>jts-core</artifactId>
|
||||
<version>${jts.version}</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
|
@ -34,7 +34,7 @@
|
||||
<module>ruoyi-common-tenant</module>
|
||||
<module>ruoyi-common-websocket</module>
|
||||
<module>ruoyi-common-sse</module>
|
||||
<module>ruoyi-common-mapbox</module>
|
||||
<module>ruoyi-common-jts</module>
|
||||
</modules>
|
||||
|
||||
<artifactId>ruoyi-common</artifactId>
|
||||
|
@ -179,6 +179,13 @@
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 地图模块 -->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-jts</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
|
@ -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;
|
||||
|
26
RuoYi-Vue-Plus/ruoyi-common/ruoyi-common-jts/pom.xml
Normal file
26
RuoYi-Vue-Plus/ruoyi-common/ruoyi-common-jts/pom.xml
Normal file
@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common</artifactId>
|
||||
<version>${revision}</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>ruoyi-common-jts</artifactId>
|
||||
|
||||
<description>
|
||||
ruoyi-common-jts 地图工具模块
|
||||
</description>
|
||||
|
||||
<dependencies>
|
||||
<!-- https://mvnrepository.com/artifact/org.locationtech.jts/jts-core -->
|
||||
<dependency>
|
||||
<groupId>org.locationtech.jts</groupId>
|
||||
<artifactId>jts-core</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -1,54 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common</artifactId>
|
||||
<version>${revision}</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>ruoyi-common-mapbox</artifactId>
|
||||
|
||||
<description>
|
||||
ruoyi-common-mapbox 地图工具模块
|
||||
</description>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.mapbox.mapboxsdk</groupId>
|
||||
<artifactId>mapbox-sdk-geojson</artifactId>
|
||||
<version>7.4.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.mapbox.mapboxsdk</groupId>
|
||||
<artifactId>mapbox-sdk-services</artifactId>
|
||||
<version>7.4.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.mapbox.mapboxsdk</groupId>
|
||||
<artifactId>mapbox-sdk-turf</artifactId>
|
||||
<version>7.4.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.mapbox.mapboxsdk</groupId>
|
||||
<artifactId>mapbox-sdk-core</artifactId>
|
||||
<version>7.4.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>mapbox-repo</id>
|
||||
<url>https://api.mapbox.com/downloads/v2/releases/maven</url>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
</project>
|
@ -100,6 +100,11 @@
|
||||
<artifactId>ruoyi-common-sse</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-jts</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
@ -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";
|
||||
|
||||
}
|
@ -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<Void> insertByGeoJson(@RequestBody MatrixCreateByGeoJsonReq req) {
|
||||
return toAjax(facMatrixService.insertByGeoJson(req));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增设施-方阵
|
||||
*/
|
||||
|
@ -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<Void> insertByGeoJson(@RequestBody PhotovoltaicPanelCreateByGeoJsonReq geoJson) {
|
||||
return toAjax(facPhotovoltaicPanelService.insertByGeoJson(geoJson));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改设施-光伏板
|
||||
*/
|
||||
|
@ -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<Void> insertPartsByGeoJson(@RequestBody PhotovoltaicPanelPartsCreateByGeoJsonReq req) {
|
||||
return toAjax(photovoltaicPanelPartsService.insertPartsByGeoJson(req));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增设施-光伏板桩点、立柱、支架
|
||||
*/
|
||||
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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<Feature> features;
|
||||
|
||||
}
|
@ -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<FeatureByLine> features;
|
||||
|
||||
}
|
@ -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<FeatureByPlane> features;
|
||||
|
||||
}
|
@ -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<FeatureByPoint> features;
|
||||
|
||||
}
|
@ -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<Object> coordinates;
|
||||
|
||||
private Long id;
|
||||
|
||||
}
|
@ -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<List<Double>> coordinates;
|
||||
|
||||
private Long id;
|
||||
|
||||
}
|
@ -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<List<List<Double>>> coordinates;
|
||||
|
||||
private Long id;
|
||||
|
||||
}
|
@ -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<Double> coordinates;
|
||||
|
||||
private Long id;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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<FacMatrix> {
|
||||
*/
|
||||
Long insertByBo(MatrixCreateReq req);
|
||||
|
||||
/**
|
||||
* 新增设施-方阵
|
||||
*
|
||||
* @param geoJson GeoJson格式
|
||||
* @return 新增方阵id
|
||||
*/
|
||||
Boolean insertByGeoJson(MatrixCreateByGeoJsonReq geoJson);
|
||||
|
||||
/**
|
||||
* 修改设施-方阵
|
||||
*
|
||||
|
@ -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);
|
||||
|
||||
/**
|
||||
* 批量新增设施-光伏板(桩点、立柱、支架)
|
||||
*
|
||||
|
@ -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<FacPhotovoltaicPa
|
||||
*/
|
||||
Long insertByBo(PhotovoltaicPanelCreateReq req);
|
||||
|
||||
/**
|
||||
* 新增光伏板
|
||||
*
|
||||
* @param geoJson GeoJson格式
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
Boolean insertByGeoJson(PhotovoltaicPanelCreateByGeoJsonReq geoJson);
|
||||
|
||||
/**
|
||||
* 修改设施-光伏板
|
||||
*
|
||||
|
@ -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.constant.GeoJsonConstant;
|
||||
import org.dromara.facility.domain.FacMatrix;
|
||||
import org.dromara.facility.domain.req.geojson.Feature;
|
||||
import org.dromara.facility.domain.req.geojson.FeatureByPoint;
|
||||
import org.dromara.facility.domain.req.geojson.Geometry;
|
||||
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;
|
||||
@ -20,6 +25,7 @@ import org.dromara.facility.domain.vo.FacMatrixVo;
|
||||
import org.dromara.facility.mapper.FacMatrixMapper;
|
||||
import org.dromara.facility.service.IFacMatrixService;
|
||||
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;
|
||||
@ -27,6 +33,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 设施-方阵Service业务层处理
|
||||
@ -115,6 +122,81 @@ public class FacMatrixServiceImpl extends ServiceImpl<FacMatrixMapper, FacMatrix
|
||||
return matrix.getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增设施-方阵
|
||||
*
|
||||
* @param geoJson GeoJson格式
|
||||
* @return 新增方阵id
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean insertByGeoJson(MatrixCreateByGeoJsonReq geoJson) {
|
||||
Long projectId = geoJson.getProjectId();
|
||||
if (projectService.getById(projectId) == null) {
|
||||
throw new ServiceException("项目不存在", HttpStatus.NOT_FOUND);
|
||||
}
|
||||
List<FacMatrix> matrixList = new ArrayList<>();
|
||||
List<Feature> locationFeatures = geoJson.getLocationGeoJson().getFeatures();
|
||||
List<FeatureByPoint> nameFeatures = geoJson.getNameGeoJson().getFeatures();
|
||||
for (Feature feature : locationFeatures) {
|
||||
FacMatrix matrix = new FacMatrix();
|
||||
matrix.setProjectId(projectId);
|
||||
Geometry geometry = feature.getGeometry();
|
||||
List<Object> coordinates = geometry.getCoordinates();
|
||||
if (geometry.getType().equals(GeoJsonConstant.POINT)) {
|
||||
throw new ServiceException("点位无法创建方阵", HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
// 获取方阵名称
|
||||
String name = null;
|
||||
List<List<Double>> coordinatesList = new ArrayList<>();
|
||||
if (geometry.getType().equals(GeoJsonConstant.LINE)) {
|
||||
for (Object obj : coordinates) {
|
||||
if (obj instanceof List<?> innerList) {
|
||||
List<Double> 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<Double> 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改设施-方阵
|
||||
*
|
||||
|
@ -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<FacPhotovoltaicPanel> photovoltaicPanelList = photovoltaicPanelService.lambdaQuery()
|
||||
.eq(FacPhotovoltaicPanel::getProjectId, projectId).list();
|
||||
if (CollUtil.isEmpty(photovoltaicPanelList)) {
|
||||
throw new ServiceException("项目下未创建光伏板", HttpStatus.NOT_FOUND);
|
||||
}
|
||||
List<FeatureByPoint> features = geoJson.getPointGeoJson().getFeatures();
|
||||
List<List<Double>> pointList = new ArrayList<>
|
||||
(features.stream().map(featureByPoint -> featureByPoint.getGeometry().getCoordinates()).toList());
|
||||
List<FacPhotovoltaicPanelPoint> photovoltaicPanelPointList = new ArrayList<>();
|
||||
List<FacPhotovoltaicPanelColumn> photovoltaicPanelColumnList = new ArrayList<>();
|
||||
List<FacPhotovoltaicPanelSupport> photovoltaicPanelSupportList = new ArrayList<>();
|
||||
for (FacPhotovoltaicPanel photovoltaicPanel : photovoltaicPanelList) {
|
||||
String positions = photovoltaicPanel.getPositions();
|
||||
List<List<Double>> positionList = new ArrayList<>();
|
||||
List<String> arr = JSONUtil.toList(positions, String.class);
|
||||
for (String s : arr) {
|
||||
positionList.add(JSONUtil.toList(s, Double.class));
|
||||
}
|
||||
List<List<Double>> pointInPlaneList = GeoJsonUtils.getPointInPlaneList(positionList, pointList);
|
||||
pointList.removeAll(pointInPlaneList);
|
||||
if (CollUtil.isNotEmpty(pointInPlaneList)) {
|
||||
int i = 1;
|
||||
for (List<Double> 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量新增设施-光伏板(桩点、立柱、支架)
|
||||
*
|
||||
|
@ -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<FacPhotovoltaic
|
||||
return photovoltaicPanel.getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增光伏板
|
||||
*
|
||||
* @param geoJson GeoJson格式
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean insertByGeoJson(PhotovoltaicPanelCreateByGeoJsonReq geoJson) {
|
||||
Long projectId = geoJson.getProjectId();
|
||||
if (projectService.getById(projectId) == null) {
|
||||
throw new ServiceException("项目不存在", HttpStatus.NOT_FOUND);
|
||||
}
|
||||
List<FacMatrix> matrixList = matrixService.lambdaQuery()
|
||||
.eq(FacMatrix::getProjectId, projectId).list();
|
||||
if (CollUtil.isEmpty(matrixList)) {
|
||||
throw new ServiceException("项目下无方阵数据,请先创建方阵消息后再添加光伏板信息", HttpStatus.NOT_FOUND);
|
||||
}
|
||||
List<FacPhotovoltaicPanel> photovoltaicPanelList = new ArrayList<>();
|
||||
List<FeatureByPlane> locationFeatures = geoJson.getLocationGeoJson().getFeatures();
|
||||
List<FeatureByPoint> nameFeatures = geoJson.getNameGeoJson().getFeatures();
|
||||
for (FeatureByPlane locationFeature : locationFeatures) {
|
||||
FacPhotovoltaicPanel photovoltaicPanel = new FacPhotovoltaicPanel();
|
||||
GeometryByPlane geometry = locationFeature.getGeometry();
|
||||
List<List<Double>> coordinates = geometry.getCoordinates().get(0);
|
||||
// 判断光伏板在哪个方阵里
|
||||
Long matrixId = null;
|
||||
for (FacMatrix matrix : matrixList) {
|
||||
String positions = matrix.getPositions();
|
||||
List<List<Double>> positionList = new ArrayList<>();
|
||||
List<String> 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<Double> 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改设施-光伏板
|
||||
*
|
||||
|
@ -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<List<Double>> planeLists, List<Double> 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<List<Double>> getPointInPlaneList(List<List<Double>> planeLists, List<List<Double>> 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<List<Double>> referencePlane, List<List<Double>> 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<List<Double>> planeLists) {
|
||||
return planeLists.stream().map(planeList ->
|
||||
new Coordinate(planeList.get(0), planeList.get(1)))
|
||||
.toList().toArray(new Coordinate[0]);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user