<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.argeo.suite</groupId>
<artifactId>org.argeo.suite.ui.rap</artifactId>
<version>2.1.18-SNAPSHOT</version>
</dependency>
-
+
<!-- Argeo People -->
<dependency>
<groupId>org.argeo.suite</groupId>
<groupId>org.argeo.tp.javax</groupId>
<artifactId>javax.xml.bind</artifactId>
</dependency>
-
+
+ <!-- Jackson JSON processor -->
+ <dependency>
+ <groupId>org.argeo.tp.jackson</groupId>
+ <artifactId>com.fasterxml.jackson.core.jackson-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.jackson</groupId>
+ <artifactId>com.fasterxml.jackson.core.jackson-databind</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.tp.jackson</groupId>
+ <artifactId>com.fasterxml.jackson.core.jackson-annotations</artifactId>
+ </dependency>
+
<!-- PDFBox -->
<dependency>
<groupId>org.argeo.tp.apache</groupId>
<groupId>org.argeo.tp.apache</groupId>
<artifactId>org.apache.xerces</artifactId>
</dependency>
-
+
<!-- POI (MS office documents) -->
<dependency>
<groupId>org.argeo.tp.apache</groupId>
</dependency>
<!-- Argeo TP Extras -->
-<!-- <dependency> -->
-<!-- <groupId>org.argeo.tp.payment</groupId> -->
-<!-- <artifactId>com.stripe</artifactId> -->
-<!-- </dependency> -->
+ <!-- <dependency> -->
+ <!-- <groupId>org.argeo.tp.payment</groupId> -->
+ <!-- <artifactId>com.stripe</artifactId> -->
+ <!-- </dependency> -->
</dependencies>
<profiles>
--- /dev/null
+package org.argeo.geo;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Writer;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+/** Converts a geographical feature to an SVG. */
+public class GeoToSvg {
+ public void convertGeoJsonToSvg(Path source, Path target) {
+ ObjectMapper objectMapper = new ObjectMapper();
+ try (InputStream in = Files.newInputStream(source);
+ Writer out = Files.newBufferedWriter(target, StandardCharsets.UTF_8)) {
+ JsonNode tree = objectMapper.readTree(in);
+ JsonNode coord = tree.get("features").get(0).get("geometry").get("coordinates");
+ double ratio = 100;
+ double minX = Double.POSITIVE_INFINITY;
+ double maxX = Double.NEGATIVE_INFINITY;
+ double minY = Double.POSITIVE_INFINITY;
+ double maxY = Double.NEGATIVE_INFINITY;
+ List<String> shapes = new ArrayList<>();
+ for (JsonNode shape : coord) {
+ StringBuffer sb = new StringBuffer();
+ sb.append("<polyline style=\"stroke-width:0.00000003;stroke:#000000;\" points=\"");
+ for (JsonNode latlng : shape) {
+ double lat = latlng.get(0).asDouble();
+ double y = lat * ratio;
+ if (y < minY)
+ minY = y;
+ if (y > maxY)
+ maxY = y;
+ double lng = latlng.get(1).asDouble();
+ double x = lng * ratio;
+ if (x < minX)
+ minX = x;
+ if (x > maxX)
+ maxX = x;
+ sb.append(y + "," + x + " ");
+ }
+ sb.append("\">");
+ sb.append("</polyline>\n");
+ shapes.add(sb.toString());
+ }
+
+ double width = maxX - minX;
+ double height = maxY - minY;
+ out.write("<svg xmlns=\"http://www.w3.org/2000/svg\"\n");
+ out.write(" width=\"" + (int) (width * 1000) + "\"\n");
+ out.write(" height=\"" + (int) (height * 1000) + "\"\n");
+ out.write(" viewBox=\"" + minX + "," + minY + "," + width + "," + height + "\"\n");
+ out.write(">\n");
+ for (String shape : shapes) {
+ out.write(shape);
+ out.write("\n");
+ }
+ out.write("</svg>");
+ } catch (IOException e) {
+ throw new RuntimeException("Cannot convert " + source + " to " + target, e);
+ }
+ }
+
+}