GeoJSONIsochronesIntersection.java
- /*
- * This file is part of Openrouteservice.
- *
- * Openrouteservice is free software; you can redistribute it and/or modify it under the terms of the
- * GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1
- * of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License along with this library;
- * if not, see <https://www.gnu.org/licenses/>.
- */
- package org.heigit.ors.api.responses.isochrones.geojson;
- import com.fasterxml.jackson.annotation.JsonIgnore;
- import com.fasterxml.jackson.annotation.JsonProperty;
- import org.heigit.ors.api.requests.isochrones.IsochronesRequest;
- import org.heigit.ors.api.requests.isochrones.IsochronesRequestEnums;
- import org.heigit.ors.common.Pair;
- import org.heigit.ors.exceptions.InternalServerException;
- import org.heigit.ors.isochrones.IsochronesErrorCodes;
- import org.heigit.ors.isochrones.IsochronesIntersection;
- import org.heigit.ors.util.FormatUtility;
- import org.locationtech.jts.geom.Geometry;
- import java.util.*;
- public class GeoJSONIsochronesIntersection extends GeoJSONIsochroneBase {
- @JsonIgnore
- private final IsochronesIntersection intersection;
- @JsonProperty("properties")
- private final Map<String, Object> properties;
- public GeoJSONIsochronesIntersection(IsochronesIntersection intersection, IsochronesRequest request) throws InternalServerException {
- this.intersection = intersection;
- properties = fillProperties(intersection, request);
- }
- private Map<String, Object> fillProperties(IsochronesIntersection intersection, IsochronesRequest request) throws InternalServerException {
- Map<String, Object> props = new HashMap<>();
- List<Integer[]> contours = new ArrayList<>();
- for (Pair<Integer, Integer> ref : intersection.getContourRefs()) {
- Integer[] pair = new Integer[2];
- pair[0] = ref.first;
- pair[1] = ref.second;
- contours.add(pair);
- }
- props.put("contours", contours);
- if (request.hasAttributes()) {
- List<IsochronesRequestEnums.Attributes> attr = new ArrayList<>(Arrays.asList(request.getAttributes()));
- if (attr.contains(IsochronesRequestEnums.Attributes.AREA)) {
- try {
- double areaValue = 0;
- if (request.hasAreaUnits())
- areaValue = intersection.getArea(request.getAreaUnit().toString());
- else
- areaValue = intersection.getArea("");
- props.put("area", FormatUtility.roundToDecimals(areaValue, 4));
- } catch (InternalServerException e) {
- throw new InternalServerException(IsochronesErrorCodes.UNKNOWN, "There was a problem calculating the area of the isochrone");
- }
- }
- }
- return props;
- }
- public Map<String, Object> getProperties() {
- return properties;
- }
- @Override
- public Geometry getIsochroneGeometry() {
- return intersection.getGeometry();
- }
- }