¿Cuál es una buena API web de Javascript (preferiblemente abierta) para crear mapas web que requieren poco o ningún mantenimiento?


11

Recientemente me ofrecí para hacer un mapa web para una organización local sin fines de lucro. El mapa será bastante básico. Necesita mostrar el condado de Lane, Oregon dividido en múltiples distritos, con una ubicación de "oficina central" para cada distrito. Planeo construir esto en mi tiempo libre durante el verano, y quiero poder entregarles esto con muy poco riesgo de que necesite algún tipo de mantenimiento futuro.

He creado varios mapas web utilizando la API de JavaScript de ArcGIS con ArcGIS Server, pero planeo aprender una API diferente ya que esta organización no tiene ningún software ESRI (ni ningún SIG para el caso). He estado considerando OpenLayers / OpenGeo. Una cosa a tener en cuenta es que esta organización no tiene / no tendrá un servidor configurado para alojar las capas de este mapa, por lo que no estoy seguro de cómo almacenaría y accedería a los datos. JSON tal vez?

Actualmente no estoy familiarizado con la mayoría de las soluciones que no son de ArcGIS, por lo que cualquier consejo sería apreciado.

Respuestas:


4

Simplemente puede codificar sus funciones en Javascript como en este ejemplo de OpenLayers: http://openlayers.org/dev/examples/vector-features.html . No es necesario preocuparse por un mayor almacenamiento de datos. Por supuesto, esta es solo una opción si tiene pocas funciones para mostrar. Pero es una solución de "un archivo" que cualquier futuro mantenedor debería poder resolver.

Si puede exportar sus polígonos a shapefile, QGIS puede ayudarlo a "extraer los nodos" que luego puede usar para crear polígonos en OpenLayers de esta manera:

// create a polygon feature from a linear ring of points
var pointList = [new OpenLayers.Geometry.Point(x1,y1),new OpenLayers.Geometry.Point(x2,y2),<<<more points>>>];
var linearRing = new OpenLayers.Geometry.LinearRing(pointList);
var polygonFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon([linearRing]));

Si desea superponer esos polígonos en la parte superior de Google Maps o similar, es posible que desee volver a proyectar los polígonos en la proyección de Web Mercator primero.


¡Gracias! Parece que podría ser lo que necesito, siempre que no tenga demasiadas funciones. Voy a tratar de salir. Solo necesito descubrir cómo exportar mi clase de entidad poligonal actual del Distrito a estos valores codificados.
Tanner

1
@Tanner: puede usar GDAL / OGR para convertir a GeoJSON. Al menos, deles un Cloudmade, Google Maps, Yahoo! Mapas o capa base de Bing Maps en OpenLayers. Odio sonar como si estuviera promoviendo ofertas comerciales, pero parece que estás usando tecnología abierta por el bien de la tecnología abierta. Dale a la organización un mapa decente.
Sean

@Tanner: ¿En qué formato tiene los datos de su distrito?
oscuro

Clase de entidad poligonal de ArcGIS.
Tanner

@Sean: Gracias por el consejo. Echaré un vistazo a GDAL / OGR. Como se trata de un proyecto voluntario, este es (con suerte) un acuerdo único. No quiero tener que volver a eso. La principal preocupación es hacer un mapa web simple que pueda alojarse en su sitio web que no requiera ningún software de servidor (como MapServer) y que sea menos probable que se rompa pronto. Si una capa base comercial / API puede proporcionar esto, lo consideraré. Por lo menos, probablemente usaré una capa base comercial.
Tanner

10

Para la solución de mapeo de código abierto, puede considerar lo siguiente:

  1. Plataforma de servidor de mapeo: GeoServer basado en Java y de código abierto. Funciona bien en muchos entornos de producción: consulte: http://geoserver.org/display/GEOS/Welcome Manuales de usuario: http://docs.geoserver.org/stable/en/user/

    Otra opción sería MapServer: http://mapserver.org/

    Verifique la comparación: http://www.slideshare.net/novum.limitis/mapserver-vs-geoserver

  2. Lado del cliente: secuencias de comandos de la página web. El Openlayers más preferible para comenzar como muchos ejemplos y fácil de implementar también. Verificación: http://openlayers.org/ Ejemplos: http://openlayers.org/dev/examples/

  3. Datos espaciales: puede utilizar mapas de Google / Yahoo / Bing en función de sus términos y condiciones y licencia. O OpenStreet Maps, que puede publicar en GeoServer y usarlo. OpenStreet Map: http://www.openstreetmap.org/ Los archivos de formas de OpenStreet Map se pueden descargar a través de: http://wiki.openstreetmap.org/wiki/Shapefiles

Si va a usar mapas de Google / Yahoo / Bing, puede usar su API o OpenLayers para usarlo y no se requieren GeoServer y Spatial Data. A pesar de que se hizo una pregunta sobre una buena API de mapas web, la plataforma de mapeo y la referencia de datos espaciales se brindan anteriormente para pensar en una plataforma de mapeo de código abierto.


Un poco lo que dije, pero mejor dicho!
MerseyViking

3

Uso OpenLayers como parte de mi disertación UG, y no me puedo quejar. Bueno, puedo, y estuve despierto hasta tarde anoche tratando de hacer que se comportara, pero eso fue principalmente ignorancia de mi parte cuando intenté armar un sitio optimizado para dispositivos móviles en lugar de OL en sí.

