Browse Source

feat: kml 유틸 구성

feature/change-airspace
지대한 2 months ago
parent
commit
2b54df5911
  1. 160
      pav-server/src/main/java/com/palnet/comn/utils/KmlUtils.java

160
pav-server/src/main/java/com/palnet/comn/utils/KmlUtils.java

@ -1,136 +1,84 @@
package com.palnet.comn.utils; package com.palnet.comn.utils;
import de.micromata.opengis.kml.v_2_2_0.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.xml.bind.annotation.XmlAttribute; import java.io.StringWriter;
import javax.xml.bind.annotation.XmlRootElement; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class KmlUtils { public class KmlUtils {
// public static void main(String[] args) { final static Kml kml = new Kml();
// KmlPlacemark placemark = new KmlPlacemark();
// placemark.setName("Test");
// placemark.setDescription("This is a test placemark");
// placemark.setLatitude(37.5665);
// placemark.setLongitude(126.9780);
// placemark.setElevation(0.0);
//
// String kml = convertToKml(placemark);
// System.out.println(kml);
// }
// public static String convertToKml(KmlPlacemark placemark) {
// try {
// JAXBContext jaxbContext = JAXBContext.newInstance(KmlPlacemark.class);
// Marshaller marshaller = jaxbContext.createMarshaller();
//
// marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
//
// StringWriter writer = new StringWriter();
// marshaller.marshal(placemark, writer);
//
// return writer.toString();
// } catch (JAXBException e) {
// e.printStackTrace();
// return null;
// }
// }
@Data public static String createKmlPolygons(List<KmlRq> rqList) {
@NoArgsConstructor // validation
@AllArgsConstructor if(rqList == null || rqList.isEmpty()) {
@Builder return null;
@XmlRootElement(name = "kml", namespace = "http://www.opengis.net/kml/2.2")
public static class KmlRoot<T> {
T kml;
} }
@Data // document
@NoArgsConstructor Document doc = kml.createAndSetDocument().withName("kml-export");
@AllArgsConstructor Style style = doc.createAndAddStyle().withId("styled001");
@Builder style.createAndSetLineStyle().withColor("ff0000ff").withWidth(2.0);
@XmlRootElement(name = "Document") style.createAndSetPolyStyle().withColor("7f00ff00");
public static class KmlDocument { // folder
private String name; Folder folder = doc.createAndAddFolder().withName("kml-folder");
private String open;
private String description;
private List<KmlStyle> styles;
private List<KmlFolder> folders;
}
@Data rqList.forEach(rq -> {
@NoArgsConstructor // placemark - polygon
@AllArgsConstructor Placemark placemark = folder.createAndAddPlacemark()
@Builder .withName(rq.getName())
@XmlRootElement(name = "Style") .withVisibility(true)
public static class KmlStyle { .withStyleUrl("#styled001");
@XmlAttribute(name = "id") LinearRing linearRing = placemark.createAndSetPolygon()
private String id; .createAndSetOuterBoundaryIs()
private KmlLineStyle LineStyle; .createAndSetLinearRing()
private KmlPolyStyle PolyStyle; .withCoordinates(rq.getCoordinates());
}
@Data });
@NoArgsConstructor
@AllArgsConstructor
@Builder
@XmlRootElement(name = "LineStyle")
public static class KmlLineStyle {
private String color;
private String width;
}
@Data StringWriter sw = new StringWriter();
@NoArgsConstructor kml.marshal(sw);
@AllArgsConstructor return sw.toString();
@Builder
@XmlRootElement(name = "PolyStyle")
public static class KmlPolyStyle {
private String color;
} }
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Builder @Builder
@XmlRootElement(name = "Folder") public static class KmlRq {
public static class KmlFolder {
private String name; private String name;
private String description;
private KmlLookAt lookAt;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@XmlRootElement(name = "LookAt")
public static class KmlLookAt {
double longitude;
double latitude;
@Builder.Default
double altitude = 0;
@Builder.Default @Builder.Default
double heading = 0; private List<Coordinate> coordinates = new ArrayList<>();
double tilt;
double range;
} }
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@XmlRootElement(name = "Placemark")
public static class KmlPlacemark {
private String name;
private String description;
@Builder.Default
private int visibility = 1;
private String styleUrl;
private KmlLookAt lookAt;
public static void main(String[] args) {
KmlRq rq1 = KmlRq.builder()
.name("test1")
.coordinates(List.of(
new Coordinate(126.73229515507134,37.622273460242354),
new Coordinate(126.73329515507134,37.622273460242354),
new Coordinate(126.73329515507134,37.622373460242354),
new Coordinate(126.73229515507134,37.622373460242354),
new Coordinate(126.73229515507134,37.622273460242354)
))
.build();
KmlRq rq2 = KmlRq.builder()
.name("test2")
.coordinates(List.of(
new Coordinate(126.74229515507134,37.632273460242354),
new Coordinate(126.74329515507134,37.632273460242354),
new Coordinate(126.74329515507134,37.632373460242354),
new Coordinate(126.74229515507134,37.632373460242354),
new Coordinate(126.74229515507134,37.632273460242354)
))
.build();
String str = createKmlPolygons(List.of(rq1, rq2));
System.out.println(str);
} }
} }

Loading…
Cancel
Save