Разбор данных GeoJSON в Polygon с использованием Java - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть следующие данные файла Geo JSON, которые я хочу проанализировать в Polygon (используя java)

Файл Geo JSON

[
  {
    "_id": "58a58bf685979b5415f3a39a",
    "updatedAt": "2017-03-27T14:04:34.470Z",
    "createdAt": "2017-02-16T11:24:38.375Z",
    "__v": 0,
    "name": "0",
    "cityId": "548876e13a9424d55af738b5",
    "legacyId": "18_92",
    "type": "relocationzone",
    "geoFeatures": [
      {
        "name": "opticalCenter",
        "geometry": {
          "type": "Point",
          "coordinates": [
            9.1371735,
            48.790337
          ]
        }
      },
      {
        "name": "center",
        "geometry": {
          "type": "Point",
          "coordinates": [
            9.137148666666667,
            48.79031233333333
          ]
        }
      }
    ],
    "options": {
      "active": true,
      "is_excluded": false,
      "area": 0.4
    },
    "timedOptions": [
      {
        "key": "min",
        "changesOverTime": [
          [
            0,
            0
          ]
        ]
      },
      {
        "key": "max",
        "changesOverTime": [
          [
            0,
            200
          ]
        ]
      },
      {
        "key": "idle_time",
        "changesOverTime": [
          [
            0,
            2000
          ]
        ]
      },
      {
        "key": "revenue",
        "changesOverTime": [
          [
            0,
            0
          ]
        ]
      },
      {
        "key": "walking_range1",
        "changesOverTime": [
          [
            0,
            0
          ]
        ]
      },
      {
        "key": "walking_range2",
        "changesOverTime": [
          [
            0,
            0
          ]
        ]
      }
    ],
    "geometry": {
      "type": "Polygon",
      "coordinates": [
        [
          [
            9.137248,
            48.790411
          ],
          [
            9.137248,
            48.790263
          ],
          [
            9.13695,
            48.790263
          ],
          [
            9.137248,
            48.790411
          ]
        ]
      ]
    },
    "version": 1,
    "$computed": {
      "activeTimedOptions": {
        "min": 0,
        "max": 200,
        "idle_time": 2000,
        "revenue": 0,
        "walking_range1": 0,
        "walking_range2": 0
      }
    }
  }
]

Я использовал geojson-jackson 1.0 для анализа с использованием нижеприведенного Java-кода

GeoJsonObject[] object = new ObjectMapper().readValue(new File(fileLocation), GeoJsonObject[].class);
        if (object[0] instanceof Polygon) {
            System.out.println("yes");
        }
        else {
            System.out.println("No");
        }

Но я получаю исключение com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id 'relocationzone' as a subtype of [simple type, class org.geojson.GeoJsonObject]: known type ids = [Feature, FeatureCollection, LineString, MultiLineString, MultiPoint, MultiPolygon, Point, Polygon]

Может кто-нибудь сказать мне, как я могу использовать выше данные файла JSONуспешно разобрать в полигоне?

1 Ответ

0 голосов
/ 09 февраля 2019

geojson-jackson 1.0 помечает ваш ввод GeoJSON как недействительный.Исключение говорит, что все допустимые входные данные GeoJSON должны иметь тип Feature, FeatureCollection, LineString, MultiLineString, MultiPoint, MultiPolygon, Point или Polygon.См. https://github.com/opendatalab-de/geojson-jackson/blob/master/src/main/java/org/geojson/GeoJsonObject.java#L14-L16 с актуальным исходным кодом.

В приведенном вами примере ввода установлен тип "relocationzone".

Для того, чтобы это работало, вам потребуетсяРасширьте geojson-jackson, создав новые классы Java, которые более или менее соответствуют структуре ваших входных данных GeoJSON.

В качестве отправной точки вам необходимо создать класс, который будет выглядеть примерно так:

public class relocationzone extends GeoJsonObject {

    @JsonInclude(JsonInclude.Include.ALWAYS)
    private Map<String, Object> properties = new HashMap<String, Object>();
    @JsonInclude(JsonInclude.Include.ALWAYS)

    // Expected JSON data
    private GeoJsonObject geometry;
    private String id;
    private String _id;
    private String updatedAt;;
    private String name;
    private String _v;
    private String createdAt;
    private String legacyId;


    public void setProperty(String key, Object value) {
        properties.put(key, value);
    }

    @SuppressWarnings("unchecked")
    public <T> T getProperty(String key) {
        return (T)properties.get(key);
    }

    public Map<String, Object> getProperties() {
        return properties;
    }

    public void setProperties(Map<String, Object> properties) {
        this.properties = properties;
    }

    public GeoJsonObject getGeometry() {
        return geometry;
    }

    public void setGeometry(GeoJsonObject geometry) {
        this.geometry = geometry;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

}
...