Apa itu API web Javascript yang bagus (lebih disukai terbuka) untuk membuat peta web yang membutuhkan sedikit / tanpa perawatan?


11

Baru-baru ini saya mengajukan diri untuk membuat peta web untuk nirlaba lokal. Peta akan sangat mendasar. Perlu menampilkan Lane county, Oregon dibagi menjadi beberapa distrik, dengan lokasi "kantor pusat" untuk setiap distrik. Saya berencana untuk membangun ini di waktu luang saya selama musim panas, dan saya ingin dapat memberikan ini kepada mereka dengan risiko yang sangat kecil dari itu memerlukan segala jenis pemeliharaan di masa depan.

Saya telah membangun sejumlah peta web menggunakan ArcGIS Javascript API dengan ArcGIS Server, tetapi saya berencana mempelajari API yang berbeda karena organisasi ini tidak memiliki perangkat lunak ESRI (atau GIS dalam hal ini). Saya telah mempertimbangkan OpenLayers / OpenGeo. Satu hal yang perlu diingat adalah bahwa organisasi ini tidak / tidak akan memiliki server yang diatur untuk meng-host lapisan peta ini jadi saya tidak yakin bagaimana saya akan menyimpan dan mengakses data. JSON mungkin?

Saat ini saya tidak terbiasa dengan sebagian besar solusi non-ArcGIS, jadi saran apa pun akan dihargai.

Jawaban:


4

Anda bisa meng-hard-code fitur-fitur Anda ke Javascript seperti pada contoh OpenLayers ini: http://openlayers.org/dev/examples/vector-features.html . Tidak perlu repot tentang penyimpanan data selanjutnya. Tentu saja ini hanya opsi jika Anda memiliki beberapa fitur untuk ditampilkan. Tetapi ini adalah solusi "satu-file" yang harus dipecahkan oleh pengelola mana pun di masa mendatang.

Jika Anda dapat mengekspor poligon Anda ke shapefile, QGIS dapat membantu untuk "mengekstrak node" yang kemudian dapat Anda gunakan untuk membuat Poligon di OpenLayers seperti ini:

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

Jika Anda ingin overlay poligon di atas Google Maps atau yang serupa, Anda mungkin ingin memproyeksikan ulang poligon ke proyeksi Web Mercator terlebih dahulu.


Terima kasih! Ini sepertinya itu yang saya butuhkan, selama saya tidak memiliki terlalu banyak fitur. Saya akan mencobanya. Saya hanya perlu mencari cara untuk mengekspor kelas fitur poligon District saya saat ini ke nilai-nilai yang dikodekan.
Tanner

1
@Tanner: Anda dapat menggunakan GDAL / OGR untuk mengonversi ke GeoJSON. Setidaknya, beri mereka Cloudmade, Google Maps, Yahoo! Peta atau lapisan dasar Peta Bing di OpenLayers. Saya benci terdengar seperti saya mendorong penawaran komersial tetapi sepertinya Anda menggunakan teknologi Terbuka demi teknologi Terbuka. Berikan organisasi yang tampak layak peta.
Sean

@Tanner: Di format mana Anda menyimpan data distrik Anda?
underdark

Kelas fitur poligon ArcGIS.
Tanner

@Sean: Terima kasih atas sarannya. Saya akan periksa GDAL / OGR. Karena ini adalah proyek sukarela, ini (semoga) merupakan kesepakatan satu kali. Saya tidak mau harus kembali ke sana. Perhatian utama adalah membuat peta web sederhana yang dapat di-host di situs web mereka yang tidak akan memerlukan perangkat lunak server apa pun (seperti MapServer) dan kecil kemungkinannya akan pecah dalam waktu dekat. Jika lapisan dasar / API komersial dapat menyediakan ini, saya akan mempertimbangkannya. Paling tidak saya kemungkinan akan menggunakan lapisan dasar komersial.
Tanner

10

Untuk solusi pemetaan sumber terbuka, Anda dapat mempertimbangkan hal berikut:

  1. Mapping Server Platform - GeoServer berbasis Java dan open source. Berfungsi dengan baik di banyak lingkungan produksi: Periksa: http://geoserver.org/display/GEOS/Welcome manual pengguna: http://docs.geoserver.org/stable/en/user/

    Opsi lain adalah MapServer: http://mapserver.org/

    Periksa perbandingan: http://www.slideshare.net/novum.limitis/mapserver-vs-geoserver

  2. Sisi klien - skrip halaman web. Openlayers yang paling disukai untuk memulai sebagai banyak contoh dan juga mudah diimplementasikan. Periksa: http://openlayers.org/ Contoh: http://openlayers.org/dev/examples/

  3. Data Spasial: Anda bisa menggunakan peta Google / Yahoo / Bing berdasarkan syarat dan ketentuan dan lisensi mereka. Atau OpenStreet Maps yang dapat Anda terbitkan di GeoServer dan menggunakannya. OpenStreet Map: http://www.openstreetmap.org/ File bentuk OpenStreet Map dapat diunduh melalui: http://wiki.openstreetmap.org/wiki/Shapefiles

Jika Anda akan menggunakan peta Google / Yahoo / Bing, Anda bisa menggunakan API atau OpenLayers untuk menggunakannya dan GeoServer dan Data Spasial tidak diperlukan. Meskipun pertanyaan meminta API peta web yang bagus, platform pemetaan dan referensi data spasial diberikan di atas sebagai tambahan untuk memikirkan platform pemetaan sumber terbuka penuh.


