package org.osmtools.api;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Iterator;
import org.springframework.stereotype.Service;
@Service
public class GeoJsonExport {
public void export(Iterable<Section> container, OutputStream os) {
StringBuilder json = new StringBuilder();
json.append("{\"type\":\"FeatureCollection\",\"features\":[");
for (Iterator<Section> it = container.iterator(); it.hasNext();) {
Section dataContainer = it.next();
json.append("{\"type\":\"Feature\",\"geometry\":\n");
json.append("{\"type\":\"LineString\",");
json.append("\"properties\":{\"name\":\"").append(dataContainer.getName()).append("\"},\n");
json.append("\"coordinates\":[");
for (Iterator<Iterable<? extends LonLat>> itC = dataContainer.getCoordinateLists().iterator(); itC
.hasNext();) {
Iterable<? extends LonLat> coordinates = itC.next();
addTrackpoints(json, coordinates);
if (itC.hasNext())
json.append(",");
}
json.append("]}}");
if (it.hasNext())
json.append(",\n");
}
json.append("]}");
try {
os.write(json.toString().getBytes());
}
catch (IOException e) {
throw new RuntimeException(e);
}
}
private void addTrackpoints(StringBuilder sb, Iterable<? extends LonLat> coordinates) {
for (Iterator<? extends LonLat> it = coordinates.iterator(); it.hasNext();) {
LonLat point = it.next();
sb.append("[").append(point.getLon()).append(",").append(point.getLat()).append("]");
if (it.hasNext())
sb.append(",");
}
}
}