O que é uma boa API da web Javascript (preferencialmente aberta) para a construção de mapas da web que requerem pouca / nenhuma manutenção?


11

Recentemente, me ofereci para fazer um mapa da web para uma organização local sem fins lucrativos. O mapa será bastante básico. Ele precisa exibir o condado de Lane, Oregon, dividido em vários distritos, com um local de "escritório central" para cada distrito. Planejo construir isso no meu tempo livre durante o verão e quero poder entregar isso a eles com muito pouco risco de precisar de qualquer tipo de manutenção futura.

Criei vários mapas da web usando a API Javascript do ArcGIS com o ArcGIS Server, mas estou planejando aprender uma API diferente, pois essa organização não possui nenhum software ESRI (ou GIS). Eu tenho considerado o OpenLayers / OpenGeo. Um aspecto a ser lembrado é que essa organização não possui / não possui um servidor configurado para hospedar as camadas deste mapa, portanto, não tenho certeza de como armazenar e acessar os dados. JSON talvez?

Atualmente, não estou familiarizado com a maioria das soluções que não são do ArcGIS, portanto, qualquer conselho seria apreciado.

Respostas:


4

Você pode apenas codificar seus recursos em Javascript, como neste exemplo do OpenLayers: http://openlayers.org/dev/examples/vector-features.html . Não há necessidade de se preocupar com mais armazenamento de dados. Claro que isso é apenas uma opção se você tiver poucos recursos para exibir. Mas é uma solução de "um arquivo" que qualquer futuro mantenedor deve ser capaz de descobrir.

Se você pode exportar seus polígonos para o shapefile, o QGIS pode ajudar a "extrair os nós", que você pode usar para criar polígonos em OpenLayers como este:

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

Se você deseja sobrepor esses polígonos sobre o Google Maps ou similar, poderá reprojetar os polígonos para a projeção do Web Mercator primeiro.


Obrigado! Parece que pode ser o que eu preciso, desde que não tenha muitos recursos. Vou testá-lo. Eu só preciso descobrir como exportar minha classe de recurso de polígono de distrito atual para esses valores codificados.
25411 Tanner

1
@ Tanner: Você pode usar GDAL / OGR para converter para GeoJSON. Pelo menos, dê a eles um Cloudmade, Google Maps, Yahoo! Camada base do Maps ou Bing Maps no OpenLayers. Eu odeio soar como se estivesse empurrando ofertas comerciais, mas parece que você está usando a tecnologia aberta por causa da tecnologia aberta. Dê à organização um mapa com aparência decente.
26711 Sean

@ Tanner: Em qual formato você tem os dados do seu distrito?
Subterrâneo

Classe de recurso de polígono do ArcGIS.
26411 Tanner

@ Sean: Obrigado pelo conselho. Vou verificar GDAL / OGR. Como este é um projeto voluntário, este é (espero) um contrato único. Eu não quero ter que voltar a isso. A principal preocupação é criar um mapa da web simples que possa ser hospedado em seu site, que não exija nenhum software de servidor (como o MapServer) e tenha menos probabilidade de quebrar em breve. Se uma camada base comercial / API puder fornecer isso, considerarei isso. No mínimo, provavelmente usarei uma camada de base comercial.
Tanner

10

Para solução de mapeamento de código aberto, você pode considerar o seguinte:

  1. Plataforma de servidor de mapeamento - GeoServer baseado em Java e de código aberto. Funciona bem em muitos ambientes de produção: Check: http://geoserver.org/display/GEOS/Welcome Manuais do utilizador: http://docs.geoserver.org/stable/en/user/

    Outra opção seria o MapServer: http://mapserver.org/

    Confira a comparação: http://www.slideshare.net/novum.limitis/mapserver-vs-geoserver

  2. Lado do cliente - script de página da web. Openlayers é o mais preferível para começar como muitos exemplos e fácil de implementar também. Verifique: http://openlayers.org/ Exemplos: http://openlayers.org/dev/examples/

  3. Dados espaciais: você pode usar os mapas do Google / Yahoo / Bing com base em seus termos e condições e licença. Ou o OpenStreet Maps, que você pode publicar no GeoServer e usá-lo. Mapa do OpenStreet: http://www.openstreetmap.org/ Os arquivos de formato do OpenStreet Map podem ser baixados em: http://wiki.openstreetmap.org/wiki/Shapefiles

Se você for usar os mapas do Google / Yahoo / Bing, poderá usar a API ou o OpenLayers para usá-lo, não sendo necessário o GeoServer e os Dados espaciais. Embora a pergunta feita por uma boa API de mapas da web, a plataforma de mapeamento e a referência de dados espaciais sejam fornecidas acima para refletir sobre a plataforma de mapeamento de código-fonte totalmente aberto.


