anal_data_geom 의 polygon 중심좌표 테스트

This commit is contained in:
2025-11-25 18:40:39 +09:00
parent a4909efd5b
commit d2dd1f3152
10 changed files with 154 additions and 10 deletions

View File

@@ -39,6 +39,7 @@ dependencies {
implementation 'com.fasterxml.jackson.core:jackson-databind'
implementation 'org.locationtech.jts.io:jts-io-common:1.20.0'
implementation 'org.locationtech.jts:jts-core:1.19.0'
implementation 'org.hibernate:hibernate-spatial:6.2.7.Final'
// QueryDSL JPA
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'

View File

@@ -0,0 +1,28 @@
package com.kamco.cd.kamcoback.changedetection;
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto;
import com.kamco.cd.kamcoback.changedetection.service.ChangeDetectionService;
import com.kamco.cd.kamcoback.config.api.ApiResponseDto;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@Tag(name = "변화탐지", description = "변화탐지 API")
@RequiredArgsConstructor
@RestController
@RequestMapping("/api/change-detection")
@Transactional
public class ChangeDetectionApiController {
private final ChangeDetectionService changeDetectionService;
@GetMapping
public ApiResponseDto<List<ChangeDetectionDto>> getPolygonToPoint() {
return ApiResponseDto.ok(changeDetectionService.getPolygonToPoint());
}
}

View File

@@ -0,0 +1,10 @@
package com.kamco.cd.kamcoback.changedetection.dto;
import org.locationtech.jts.geom.Geometry;
public record ChangeDetectionDto(
Long id,
Geometry polygon,
double centroidX,
double centroidY
) {}

View File

@@ -0,0 +1,20 @@
package com.kamco.cd.kamcoback.changedetection.service;
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto;
import com.kamco.cd.kamcoback.config.api.ApiResponseDto;
import com.kamco.cd.kamcoback.postgres.core.ChangeDetectionCoreService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@RequiredArgsConstructor
public class ChangeDetectionService {
private final ChangeDetectionCoreService changeDetectionCoreService;
public List<ChangeDetectionDto> getPolygonToPoint() {
return changeDetectionCoreService.getPolygonToPoint();
}
}

View File

@@ -293,7 +293,9 @@ public class GlobalExceptionHandler {
Arrays.stream(stackTrace)
// .limit(20)
.map(StackTraceElement::toString)
.collect(Collectors.joining("\n"));
.collect(Collectors.joining("\n"))
.substring(0, Math.min(stackTrace.length, 255));
;
ErrorLogEntity errorLogEntity =
new ErrorLogEntity(

View File

@@ -0,0 +1,38 @@
package com.kamco.cd.kamcoback.postgres.core;
import com.kamco.cd.kamcoback.changedetection.dto.ChangeDetectionDto;
import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataGeomEntity;
import com.kamco.cd.kamcoback.postgres.repository.changedetection.ChangeDetectionRepository;
import lombok.RequiredArgsConstructor;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.Point;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class ChangeDetectionCoreService {
private final ChangeDetectionRepository changeDetectionRepository;
public List<ChangeDetectionDto> getPolygonToPoint() {
List<MapSheetAnalDataGeomEntity> list = changeDetectionRepository.findAll();
return list.stream().map(p -> {
Geometry polygon = p.getGeom();
// 중심 좌표 계산
Point centroid = polygon.getCentroid();
return new ChangeDetectionDto(
p.getId(),
polygon,
centroid.getX(),
centroid.getY()
);
})
.collect(Collectors.toList());
}
}

View File

@@ -1,17 +1,12 @@
package com.kamco.cd.kamcoback.postgres.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.SequenceGenerator;
import jakarta.persistence.Table;
import jakarta.persistence.*;
import jakarta.validation.constraints.Size;
import java.time.Instant;
import java.time.ZonedDateTime;
import lombok.Getter;
import lombok.Setter;
import org.locationtech.jts.geom.Geometry;
import java.time.ZonedDateTime;
@Getter
@Setter
@@ -71,4 +66,6 @@ public class MapSheetAnalDataGeomEntity {
@Column(name = "updated_uid")
private Long updatedUid;
@Column(name = "geom", columnDefinition = "geometry")
private Geometry geom;
}

View File

@@ -0,0 +1,6 @@
package com.kamco.cd.kamcoback.postgres.repository.changedetection;
import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataGeomEntity;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ChangeDetectionRepository extends JpaRepository<MapSheetAnalDataGeomEntity, Long>, ChangeDetectionRepositoryCustom {}

View File

@@ -0,0 +1,9 @@
package com.kamco.cd.kamcoback.postgres.repository.changedetection;
import com.kamco.cd.kamcoback.config.api.ApiResponseDto;
public interface ChangeDetectionRepositoryCustom {
String getPolygonToPoint();
}

View File

@@ -0,0 +1,33 @@
package com.kamco.cd.kamcoback.postgres.repository.changedetection;
import com.kamco.cd.kamcoback.postgres.entity.MapSheetAnalDataGeomEntity;
import com.querydsl.jpa.impl.JPAQueryFactory;
import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport;
import java.util.List;
import static com.kamco.cd.kamcoback.postgres.entity.QMapSheetAnalDataGeomEntity.mapSheetAnalDataGeomEntity;
public class ChangeDetectionRepositoryImpl extends QuerydslRepositorySupport
implements ChangeDetectionRepositoryCustom {
private final JPAQueryFactory queryFactory;
public ChangeDetectionRepositoryImpl(JPAQueryFactory queryFactory) {
super(MapSheetAnalDataGeomEntity.class);
this.queryFactory = queryFactory;
}
@Override
public String getPolygonToPoint() {
return null;
}
public List<MapSheetAnalDataGeomEntity> findAll() {
return queryFactory
.selectFrom(mapSheetAnalDataGeomEntity)
.orderBy(mapSheetAnalDataGeomEntity.id.desc())
.fetch();
}
}