Agak apa yang saya katakan, tetapi lebih baik dimasukkan!
MerseyViking

3

Saya menggunakan OpenLayers sebagai bagian dari disertasi UG saya, dan saya tidak bisa menyalahkannya. Ya saya bisa, dan saya bangun sampai larut malam mencoba membuatnya berperilaku, tapi itu sebagian besar ketidaktahuan saya ketika mencoba untuk membuat sebuah situs yang ramah mobile daripada OL per se.

Sangat mudah untuk menambahkan lapisan yang berasal dari server lain menggunakan WMS; Saya memiliki MapServer yang menjalankan ubin WMS, dan dari OL saya hanya menggunakan:

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

Memang, itu dapat mengatasi WFS dan bahkan server WFS-T, dan dengan OSM, Google, atau Bing map dan lapisan foto, Anda dapat memiliki aplikasi pemetaan web yang bagus dengan jejak kecil.




2

Sangat terlambat ke pesta, tapi saya pikir saya akan menambahkan opsi lain yang masuk akal saat ini.

Jika Anda tidak ingin meng-host server tetapi Anda masih ingin mendapatkan keuntungan dari penataan dan caching ubin yang sangat cepat, mengapa tidak Google Fusion Tables dan Openlayers ? Dari blog 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);

Anda dapat menggunakan gdal untuk memuat tabel fusion . Dengan begitu, Anda tidak perlu membayar parsing geometri geojson di sisi klien. Biaya ini dapat berkisar dari sepele (untuk sejumlah kecil fitur) hingga signifikan (untuk sejumlah besar fitur). Ini juga akan membuat banyak geometri Anda


1

Sejalan dengan jawaban @ Sean, berikut adalah pertanyaan yang saya ajukan Oktober lalu dan solusinya. Saya juga menginginkan sesuatu yang bisa diwariskan. Sejauh menampilkan batas-batas distrik Anda, bisakah Fusion Tables melakukan itu mungkin?


1

CloudMade , Google Maps , Yahoo! Maps atau Bing Maps . Akhirnya, seseorang akan datang untuk membantu mereka dengan situs web mereka dan tidak akan memiliki petunjuk tentang OpenLayers atau GeoJSON. Akan jauh lebih bukti di masa depan untuk menggunakan penawaran komersial yang terkenal. Akan lebih mudah bagi mereka untuk menemukan seseorang yang tahu apa yang harus dilakukan dengan Google Maps dan itu akan memiliki antarmuka yang akrab. Dan, masih gratis untuk situs-situs yang menghadap publik.

Pastikan Anda mendapatkannya kunci API mereka sendiri.


3
Pertanyaan ini ditandai "open-source", bukan pemungutan suara karena Anda memiliki hak untuk menyarankan versi komersial. Hanya dengan mengatakan, dengan google maps Anda harus memperbarui kode Anda setelah 3 tahun dipecat memaksa Anda untuk terus mengembangkan aplikasi yang sama berulang-ulang untuk setiap versi baru dari google maps api. Setelah Anda mengembangkan dengan openlayers, Anda dapat meng-host perpustakaan sendiri selama yang Anda mau. Anda tidak perlu khawatir siapa pun yang membalik sakelar yang akan mematikan layanan Anda.
CaptDragon

1
Saya tidak menentang open-source. Justru sebaliknya. Saya mungkin telah menafsirkan 'terbuka' secara bebas (dan saya tidak menganggap tag sebagai batasan). Namun, untuk domain masalah yang ia tangani, saran untuk OpenLayers, MapServer, GeoServer, OpenStreetMap, dll. Jauh lebih rumit secara teknis daripada 99,9% yang dapat ditangani oleh staf nirlaba sendiri. Jika dia ingin membantu org, dia harus memberi mereka sesuatu yang dapat mereka perbaiki atau dengan mudah menemukan seseorang untuk diperbaiki ketika dia pergi. Jumlah orang dengan Google Maps di dalam keahlian mereka jauh lebih tinggi dan tidak akan memerlukan akses server org.
Sean

1
Ya saya tidak tahu mengapa orang-orang memilih-up jawaban yang menyarankan GeoServer & MapServer ketika penanya secara khusus mengatakan dia tidak bisa meng-host layanan peta. : P
CaptDragon

@capdragon: Dinyatakan dengan jelas dalam jawaban juga bahwa GeoServer / MapServer dan data spasial adalah opsional. Dapat melanjutkan dengan Openlayers tanpa mereka .. Tidak ada salahnya untuk memberikan informasi tambahan relawan dalam jawaban bagi pengguna untuk menyadarinya ...
Senthil

@Senthil: bacalah lagi, dan saya kutip: "organisasi ini tidak / tidak akan memiliki server yang diatur untuk meng-host lapisan peta ini". Opsional bahkan bukan kata dalam pertanyaan.
CaptDragon

1

Mungkin patut untuk memeriksa CartoDB:

http://cartodb.com/

ini adalah layanan pemetaan web gratis yang apik yang memungkinkan Anda untuk dengan mudah memuat dan mengedit data geografis. Saya tidak yakin apakah mereka memiliki opsi untuk membuat peta 'pribadi'.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.