Aplikacja GIS – Spring, GDAL i MongoDB

Serializacja GeoJSON

Warto zoptymalizować tą kwestię, bo przesyłane są duże ilości punktów. Generalnie, schemat GeoJSON wygląda tak

{
  "type": "Feature",
  "geometry": {
    "type": "Point", //typ geometrii
    "coordinates": [125.6, 10.1] //lista punktów, zagnieżdżone tablice
  },
  "properties": {
    //dodatkowe informacje, klucze i wartości
  }
}

zwłaszcza należy się zatroszczyć o ograniczenie objętości pola coordinates. Czyli usuwamy zbędne informacje o tym, że MultiPolygon to tablica Polygon itd. Niech zostaną same zagnieżdżone tablice JSON i wartości. Wartości zaokrąglamy, na ile to możliwe.

W Jackson załatwiamy sprawę implementując interfejsy StdSerializer<GeoJson> dla każdego z typów. Potem rejestrujemy je

@Configuration
public class CustomSerializersConfig {
    @Bean
    public Jackson2ObjectMapperBuilder jacksonBuilder() {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        builder.serializerByType(GeoJsonPoint.class, new CustomGeoJsonPointSerialization());
        builder.serializerByType(GeoJsonPolygon.class, new CustomGeoJsonPolygonSerialization());
        builder.serializerByType(GeoJsonLineString.class, new CustomGeoJsonLineStringSerialization());
        return builder;
    }
}

Podsumowanie

Niewielkim nakładem kodu od strony faktycznej obsługi zapytań (kontrolery, api bazy), można w prosty sposób przeszukiwać dane geograficzne. Nieco więcej wymaga przeróbka wbudowanych klas pod własne potrzeby, ale to jest jednorazowa robota.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *