Co to jest dobry interfejs API JavaScript (najlepiej otwarty) do tworzenia map internetowych wymagających niewielkiej konserwacji?

11

Niedawno zgłosiłem się na ochotnika do stworzenia mapy internetowej dla lokalnej organizacji non-profit. Mapa będzie dość prosta. Musi wyświetlać hrabstwo Lane w stanie Oregon z podziałem na wiele dzielnic, z lokalizacją „centrali” dla każdej dzielnicy. Planuję budować to w wolnym czasie w okresie letnim i chcę być w stanie przekazać je im z bardzo małym ryzykiem konieczności jakiejkolwiek przyszłej konserwacji.

Z ArcGIS Server zbudowałem wiele map internetowych przy użyciu ArcGIS Server API, ale planuję nauczyć się innego API, ponieważ ta organizacja nie ma żadnego oprogramowania ESRI (ani żadnego GIS w tym zakresie). Zastanawiałem się nad OpenLayers / OpenGeo. Należy pamiętać, że ta organizacja nie ma / nie będzie mieć skonfigurowanego serwera do obsługi warstw tej mapy, więc nie jestem pewien, jak przechowuję i uzyskuję dostęp do danych. JSON może?

Obecnie nie znam większości rozwiązań innych niż ArcGIS, więc każda rada byłaby mile widziana.

Garbarz
źródło

Odpowiedzi:

4

Możesz po prostu na stałe zakodować swoje funkcje w JavaScript, tak jak w tym przykładzie OpenLayers: http://openlayers.org/dev/examples/vector-features.html . Nie musisz martwić się o dalsze przechowywanie danych. Oczywiście jest to tylko opcja, jeśli masz niewiele funkcji do wyświetlenia. Ale jest to rozwiązanie „jednoplikowe”, które każdy przyszły opiekun powinien być w stanie zrozumieć.

Jeśli możesz wyeksportować swoje wielokąty do pliku kształtu, QGIS może pomóc „wyodrębnić węzły”, których możesz następnie użyć do utworzenia wielokątów w OpenLayers:

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

Jeśli chcesz nałożyć te wielokąty na Mapy Google lub podobne, możesz najpierw przełożyć wielokąty na projekcję Web Mercator.

podmrok
źródło
Dzięki! Wygląda na to, że może być tym, czego potrzebuję, o ile nie mam zbyt wielu funkcji. Wypróbuję to. Muszę tylko wymyślić, jak wyeksportować moją obecną klasę wielokątów dystryktu do tych zakodowanych wartości.
Tanner,
1
@Tanner: Możesz użyć GDAL / OGR do konwersji na GeoJSON. Przynajmniej daj im Cloudmade, Google Maps, Yahoo! Mapy lub warstwa bazowa Bing Maps w OpenLayers. Nienawidzę brzmieć, jakbym promował oferty komercyjne, ale brzmi to tak, jakbyś korzystał z Open Tech ze względu na Open Tech. Daj organizacji porządnie wyglądającą mapę.
Sean
@Tanner: W jakim formacie masz dane swojego okręgu?
podmroku
Klasa cech wielokąta ArcGIS.
Tanner
@Sean: Dzięki za radę. Sprawdzę GDAL / OGR. Ponieważ jest to projekt wolontariacki, jest to (miejmy nadzieję) jednorazowa umowa. Nie chcę do tego wracać. Głównym problemem jest stworzenie prostej mapy internetowej, która może być hostowana na ich stronie internetowej, która nie będzie wymagała żadnego oprogramowania serwerowego (takiego jak MapServer) i jest najmniej prawdopodobne, że w najbliższym czasie ulegnie awarii. Jeśli komercyjna warstwa bazowa / API może to zapewnić, rozważę to. Przynajmniej prawdopodobnie użyję komercyjnej warstwy bazowej.
Tanner
10

W przypadku rozwiązania do mapowania typu open source można rozważyć:

  1. Platforma serwera mapowania - oparta na Javie GeoServer i oprogramowanie typu open source. Działa dobrze w wielu środowiskach produkcyjnych: Sprawdź: http://geoserver.org/display/GEOS/Welcome Instrukcje użytkownika: http://docs.geoserver.org/stable/en/user/

    Inną opcją byłoby MapServer: http://mapserver.org/

    Sprawdź porównanie: http://www.slideshare.net/novum.limitis/mapserver-vs-geoserver

  2. Po stronie klienta - skrypty strony internetowej. Najbardziej preferowane Openlayery, aby zacząć od wielu przykładów i łatwe do wdrożenia. Sprawdź: http://openlayers.org/ Przykłady: http://openlayers.org/dev/examples/

  3. Dane przestrzenne: możesz korzystać z map Google / Yahoo / Bing w oparciu o ich warunki i licencję. Lub OpenStreet Maps, które możesz opublikować w GeoServer i użyć go. OpenStreet Map: http://www.openstreetmap.org/ Pliki kształtów OpenStreet Map można pobrać przez: http://wiki.openstreetmap.org/wiki/Shapefiles

Jeśli zamierzasz korzystać z map Google / Yahoo / Bing, możesz skorzystać z ich interfejsu API lub OpenLayers, aby z nich korzystać, a GeoServer i dane przestrzenne nie są wymagane. Mimo że zadano pytanie o dobry interfejs API map internetowych, platforma mapowania i odniesienie do danych przestrzennych są podane powyżej, aby myśleć o platformie mapowania w pełni open source.

