Además de las excelentes respuestas anteriores, permítanme agregar mi propia experiencia. Hace un año y medio decidí utilizar OpenLayers (OL) en mi proyecto de maestría y me propuse aprenderlo. He estado programando y haciendo mapas digitales como parte de mi trabajo como arqueólogo desde principios de los años 80, y he sido usuario de ArcGIS durante 15 años. Estoy contento de haber elegido OL para mi proyecto, pero no siempre fue un camino fácil aprenderlo. Algunas cosas no eran obvias y las aprendí solo mediante ensayo y error. Así que tengo algunos consejos para principiantes.
Mi aprendizaje de OL realmente comenzó cuando me registré en una cuenta de 5 slots en Safari Books Online por $10 al mes USD. Quería revisar libros antes de comprar, y pocas tiendas a las que se puede visitar tienen libros de computación relacionados con GIS. Actualmente hay tres libros sobre OL 2. Una guía para principiantes de OpenLayers 2.10 de Erik Hazzard (marzo de 2011) y el Cookbook de OpenLayers de Antonio Santiago Pérez (agosto de 2012) fueron buenos recursos:
- OpenLayers 2.10: Guía para principiantes de Erik Hazzard (marzo de 2011)
- Cookbook de OpenLayers de Antonio Santiago Pérez (agosto de 2012)
Debido a las frustraciones ocasionales por el css y la compatibilidad con el navegador, terminé aprendiendo un framework de JavaScript también. Elegí Dojo porque esto es lo que Pérez usó en su libro. El Dojo moderno (Dojo 1.7 +) es un enfoque significativamente diferente de las versiones anteriores, utilizando un formato de Definición Asíncrona de Módulos (AMD). La forma de hacer todo cambió. No entendí que este libro por lo demás excelente usa una versión anterior a la 1.7 de Dojo que quedó obsoleta 9 meses antes de la publicación del libro en agosto de 2012. Esri continuó usando el Dojo anterior a la 1.7 en su API de JavaScript ArcGIS hasta la modernización en junio de 2012, y este fue un cambio doloroso para muchos desarrolladores de JavaScript de ArcGIS.
Para entender la poca ayuda que ofrece Dojo, aparte de un libro escrito en 2010 sobre Dojo 1.3, la mayoría de los libros se escribieron en 2007 y 2008. No hay libros publicados para Dojo Moderno: debes aprender de recursos en línea, la mayoría de los cuales están en su sitio web. Básicamente, para trabajar con los ejemplos del libro de Pérez, necesitas saber lo suficiente sobre JavaScript como para ignorar las partes de Dojo y trasladar los ejemplos a JavaScript puro o a tu framework de preferencia.
En retrospectiva, me hubiera gustado haber optado por el framework de ExtJS y GeoExt. ExtJS es gratuito si tu proyecto es de código abierto, y como muchas empresas pagan felizmente por una versión compatible, pueden permitirse dedicar tiempo a una documentación completa del sitio web y tutoriales.
Aprendo mejor trabajando con / modificando ejemplos. Los desarrolladores de OpenLayers tienen la misma filosofía, ya que la documentación principal que señalan para aprender es examinando los ejemplos. Sin embargo, algunos ejemplos en su sitio web y en otros lugares pueden tener problemas que pueden hacer que los principiantes tropiecen. (Ver más abajo).
La dependencia de ejemplos como documentación también significa que el usuario no tiene una idea clara del flujo de trabajo para desarrollar un mapa web. Esto puede llevar a la creación de mapas que se sienten incompletos, por ejemplo, pueden carecer de personalizaciones de css en la interfaz de usuario del mapa y en su "aspecto y sensación". Sustituir el css de OL con personalizaciones puede parecer abrumador para el principiante, pero Firebug puede ayudarte a encontrar los nombres de los elementos que necesitas modificar. La falta de un sentido de un flujo de trabajo aceptado también puede llevar a la creación de Frankencode, ya que los usuarios ajustan características en su código según lo necesitan.
Esto me lleva al último elemento que siento que falta en la documentación del sitio de OL, un sentido de "mejores prácticas" para los mapas de OL. ¿Existe una mejor manera de organizar mi código para que sea modular y sólido? ¿Cuáles son los riesgos con los cierres de JavaScript y los objetos de OL? ¿Dónde debo declarar mis estilos? Y así sucesivamente.
Además de los varios archivos desactualizados en la Wiki, hay dos problemas generales de los que un principiantes debe ser consciente al aprender de los ejemplos oficiales de OpenLayers y de los documentos de la API. En primer lugar, no hay organización en la página de ejemplos de desarrollo de OL en el sitio web de OL. Simplemente presenta la alimentación del archivo xml en ese directorio (ejemplo-list.xml) de los ejemplos (207 de estos hasta el 13 de febrero de 2014) y ordena las filas alfabéticamente por nombre de archivo en una cuadrícula. Los ejemplos más avanzados se mezclan con los básicos. Puedes buscar los ejemplos por palabra clave, pero muchos de los ejemplos carecen de palabras clave y la función de búsqueda incluye contenido y título de página en la búsqueda, no solo palabras clave. Los resultados se devuelven con el mayor número de términos de búsqueda coincidentes primero, seguido de la frecuencia de palabras. Solo uno de los términos de búsqueda debe coincidir para aparecer en los resultados. La página UserRecipes en la Wiki de OL lista alrededor de 90 ejemplos organizados por categoría, y esta categorización es útil. De estos, 66 son enlaces activos a los ejemplos en la página de ejemplos y el resto son enlaces rotos a ejemplos eliminados.
En segundo lugar, hay básicamente dos versiones de la documentación de la API que parecen ser iguales a primera vista. La API oficial está en un directorio llamado /apidocs y la biblioteca de desarrollador de punta, pero volátil, está en un directorio llamado /docs. Las URLs son iguales de otra manera. (También hay versiones de troncales). Simplemente edita la dirección de la página para ver la otra versión. La Wiki señala que no se debe confiar en la biblioteca de desarrollador ya que las propiedades, funciones, etc. podrían eliminarse de la biblioteca en cualquier momento. Con OpenLayers 3 cerca de ser una realidad (ya está disponible en beta y hay un libro al respecto ahora), sospecho que no habrá muchos cambios en OL 2 en el futuro. El enfoque ahora está en OL 3.
En general, encuentro que las páginas de la API de OL son demasiado esqueléticas, a menudo carecen de explicaciones o ejemplos ilustrativos, especialmente para alguien acostumbrado a bibliotecas con documentación de API más completa. La forma en que se presenta no te da una imagen clara del objeto del que está heredando.
De los ejemplos de OL en la web en general, muchos usan objetos o sintaxis que han quedado obsoletos porque han sido reemplazados por versiones mejoradas. Por ejemplo, Layer.Vector es ahora la forma preferida de dibujar marcadores, ya que Layer.Marker está obsoleto en la versión 3. Examina el archivo deprecated.js para asegurarte de que no estás usando objetos que están en desuso. O, al menos, sé consciente de que si actualizas tu código a OL 3, necesitarás hacer este cambio.
Además del taller de Boundless OpenLayers vinculado por Julien-Samuel Lacroix arriba, IBM tiene un tutorial interesante, aunque tiene tres años de antigüedad, que utiliza OpenLayers, MapServer, Google Gears y jQuery para construir una aplicación web de SIG completa: Uniendo datos con OpenLayers: Usando datos de múltiples fuentes divergentes en mapas web
También, echa un vistazo a este útil post sobre cómo estilizar el selector de capas
Busca las palabras OpenLayers y jsFiddle para obtener ejemplos de OpenLayers. El resultado del sitio techslides es una página que lista bastantes de estos.
Por último, ten en cuenta que las imágenes del mapa en la mayoría de los ejemplos son de los servidores de OpenStreetMap (OSM) y estos se caen de vez en cuando, ya sea planificado o no, y obtendrás baldosas rosas en su lugar. A veces pensarás que arruinaste tu código. Puedes verificar el estado de la plataforma en la wiki de OpenStreetMap.