Tipo o que eu disse, mas é melhor colocar!
usar o seguinte código

3

Eu uso o OpenLayers como parte da minha dissertação do UG e não posso culpá-lo. Bem, eu posso, e fiquei acordado até tarde na noite passada, tentando fazê-lo se comportar, mas isso foi principalmente ignorância da minha parte, ao tentar montar um site otimizado para celular, e não o OL em si.

É fácil adicionar camadas provenientes de outro servidor usando o WMS; Eu tenho o MapServer executando que distribui os blocos WMS e, a partir do OL, apenas 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);

Na verdade, ele pode lidar com servidores WFS e até mesmo WFS-T, e com as camadas de mapa e foto do OSM, Google ou Bing, você pode ter um aplicativo de mapeamento da web bonito e com uma pegada pequena.




2

Tarde demais para a festa, mas achei que acrescentaria outra opção que faria sentido hoje em dia.

Se você não deseja hospedar um servidor, mas ainda deseja se beneficiar do estilo e do armazenamento em cache muito rápido, por que não o Google Fusion Tables e Openlayers ? Do 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);

Você pode usar o gdal para carregar as tabelas de fusão . Dessa forma, você não paga o preço de analisar as geometrias geojson no lado do cliente. Esse custo pode variar de trivial (para pequena quantidade de recursos) a significativo (para grande quantidade de recursos). Também tornará suas geometrias muito


1

Na linha da resposta de @ Sean, aqui está uma pergunta que fiz em outubro passado e a solução. Eu também queria algo que pudesse ser transmitido. No que diz respeito à exibição dos limites do seu distrito, o Fusion Tables poderia fazer isso talvez?


1

CloudMade , Google Maps , Yahoo! Mapas ou Bing Maps . Eventualmente, alguém aparecerá para ajudá-lo em seu site e não terá idéia sobre o OpenLayers ou o GeoJSON. Será muito mais à prova do futuro usar uma oferta comercial bem conhecida. Será mais fácil encontrar alguém que saiba o que fazer com o Google Maps e ele terá uma interface familiar. E ainda é gratuito para sites públicos.

Certifique-se de obter sua própria chave de API.


3
Esta pergunta marcou "código-fonte aberto", sem voto negativo porque você tem o direito de sugerir uma versão comercial. Basta dizer que, com o Google Maps, você precisará atualizar seu código após três anos de privação, forçando-o a continuar desenvolvendo o mesmo APP repetidamente para cada nova versão da API do Google Maps. Depois de desenvolver com os openlayers, você pode auto-hospedar a biblioteca pelo tempo que quiser. Você não precisa se preocupar com alguém apertando um botão que desligará seu serviço.
CaptDragon

1
Não tenho nada contra o código aberto. Muito pelo contrário. Eu posso ter interpretado 'aberto' liberalmente (e não considero as tags restritivas). Para o domínio do problema que ele está abordando, as sugestões para OpenLayers, MapServer, GeoServer, OpenStreetMap etc. são muito mais complicadas tecnicamente do que 99,9% da equipe sem fins lucrativos pode lidar por conta própria. Se ele quiser ajudar a organização, deve dar a eles algo que eles possam consertar ou encontrar facilmente alguém para consertar quando ele se for. O número de pessoas com o Google Maps em seu conjunto de habilidades é significativamente maior e não exigiria nenhum acesso ao servidor organizacional.
25411 Sean

1
Sim, eu não tenho idéia por que as pessoas votam positivamente nas respostas que sugerem o GeoServer e o MapServer quando o solicitante diz especificamente que não pode hospedar nenhum serviço de mapa. : P
CaptDragon

@capdragon: Também ficou claro nas respostas que o GeoServer / MapServer e os dados espaciais são opcionais. Pode ir em frente com OpenLayers sem eles .. Nenhum dano para dar informação extra relvant na resposta para o usuário para conscientizá-los ...
Senthil

@ Senthil: leia-o novamente, e cito: "esta organização não / não terá um servidor configurado para hospedar as camadas deste mapa". Opcional nem sequer é uma palavra na pergunta.
precisa saber é o seguinte

1

Provavelmente vale a pena conferir o CartoDB:

http://cartodb.com/

é um serviço de mapeamento da web liso e gratuito que permite carregar e editar facilmente dados geográficos. Não tenho certeza se eles têm a opção de tornar um mapa "privado".

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.