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.