|
|
@ -15,6 +15,7 @@ import org.json.simple.parser.JSONParser; |
|
|
|
import org.locationtech.jts.geom.*; |
|
|
|
import org.locationtech.jts.geom.*; |
|
|
|
import org.locationtech.jts.operation.buffer.BufferOp; |
|
|
|
import org.locationtech.jts.operation.buffer.BufferOp; |
|
|
|
import org.locationtech.jts.operation.buffer.BufferParameters; |
|
|
|
import org.locationtech.jts.operation.buffer.BufferParameters; |
|
|
|
|
|
|
|
import org.locationtech.jts.util.GeometricShapeFactory; |
|
|
|
import org.locationtech.proj4j.BasicCoordinateTransform; |
|
|
|
import org.locationtech.proj4j.BasicCoordinateTransform; |
|
|
|
import org.locationtech.proj4j.CRSFactory; |
|
|
|
import org.locationtech.proj4j.CRSFactory; |
|
|
|
import org.locationtech.proj4j.ProjCoordinate; |
|
|
|
import org.locationtech.proj4j.ProjCoordinate; |
|
|
@ -664,6 +665,7 @@ public class AirAreaUtils { |
|
|
|
|
|
|
|
|
|
|
|
// ---------------------- AreaUtils ----------------------
|
|
|
|
// ---------------------- AreaUtils ----------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TODO 버퍼 생성시 임의로 좌표변환을 해야만 하는지 확인 ex) espg:4326 -> espg:5181 -> espg:4326
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* 좌표계 변환 |
|
|
|
* 좌표계 변환 |
|
|
|
* |
|
|
|
* |
|
|
@ -723,6 +725,39 @@ public class AirAreaUtils { |
|
|
|
return new ArrayList<>(Arrays.asList(coords)); |
|
|
|
return new ArrayList<>(Arrays.asList(coords)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TODO 곡률로 구성된 원 생성방법 확인(타원이 아닌)
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* 타원 생성 |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* @param CircleCoord |
|
|
|
|
|
|
|
* @param BufferZone |
|
|
|
|
|
|
|
* @return |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public List<Coordinate> createCircle(Coordinate CircleCoord, double BufferZone) { |
|
|
|
|
|
|
|
GeometricShapeFactory shapeFactory = new GeometricShapeFactory(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double lng = CircleCoord.x; |
|
|
|
|
|
|
|
double lat = CircleCoord.y; |
|
|
|
|
|
|
|
double diameterInMeters = BufferZone; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
shapeFactory.setCentre(new Coordinate(lng , lat)); |
|
|
|
|
|
|
|
shapeFactory.setHeight((diameterInMeters * 2) / 111320d); |
|
|
|
|
|
|
|
shapeFactory.setWidth((diameterInMeters * 2) / (40075000 * Math.cos(Math.toRadians(lat)) / 360)); |
|
|
|
|
|
|
|
shapeFactory.setNumPoints(64); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
final Polygon circle = shapeFactory.createCircle(); |
|
|
|
|
|
|
|
circle.setSRID(4326); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Geometry geometry = geometryFactory.createGeometry(circle); |
|
|
|
|
|
|
|
Coordinate[] coords = geometry.getCoordinates(); |
|
|
|
|
|
|
|
List<Coordinate> coordList = new ArrayList<>(); |
|
|
|
|
|
|
|
coordList.addAll(Arrays.asList(coords)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return coordList; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) { |
|
|
|
public static void main(String[] args) { |
|
|
|
AirAreaUtils utils = AirAreaUtils.getInstance(); |
|
|
|
AirAreaUtils utils = AirAreaUtils.getInstance(); |
|
|
|
log.info("utils: {}", utils); |
|
|
|
log.info("utils: {}", utils); |
|
|
|