En el curro casi todas nuestras aplicaciones son de escritorio, con javax.swing y casi todas llevan algún mapa donde pintamos «cosas». Habitualmente símbolos que representan barcos, aviones, helicópteros, pero también polígonos, líneas etc.
Por ello, hemos ido probando y pasando de unas librerías Java de mapas (GIS o Geographical Information Service) a otras.
Una de las que seguimos usando, gratuita, es WorldWind. Escrita por la NASA, muy completa, pero que ya no tiene soporte y está discontinuada. En la Categoría WorldWind de la Chuwiki tengo algunos ejemplos que hice en su día.
Otra que miramos en su momento, es la de ESRI (ArcGis). El SDK de desarrollo de Java es gratuito, aunque viene con algunas limitaciones. Sólo es necesario el pago si vas a instalar tu aplicación en clientes o si tu aplicación necesita acceder a determinadas funciones que están hospedadas en los servidores de ESRI, como el trazado de rutas entre dos puntos siguiendo los caminos o el acceso a ficheros de mapas que tengan ellos. Una ventaja grande de ESRI es que no sólo tiene SDK de Java, sino que lo tiene en varios lenguajes, para web, para móvil, etc. WorldWind también lo tiene, pero algunas de esas opciones están un poco «a medias».
En plan gratuito también miré Geotools. pero era, cuando lo miré, claramente más cutre y me encontré con fallos gordos. Así que no la miré mucho más. De esto hace ya 8 años y Geotools sigue viva y con actualizaciones, es posible que haya mejorado mucho.
Y finalmente, ya de pago total, pero como paga la empresa nos «da un poco igual», tenemos Luciad LightSpeed. Es una librería cara, sin posiblidad de desarrollo gratuito salvo que contactes con ellos y te concedan una licencia de demo, pero es muy muy completa. Es la que conozco que soporta más formatos de ficheros de mapas (cartas náuticas, simbología militar completa, ficheros meteorológicos, de CAD, etc, etc). Tiene también versión para el lado del servidor en una aplicación Web, Luciad Fusion. Y la parte del navegador, en TypeScript, Luciad RIA. LightSpeed viene también con Lucy, todo un framework para que hagas tu aplicación con menús, docking de paneles, salvado/recuperación del workspace por usuarios, etc, etc.
Tengo algunos ejemplos en github, pero al ser de pago, no he escrito ningún tutorial. Me gusta que la gente que sigue mis tutoriales pueda hacer y jugar con el código, cosa que aquí no es posible.
Mi relación con Luciad es de amor/odio. Amor porque como comento, es muy completo y nos soluciona prácticamente todos los problemas que tenemos relativos a mapas, esos sí, codificando. Odio por el tema de precio sobre todo, aunque paga la empresa, me toca «convencer» a los que pagan que el precio merece la pena. A veces no es fácil.