Qu'est-ce qu'une bonne API Web Javascript (de préférence ouverte) pour créer des cartes Web qui nécessitent peu ou pas de maintenance?

11

J'ai récemment proposé de créer une carte Web pour un organisme sans but lucratif local. La carte sera assez basique. Il doit afficher le comté de Lane, en Oregon, divisé en plusieurs districts, avec un emplacement de «bureau central» pour chaque district. Je prévois de le construire pendant mon temps libre au cours de l'été, et je veux pouvoir leur remettre cela avec très peu de risques qu'il ait besoin d'une quelconque maintenance future.

J'ai construit un certain nombre de cartes Web à l'aide de l'API ArcGIS Javascript avec ArcGIS Server, mais je prévois d'apprendre une autre API car cette organisation ne dispose d'aucun logiciel ESRI (ni d'aucun SIG d'ailleurs). J'ai envisagé OpenLayers / OpenGeo. Une chose à garder à l'esprit est que cette organisation n'a pas / n'aura pas de serveur configuré pour héberger les couches de cette carte, donc je ne sais pas comment je stockerais et accèderais aux données. JSON peut-être?

Je ne connais actuellement pas la plupart des solutions non ArcGIS, donc tout conseil serait apprécié.

Tanneur
la source

Réponses:

4

Vous pouvez simplement coder en dur vos fonctionnalités en Javascript comme dans cet exemple OpenLayers: http://openlayers.org/dev/examples/vector-features.html . Pas besoin de se soucier du stockage de données supplémentaire. Bien sûr, ce n'est qu'une option si vous avez peu de fonctionnalités à afficher. Mais c'est une solution "à un fichier" que tout futur responsable devrait être en mesure de comprendre.

Si vous pouvez exporter vos polygones vers un fichier de formes, QGIS peut vous aider à "extraire les nœuds" que vous pouvez ensuite utiliser pour créer des polygones dans OpenLayers comme ceci:

// 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 vous souhaitez superposer ces polygones au-dessus de Google Maps ou similaire, vous pouvez d'abord reprojeter les polygones à la projection Web Mercator.

obscur
la source
Merci! On dirait que cela pourrait être ce dont j'ai besoin, tant que je n'ai pas trop de fonctionnalités. Je vais l'essayer. J'ai juste besoin de comprendre comment exporter ma classe d'entités surfaciques de district actuelle dans ces valeurs codées en dur.
Tanner
1
@Tanner: Vous pouvez utiliser GDAL / OGR pour convertir en GeoJSON. Donnez-leur au moins un Cloudmade, Google Maps, Yahoo! Cartes ou couche de base Bing Maps dans OpenLayers. Je déteste donner l'impression de pousser des offres commerciales, mais il semble que vous utilisiez la technologie ouverte pour le bien de la technologie ouverte. Donnez à l'organisation une carte décente.
Sean
@Tanner: Dans quel format avez-vous les données de votre district?
underdark
Classe d'entités surfaciques ArcGIS.
Tanner le
@Sean: Merci pour les conseils. Je vais vérifier GDAL / OGR. Comme il s'agit d'un projet bénévole, il s'agit (espérons-le) d'un accord unique. Je ne veux pas avoir à y revenir. La principale préoccupation est de créer une simple carte Web pouvant être hébergée sur leur site Web qui ne nécessite aucun logiciel serveur (comme MapServer) et qui est le moins susceptible de se casser de sitôt. Si une couche de base / API commerciale peut fournir cela, je le considérerai. À tout le moins, j'utiliserai probablement une couche de base commerciale.
Tanner
10

Pour une solution de cartographie open source, vous pouvez envisager les éléments suivants:

  1. Mapping Server Platform - GeoServer basé sur Java et open source. Fonctionne bien dans de nombreux environnements de production: Vérifiez: http://geoserver.org/display/GEOS/Welcome Manuels d'utilisation: http://docs.geoserver.org/stable/en/user/

    Une autre option serait MapServer: http://mapserver.org/

    Vérifiez la comparaison: http://www.slideshare.net/novum.limitis/mapserver-vs-geoserver

  2. Côté client - création de scripts de page Web. Openlayers le plus préférable pour commencer autant d'exemples et facile à mettre en œuvre. Vérifier: http://openlayers.org/ Exemples: http://openlayers.org/dev/examples/

  3. Données spatiales: vous pouvez utiliser des cartes Google / Yahoo / Bing en fonction de leurs conditions générales et de leur licence. Ou OpenStreet Maps que vous pouvez publier dans GeoServer et l'utiliser. OpenStreet Map: http://www.openstreetmap.org/ Les fichiers de formes d'OpenStreet Map peuvent être téléchargés via: http://wiki.openstreetmap.org/wiki/Shapefiles

Si vous souhaitez utiliser des cartes Google / Yahoo / Bing, vous pouvez utiliser leur API ou OpenLayers pour l'utiliser et GeoServer et les données spatiales ne sont pas nécessaires. Même si la question demandait une bonne API de carte Web, la plate-forme de cartographie et la référence de données spatiales sont données ci-dessus pour penser à une plate-forme de cartographie entièrement open source.

