aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/traccar/api/resource
diff options
context:
space:
mode:
authorAnton Tananaev <anton@traccar.org>2022-07-03 15:52:39 -0700
committerAnton Tananaev <anton@traccar.org>2022-07-03 15:54:45 -0700
commitc49bda5396847731f4eea8f6e3f0e0dd6811ae6f (patch)
tree49458a518577936d367dc6a87b02cabc6f42e025 /src/main/java/org/traccar/api/resource
parent5f88528350f55802d63bfcb0f4902a4a3399634c (diff)
downloadtrackermap-server-c49bda5396847731f4eea8f6e3f0e0dd6811ae6f.tar.gz
trackermap-server-c49bda5396847731f4eea8f6e3f0e0dd6811ae6f.tar.bz2
trackermap-server-c49bda5396847731f4eea8f6e3f0e0dd6811ae6f.zip
Support KML export (fix #1858, fix #2329)
Diffstat (limited to 'src/main/java/org/traccar/api/resource')
-rw-r--r--src/main/java/org/traccar/api/resource/PositionResource.java21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/main/java/org/traccar/api/resource/PositionResource.java b/src/main/java/org/traccar/api/resource/PositionResource.java
index cac64feb1..28f8eb600 100644
--- a/src/main/java/org/traccar/api/resource/PositionResource.java
+++ b/src/main/java/org/traccar/api/resource/PositionResource.java
@@ -20,17 +20,22 @@ import org.traccar.helper.model.PositionUtil;
import org.traccar.model.Device;
import org.traccar.model.Position;
import org.traccar.model.UserRestrictions;
+import org.traccar.reports.KmlExportProvider;
import org.traccar.storage.StorageException;
import org.traccar.storage.query.Columns;
import org.traccar.storage.query.Condition;
import org.traccar.storage.query.Request;
+import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
@@ -41,6 +46,9 @@ import java.util.List;
@Consumes(MediaType.APPLICATION_JSON)
public class PositionResource extends BaseResource {
+ @Inject
+ private KmlExportProvider kmlExportProvider;
+
@GET
public Collection<Position> getJson(
@QueryParam("deviceId") long deviceId, @QueryParam("id") List<Long> positionIds,
@@ -69,4 +77,17 @@ public class PositionResource extends BaseResource {
}
}
+ @Path("kml")
+ @GET
+ @Produces("application/vnd.google-earth.kml+xml")
+ public Response getKml(
+ @QueryParam("deviceId") long deviceId,
+ @QueryParam("from") Date from, @QueryParam("to") Date to) throws StorageException {
+ permissionsService.checkPermission(Device.class, getUserId(), deviceId);
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ kmlExportProvider.generateKml(stream, deviceId, from, to);
+ return Response.ok(stream.toByteArray())
+ .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=positions.kml").build();
+ }
+
}