지대한
2 months ago
1 changed files with 55 additions and 107 deletions
@ -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…
Reference in new issue