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.