지대한
2 months ago
1 changed files with 55 additions and 107 deletions
@ -1,136 +1,84 @@
|
||||
package com.palnet.comn.utils; |
||||
|
||||
import de.micromata.opengis.kml.v_2_2_0.*; |
||||
import lombok.AllArgsConstructor; |
||||
import lombok.Builder; |
||||
import lombok.Data; |
||||
import lombok.NoArgsConstructor; |
||||
|
||||
import javax.xml.bind.annotation.XmlAttribute; |
||||
import javax.xml.bind.annotation.XmlRootElement; |
||||
import java.io.StringWriter; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
public class KmlUtils { |
||||
|
||||
// public static void main(String[] args) {
|
||||
// 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;
|
||||
// }
|
||||
// }
|
||||
final static Kml kml = new Kml(); |
||||
|
||||
@Data |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
@Builder |
||||
@XmlRootElement(name = "kml", namespace = "http://www.opengis.net/kml/2.2") |
||||
public static class KmlRoot<T> { |
||||
T kml; |
||||
} |
||||
public static String createKmlPolygons(List<KmlRq> rqList) { |
||||
// validation
|
||||
if(rqList == null || rqList.isEmpty()) { |
||||
return null; |
||||
} |
||||
|
||||
@Data |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
@Builder |
||||
@XmlRootElement(name = "Document") |
||||
public static class KmlDocument { |
||||
private String name; |
||||
private String open; |
||||
private String description; |
||||
private List<KmlStyle> styles; |
||||
private List<KmlFolder> folders; |
||||
} |
||||
// document
|
||||
Document doc = kml.createAndSetDocument().withName("kml-export"); |
||||
Style style = doc.createAndAddStyle().withId("styled001"); |
||||
style.createAndSetLineStyle().withColor("ff0000ff").withWidth(2.0); |
||||
style.createAndSetPolyStyle().withColor("7f00ff00"); |
||||
// folder
|
||||
Folder folder = doc.createAndAddFolder().withName("kml-folder"); |
||||
|
||||
@Data |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
@Builder |
||||
@XmlRootElement(name = "Style") |
||||
public static class KmlStyle { |
||||
@XmlAttribute(name = "id") |
||||
private String id; |
||||
private KmlLineStyle LineStyle; |
||||
private KmlPolyStyle PolyStyle; |
||||
} |
||||
rqList.forEach(rq -> { |
||||
// placemark - polygon
|
||||
Placemark placemark = folder.createAndAddPlacemark() |
||||
.withName(rq.getName()) |
||||
.withVisibility(true) |
||||
.withStyleUrl("#styled001"); |
||||
LinearRing linearRing = placemark.createAndSetPolygon() |
||||
.createAndSetOuterBoundaryIs() |
||||
.createAndSetLinearRing() |
||||
.withCoordinates(rq.getCoordinates()); |
||||
|
||||
@Data |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
@Builder |
||||
@XmlRootElement(name = "LineStyle") |
||||
public static class KmlLineStyle { |
||||
private String color; |
||||
private String width; |
||||
} |
||||
}); |
||||
|
||||
@Data |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
@Builder |
||||
@XmlRootElement(name = "PolyStyle") |
||||
public static class KmlPolyStyle { |
||||
private String color; |
||||
StringWriter sw = new StringWriter(); |
||||
kml.marshal(sw); |
||||
return sw.toString(); |
||||
} |
||||
|
||||
@Data |
||||
@NoArgsConstructor |
||||
@AllArgsConstructor |
||||
@Builder |
||||
@XmlRootElement(name = "Folder") |
||||
public static class KmlFolder { |
||||
public static class KmlRq { |
||||
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 |
||||
double heading = 0; |
||||
double tilt; |
||||
double range; |
||||
private List<Coordinate> coordinates = new ArrayList<>(); |
||||
} |
||||
|
||||
@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…
Reference in new issue