Es fácil agregar capas que provienen de otro servidor usando WMS; Tengo MapServer ejecutándose que distribuye mosaicos WMS, y desde OL solo uso:

var layer = new OpenLayers.Layer.WMS(
    "Resistivity",
    "http://mywebsite.com/maps?map=amap.map",
    {'layers': 'resistivity', 'format':'image/png', 'transparent':'true'},
    {singleTile: true}
);

map.addLayer(layer);

De hecho, puede hacer frente a WFS e incluso a servidores WFS-T, y con capas de mapas y fotos de OSM, Google o Bing, puede tener una aplicación de mapeo web atractiva con una huella pequeña.




2

Súper tarde a la fiesta, pero pensé que agregaría otra opción que tendría sentido hoy en día.

Si no desea alojar un servidor pero aún desea beneficiarse del estilo y el almacenamiento en caché de mosaicos muy rápido, ¿por qué no Google Fusion Tables and Openlayers ? Del blog de Allan Glenn

var proj_4326 = new OpenLayers.Projection('EPSG:4326');
var proj_900913 = new OpenLayers.Projection('EPSG:900913');
map = new OpenLayers.Map({
   div: "map",
   projection: proj_900913,
   'displayProjection': proj_4326,
   allOverlays: true
});

var osm = new OpenLayers.Layer.OSM();

var fusionLayer = new OpenLayers.Layer.OSM("Fusion Table       
Map","http://mt0.googleapis.com/mapslt?hl=en- 
US&lyrs=ft:113681&x=${x}&y=${y}&z=${z}&w=256&h=256&source=maps_api");
map.addLayers([osm,fusionLayer]);

var long=12;
var lat=56.5;

var lonlat = new OpenLayers.LonLat(long,lat).transform(map.displayProjection,
map.projection);

map.setCenter(lonlat, 6);

Puede usar gdal para cargar las tablas de fusión . De esa manera, no paga el precio de analizar las geometrías geojson en el lado del cliente. Este costo puede variar de trivial (para una pequeña cantidad de características) a significativo (para una gran cantidad de características). También hará mucho más geométricas


1

En la línea de la respuesta de @ Sean, aquí hay una pregunta que planteé en octubre pasado y la solución. Yo también quería algo que pudiera transmitirse. En cuanto a mostrar los límites de su distrito, ¿podría Fusion Tables hacer eso tal vez?


1

CloudMade , Google Maps , Yahoo! Mapas o Bing Maps . Eventualmente, alguien vendrá a ayudarlos con su sitio web y no tendrá idea de OpenLayers o GeoJSON. Será mucho más seguro para el futuro utilizar una oferta comercial bien conocida. Será más fácil para ellos encontrar a alguien que sepa qué hacer con Google Maps y tendrá una interfaz familiar. Y, todavía es gratis para sitios públicos.

Asegúrese de obtener su propia clave API.


3
Esta pregunta tiene la etiqueta "código abierto", no voto negativo porque tiene todo el derecho de sugerir una versión comercial. Solo digo que con Google Maps necesitarás actualizar tu código después de 3 años de ser depurado, lo que te obligará a seguir desarrollando la misma APLICACIÓN una y otra vez para cada nueva versión de API de Google Maps. Una vez que desarrolle con capas abiertas, puede alojar la biblioteca durante el tiempo que desee. No tiene que preocuparse de que alguien accione un interruptor que apagará su servicio.
CaptDragon

1
No tengo nada en contra del código abierto. Todo lo contrario. Es posible que haya interpretado 'abierto' liberalmente (y no tomo las etiquetas como restrictivas). Sin embargo, para el dominio del problema que está abordando, las sugerencias para OpenLayers, MapServer, GeoServer, OpenStreetMap, etc. son mucho más complicadas técnicamente de lo que el 99.9% del personal sin fines de lucro puede manejar por sí solo. Si quiere ayudar a la organización, debe darles algo que puedan arreglar o encontrar fácilmente a alguien que arregle cuando él se haya ido. El número de personas con Google Maps en su conjunto de habilidades es significativamente mayor y no requeriría ningún acceso al servidor de la organización.
Sean

1
Sí, NO tengo idea de por qué las personas votan a favor las respuestas que sugieren GeoServer y MapServer cuando el autor de la pregunta dice específicamente que no puede alojar ningún servicio de mapas. : P
CaptDragon

@capdragon: También se indicó claramente en las respuestas que GeoServer / MapServer y los datos espaciales son opcionales. Puede seguir adelante con Openlayers sin ellos. No hay daño en dar información adicional relevante en la respuesta para que el usuario los conozca ...
Senthil

@Senthil: léelo nuevamente y cito: "esta organización no tiene / no tendrá un servidor configurado para alojar las capas de este mapa". Opcional ni siquiera es una palabra en la pregunta.
CaptDragon

1

Probablemente valga la pena echarle un vistazo a CartoDB:

http://cartodb.com/

Es un servicio de mapeo web elegante y gratuito que le permite cargar y editar fácilmente datos geográficos. No estoy seguro si tienen una opción para hacer un mapa 'privado'.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.