|
|
|
@ -10,6 +10,7 @@ import org.locationtech.jts.geom.Polygon;
|
|
|
|
|
import org.locationtech.jts.geom.impl.CoordinateArraySequence; |
|
|
|
|
import org.locationtech.jts.operation.buffer.BufferOp; |
|
|
|
|
import org.locationtech.jts.operation.buffer.BufferParameters; |
|
|
|
|
import org.locationtech.jts.util.GeometricShapeFactory; |
|
|
|
|
import org.locationtech.proj4j.BasicCoordinateTransform; |
|
|
|
|
import org.locationtech.proj4j.CRSFactory; |
|
|
|
|
import org.locationtech.proj4j.CoordinateReferenceSystem; |
|
|
|
@ -34,6 +35,24 @@ public class FlightUtils {
|
|
|
|
|
|
|
|
|
|
return bufferCoords; |
|
|
|
|
} |
|
|
|
|
//기본좌표와 반지름을 받아 원을 생성하는 유틸
|
|
|
|
|
public static Coordinate[] createCircle(Coordinate circleCoords) { |
|
|
|
|
GeometricShapeFactory shapeFactory = new GeometricShapeFactory(); |
|
|
|
|
GeometryFactory geometryFactory = new GeometryFactory(); |
|
|
|
|
double lng = circleCoords.x; |
|
|
|
|
double lat = circleCoords.y; |
|
|
|
|
double diameterInMeters = circleCoords.z; |
|
|
|
|
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.createEllipse(); |
|
|
|
|
circle.setSRID(4326); |
|
|
|
|
Geometry geometry = geometryFactory.createGeometry(circle); |
|
|
|
|
Coordinate[] coords = geometry.getCoordinates(); |
|
|
|
|
return coords; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
//생성된 버퍼좌표에서 특정 좌표가 버퍼좌표 안에 속해있는지, 혹은 아닌지를 판단하는 유틸
|
|
|
|
|
public static boolean contains(Coordinate[] bufferCoords, Coordinate[] containsPoint) { |
|
|
|
|
|
|
|
|
|