Senthil
la source
Un peu ce que j'ai dit, mais mieux vaut!
MerseyViking
3

J'utilise OpenLayers dans le cadre de ma thèse UG, et je ne peux rien lui reprocher. Eh bien, je le peux, et j'étais debout jusqu'à tard hier soir pour essayer de le faire fonctionner, mais c'était surtout de l'ignorance de ma part lorsque j'essayais de créer un site adapté aux mobiles plutôt que l'OL en soi.

Il est facile d'ajouter des couches provenant d'un autre serveur utilisant WMS; J'ai MapServer en cours d'exécution qui distribue des tuiles WMS, et de OL j'utilise simplement:

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);

En effet, il peut faire face aux serveurs WFS et même WFS-T, et avec les couches de cartes et de photos OSM, Google ou Bing, vous pouvez avoir une belle application de cartographie Web avec une petite empreinte.

MerseyViking
la source
3

Utilisez OpenLayers et YES si vous ne pouvez pas installer GeoServer pour héberger vos couches de carte, vous pouvez stocker les données dans GeoJSON ou des fichiers KML locaux si vous le souhaitez.

CaptDragon
la source
2

Super tard pour la fête, mais j'ai pensé que j'ajouterais une autre option qui aurait du sens de nos jours.

Si vous ne souhaitez pas héberger un serveur mais que vous souhaitez quand même bénéficier d'un style et d'une mise en cache de tuiles très rapides, pourquoi pas Google Fusion Tables et Openlayers ? Sur le blog d'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);

Vous pouvez utiliser gdal pour charger les tables de fusion . De cette façon, vous ne payez pas le prix de l'analyse des géométries geojson côté client. Ce coût peut varier de trivial (pour une petite quantité de fonctionnalités) à important (pour une grande quantité de fonctionnalités). Cela rendra également vos géométries beaucoup

Ragi Yaser Burhum
la source
1

Dans le sens de la réponse de @ Sean, voici une question que j'ai posée en octobre dernier et la solution. Moi aussi, je voulais quelque chose qui pouvait être transmis. En ce qui concerne l'affichage des limites de votre district, Fusion Tables pourrait-il le faire peut-être?

Chad Cooper
la source
1

CloudMade , Google Maps , Yahoo! Cartes ou cartes Bing . Finalement, quelqu'un viendra les aider avec leur site Web et n'aura aucune idée d'OpenLayers ou de GeoJSON. Il sera beaucoup plus pérenne d'utiliser une offre commerciale bien connue. Il leur sera plus facile de trouver quelqu'un qui sait quoi faire avec Google Maps et il aura une interface familière. Et, il est toujours gratuit pour les sites accessibles au public.

Assurez-vous de leur fournir leur propre clé API.

Sean
la source
3
Cette question étiquetée "open-source", pas un vote à la baisse parce que vous avez le droit de suggérer une version commerciale. Je veux juste dire qu'avec google maps, vous devrez mettre à jour votre code après 3 ans de privation, ce qui vous obligera à continuer de développer la même application encore et encore pour chaque nouvelle version de l'api google maps. Une fois que vous avez développé avec openlayers, vous pouvez auto-héberger la bibliothèque aussi longtemps que vous le souhaitez. Vous n'avez pas à vous soucier de quiconque actionne un interrupteur qui désactivera votre service.
CaptDragon
1
Je n'ai rien contre l'open-source. Plutôt l'inverse. J'ai peut-être interprété libéralement «ouvert» (et je ne considère pas les balises comme restrictives). Pour le domaine problématique qu'il aborde, cependant, les suggestions pour OpenLayers, MapServer, GeoServer, OpenStreetMap, etc. sont bien plus compliquées techniquement que 99,9% du personnel à but non lucratif peut gérer seul. S'il veut aider l'organisation, il devrait leur donner quelque chose qu'ils peuvent réparer ou trouver facilement quelqu'un à réparer quand il sera parti. Le nombre de personnes avec Google Maps dans leur ensemble de compétences est considérablement plus élevé et ne nécessiterait aucun accès au serveur d'organisation.
Sean
1
Ouais, je n'ai AUCUNE idée pourquoi les gens votent pour les réponses qui suggèrent GeoServer & MapServer lorsque le demandeur dit spécifiquement qu'il ne peut pas héberger de services de carte. : P
CaptDragon
@capdragon: Il est également clairement indiqué dans les réponses que GeoServer / MapServer et les données spatiales sont facultatifs. Peut aller de l'avant avec Openlayers sans eux .. Pas de mal à donner des informations supplémentaires pertinentes dans la réponse à l'utilisateur pour les connaître ...
Senthil
@Senthil: relisez-le, et je cite: "cette organisation n'a / n'aura pas de serveur configuré pour héberger les couches de cette carte". Facultatif n'est même pas un mot dans la question.
CaptDragon
1

Cela vaut probablement la peine de consulter CartoDB:

http://cartodb.com/

C'est un service de cartographie Web simple et gratuit qui vous permet de charger et de modifier facilement des données géographiques. Je ne sais pas s'ils ont la possibilité de rendre une carte «privée».

unicoletti
la source