Senthil
źródło
Trochę to, co powiedziałem, ale lepiej powiedzieć!
MerseyViking,
3

Używam OpenLayers jako części mojej pracy doktorskiej i nie mogę tego winić. Cóż, mogę, i byłem do późnej nocy, próbując sprawić, żeby się zachowywał, ale to była głównie moja ignorancja, gdy próbowałem stworzyć stronę dostosowaną do urządzeń mobilnych, a nie OL jako taką.

Za pomocą WMS łatwo jest dodawać warstwy pochodzące z innego serwera; Mam uruchomiony MapServer, który wykleja kafelki WMS, a od OL po prostu używam:

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

Rzeczywiście, może poradzić sobie z serwerami WFS, a nawet WFS-T, a dzięki OSM, Google lub Bing mapom i warstwom zdjęć możesz mieć dobrze wyglądającą aplikację do mapowania sieci z niewielkim śladem.

MerseyViking
źródło
3

Użyj OpenLayers i YES, jeśli nie możesz zainstalować GeoServera do hostowania twoich warstw mapy, możesz przechowywać dane w GeoJSON lub lokalnych plikach KML , jeśli chcesz.

CaptDragon
źródło
2

Bardzo późno na imprezę, ale pomyślałem, że dodam inną opcję, która miałaby sens w dzisiejszych czasach.

Jeśli nie chcesz hostować serwera, ale nadal chcesz czerpać korzyści ze stylizacji i bardzo szybkiego buforowania kafelków, dlaczego nie Google Fusion Tables and Openlayers ? Z bloga Allana Glenna

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

Możesz użyć gdal, aby załadować tabele syntezy . W ten sposób nie płacisz ceny analizowania geometrii geojson po stronie klienta. Koszt ten może wahać się od trywialnego (w przypadku niewielkiej liczby funkcji) do znacznego (w przypadku dużej liczby funkcji). To również znacznie poprawi twoją geometrię

Ragi Yaser Burhum
źródło
1

Zgodnie z odpowiedzią @ Seana, oto pytanie, które zadałem w październiku zeszłego roku i rozwiązanie. Ja też chciałem coś, co można przekazać. Jeśli chodzi o wyświetlanie granic dystryktu, czy stoły Fusion mogą to zrobić?

Chad Cooper
źródło
1

CloudMade , Google Maps , Yahoo! Mapy lub Mapy Bing . W końcu ktoś przyjdzie, aby pomóc mu w ich witrynie i nie będzie miał pojęcia o OpenLayers lub GeoJSON. Korzystanie ze znanej oferty handlowej będzie znacznie bardziej przyszłościowe. Łatwiej będzie im znaleźć kogoś, kto wie, co zrobić z Mapami Google i będzie miał znajomy interfejs. I wciąż jest bezpłatny dla publicznych witryn.

Upewnij się, że otrzymałeś własny klucz API.

Sean
źródło
3
To pytanie oznaczono jako „open source”, a nie głosowanie w dół, ponieważ masz pełne prawo zaproponować wersję komercyjną. Mówiąc krótko, w przypadku map Google musisz zaktualizować kod po 3 latach deprecjacji, co zmusza Cię do ciągłego opracowywania tej samej aplikacji dla każdej nowej wersji interfejsu Google Maps API. Po opracowaniu w openlayers możesz samodzielnie hostować bibliotekę tak długo, jak chcesz. Nie musisz się martwić, że ktoś przełączy przełącznik, który wyłączy Twoją usługę.
CaptDragon,
1
Nie mam nic przeciwko open-source. Wręcz przeciwnie. Mogłem interpretować słowo „otwarty” w sposób swobodny (i nie traktuję tagów jako ograniczających). Jeśli chodzi o domenę problemową, którą rozwiązuje, sugestie dotyczące OpenLayers, MapServer, GeoServer, OpenStreetMap itp. Są znacznie bardziej skomplikowane technicznie, niż 99,9% pracowników non-profit może sobie poradzić samodzielnie. Jeśli chce pomóc orgie, powinien dać im coś, co mogą naprawić lub łatwo znaleźć kogoś do naprawy, gdy odejdzie. Liczba osób posiadających Mapy Google w swoich umiejętnościach jest znacznie wyższa i nie wymagałaby dostępu do serwera organizacji.
Sean,
1
Tak, NIE mam pojęcia, dlaczego ludzie głosują w górę na odpowiedzi sugerujące GeoServer i MapServer, gdy pytający wyraźnie mówi, że nie może hostować żadnych usług mapowych. : P
CaptDragon,
@capdragon: W odpowiedziach stwierdzono również, że GeoServer / MapServer i dane przestrzenne są opcjonalne. Może bez nich korzystać z Openlayers. Nie ma nic złego w podawaniu dodatkowych odnośnych informacji w odpowiedzi, aby użytkownik wiedział o nich ...
Senthil,
@Senthil: przeczytaj go ponownie i cytuję: „ta organizacja nie ma / nie będzie mieć skonfigurowanego serwera do obsługi warstw tej mapy”. Opcjonalne nie ma nawet słowa w pytaniu.
CaptDragon,
1

Prawdopodobnie warto sprawdzić CartoDB:

http://cartodb.com/

it'a zręczna, bezpłatna usługa mapowania sieci, która pozwala łatwo ładować i edytować dane geograficzne. Nie jestem pewien, czy mają opcję uczynienia mapy „prywatną”.

unicoletti
źródło