Javascript web API ที่ดี (ควรเปิด) สำหรับการสร้างแผนที่บนเว็บที่ต้องการการบำรุงรักษาเพียงเล็กน้อย / ไม่มีเลยคืออะไร?


11

ฉันเพิ่งอาสาทำแผนที่เว็บสำหรับองค์กรไม่แสวงหากำไรในท้องถิ่น แผนที่จะค่อนข้างธรรมดา มันจำเป็นต้องแสดง Lane County, Oregon แบ่งออกเป็นหลาย ๆ อำเภอพร้อมด้วยที่ตั้ง "สำนักงานกลาง" สำหรับแต่ละเขต ฉันวางแผนที่จะสร้างสิ่งนี้ในเวลาว่างในช่วงฤดูร้อนและฉันต้องการที่จะมอบสิ่งเหล่านี้ให้กับพวกเขาโดยที่มีความเสี่ยงน้อยมากที่จะต้องมีการบำรุงรักษาในอนาคต

ฉันสร้างแผนที่เว็บจำนวนมากโดยใช้ ArcGIS Javascript API กับ ArcGIS Server แต่ฉันวางแผนที่จะเรียนรู้ API อื่นเนื่องจากองค์กรนี้ไม่มีซอฟต์แวร์ ESRI (หรือ GIS ใด ๆ สำหรับเรื่องนั้น) ฉันกำลังพิจารณา OpenLayers / OpenGeo สิ่งหนึ่งที่ต้องจำไว้คือองค์กรนี้ไม่มี / ไม่มีเซิร์ฟเวอร์ที่ตั้งไว้เพื่อโฮสต์เลเยอร์ของแผนที่นี้ดังนั้นฉันไม่แน่ใจว่าจะเก็บและเข้าถึงข้อมูลได้อย่างไร บางที JSON

ขณะนี้ฉันไม่คุ้นเคยกับโซลูชันที่ไม่ใช่ ArcGIS ส่วนใหญ่ดังนั้นคำแนะนำใด ๆ จะได้รับการชื่นชม

คำตอบ:


4

คุณสามารถเพียงแค่ยากรหัสคุณสมบัติของคุณลงใน Javascript เช่นในตัวอย่าง OpenLayers นี้: http://openlayers.org/dev/examples/vector-features.html ไม่จำเป็นต้องกังวลเกี่ยวกับการจัดเก็บข้อมูลเพิ่มเติม แน่นอนว่านี่เป็นเพียงตัวเลือกหากคุณมีคุณสมบัติบางอย่างที่จะแสดง แต่มันเป็นโซลูชัน "ไฟล์เดียว" ซึ่งผู้ดูแลในอนาคตควรจะสามารถเข้าใจได้

หากคุณสามารถส่งออกรูปหลายเหลี่ยมเป็นรูปร่างไฟล์ QGIS สามารถช่วยในการ "แตกโหนด" ซึ่งคุณสามารถใช้เพื่อสร้างรูปหลายเหลี่ยมใน 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]));

หากคุณต้องการวางซ้อนรูปหลายเหลี่ยมเหล่านั้นที่ด้านบนของ Google Maps หรือที่คล้ายกันคุณอาจต้องการปฏิเสธรูปหลายเหลี่ยมไปยังการฉายบน Web Mercator ก่อน


ขอบคุณ! ดูเหมือนว่าอาจเป็นสิ่งที่ฉันต้องการตราบใดที่ฉันไม่มีคุณสมบัติมากเกินไป ฉันจะลองดู ฉันแค่ต้องคิดหาวิธีการส่งออกคลาสรูปหลายเหลี่ยม District ปัจจุบันของฉันไปยังค่าที่กำหนดรหัสยากเหล่านี้
แทนเนอร์

1
@Tanner: คุณสามารถใช้ GDAL / OGR เพื่อแปลงเป็น GeoJSON อย่างน้อยก็ให้ Cloudmade, Google Maps, Yahoo! เลเยอร์พื้นฐานของ Maps หรือ Bing Maps ใน OpenLayers ฉันเกลียดที่จะฟังดูเหมือนว่าฉันกำลังผลักดันข้อเสนอทางการค้า แต่ดูเหมือนว่าคุณกำลังใช้เทคโนโลยีเปิดเพื่อประโยชน์ของเทคโนโลยีเปิด ให้แผนที่ดูดี
ฌอน

@Tanner: คุณมีข้อมูลเขตในรูปแบบใด
underdark

คลาสคุณลักษณะรูปหลายเหลี่ยม ArcGIS
แทนเนอร์

@Sean: ขอบคุณสำหรับคำแนะนำ ฉันจะตรวจสอบ GDAL / OGR เนื่องจากเป็นโครงการอาสาสมัครนี่เป็นข้อตกลงครั้งเดียว (หวังว่า) ฉันไม่ต้องการที่จะกลับมา ข้อกังวลหลักคือการทำแผนที่เว็บแบบง่ายที่สามารถโฮสต์บนเว็บไซต์ของพวกเขาที่ไม่ต้องใช้ซอฟต์แวร์เซิร์ฟเวอร์ใด ๆ (เช่น MapServer) และมีโอกาสน้อยที่จะทำให้เสียเวลาเร็ว ๆ นี้ หากเลเยอร์ฐานการค้า / API สามารถให้สิ่งนี้ได้ฉันจะพิจารณา อย่างน้อยที่สุดฉันน่าจะใช้เลเยอร์ฐานการค้า
แทนเนอร์

10

สำหรับโซลูชันการแมปโอเพนซอร์สคุณสามารถพิจารณาได้ดังต่อไปนี้:

  1. แพลตฟอร์มเซิร์ฟเวอร์ Mapping - GeoServer Java และโอเพนซอร์ส ทำงานได้ดีในสภาพแวดล้อมการผลิตที่หลากหลาย: ตรวจสอบ: http://geoserver.org/display/GEOS/ คู่มือผู้ใช้ยินดีต้อนรับ: http://docs.geoserver.org/stable/en/user/

    ตัวเลือกอื่น ๆ จะเป็น MapServer: http://mapserver.org/

    ตรวจสอบการเปรียบเทียบ: http://www.slideshare.net/novum.limitis/mapserver-vs-geoserver

  2. ฝั่งไคลเอ็นต์ - การเขียนสคริปต์หน้าเว็บ Openlayers เป็นที่นิยมมากที่สุดที่จะเริ่มต้นเป็นตัวอย่างจำนวนมากและใช้งานง่ายเช่นกัน ตรวจสอบ: http://openlayers.org/ ตัวอย่าง: http://openlayers.org/dev/examples/

  3. ข้อมูลเชิงพื้นที่: คุณสามารถไปกับแผนที่ Google / Yahoo / Bing ได้ตามข้อกำหนดและเงื่อนไขและใบอนุญาต หรือ OpenStreet Maps ซึ่งคุณสามารถเผยแพร่ใน GeoServer และใช้งานได้ OpenStreet Map: http://www.openstreetmap.org/ ไฟล์รูปร่าง OpenStreet Map สามารถดาวน์โหลดได้ที่: http://wiki.openstreetmap.org/wiki/Shapefiles

หากคุณกำลังจะใช้แผนที่ Google / Yahoo / Bing คุณสามารถใช้ API หรือ OpenLayers เพื่อใช้งานและไม่ต้องใช้ GeoServer และ Spatial Data แม้ว่าคำถามจะถามถึง API แผนที่เว็บที่ดี แต่แพลตฟอร์มการแมปและการอ้างอิงข้อมูลเชิงพื้นที่นั้นถูกให้ไว้ข้างต้นนอกจากนี้ให้คิดเกี่ยวกับแพลตฟอร์มการแมปโอเพ่นซอร์สอย่างสมบูรณ์


ค่อนข้างดีที่ฉันพูด แต่ดีกว่า!
MerseyViking

3

ฉันใช้ OpenLayers เป็นส่วนหนึ่งของวิทยานิพนธ์ UG ของฉันและฉันไม่สามารถทำผิดได้ ฉันทำได้แล้วและฉันก็ตื่นสายจนเมื่อคืนที่ผ่านมาพยายามทำตัวให้ดี แต่นั่นก็เป็นส่วนที่ฉันไม่รู้เมื่อพยายามที่จะรวบรวมเว็บไซต์ที่เหมาะกับอุปกรณ์พกพาแทนที่จะเป็น OL ต่อ se

เพิ่มเลเยอร์ที่มาจากเซิร์ฟเวอร์อื่นโดยใช้ WMS ได้ง่าย ฉันมี MapServer ที่ใช้แผ่น WMS และจาก OL ฉันใช้:

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

แน่นอนว่ามันสามารถรับมือกับ WFS และแม้กระทั่งเซิร์ฟเวอร์ WFS-T และด้วย OSM, Google, หรือแผนที่และเลเยอร์ภาพคุณสามารถมีแอพพลิเคชั่นการทำแผนที่บนเว็บที่ดูดีด้วยรอยเท้าเล็ก ๆ



2

มีตัวเลือกที่ดีมากมายสำหรับองค์กรที่ไม่แสวงหาผลกำไร Bing และ Google Maps สามารถใช้กับองค์กรที่ไม่แสวงหาผลกำไรได้

บทสรุปที่ดีอยู่ที่นี่: Google Maps - http://www.georelated.com/2012/02/cloud-web-map-api-services-reviewed.html Bing Maps - http://www.georelated.com/2012 /02/cloud-web-map-api-services-reviewed_19.html


2

ปาร์ตี้สุดช้า แต่ฉันคิดว่าฉันจะเพิ่มตัวเลือกอื่นที่เหมาะสมในทุกวันนี้

หากคุณไม่ต้องการโฮสต์เซิร์ฟเวอร์ แต่คุณยังต้องการได้รับประโยชน์จากการจัดแต่งทรงผมและการแคชไทล์ที่รวดเร็วมากทำไมไม่ลองGoogle Fusion TablesและOpenlayers ? จากบล็อกของ 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);

คุณสามารถใช้ GDAL โหลดตารางฟิวชั่น ด้วยวิธีนี้คุณไม่ต้องจ่ายราคาของการแยกวิเคราะห์ geojson geometries ในฝั่งไคลเอ็นต์ ค่าใช้จ่ายนี้อาจมีตั้งแต่เล็กน้อย (สำหรับคุณสมบัติจำนวนเล็กน้อย) ไปจนถึงจำนวนมาก (สำหรับคุณสมบัติจำนวนมาก) มันจะทำให้รูปทรงของคุณมาก


1

ตามคำตอบของ @ Sean ต่อไปนี้เป็นคำถามที่ฉันโพสต์เมื่อเดือนตุลาคมปีที่แล้วและการแก้ปัญหา ฉันก็ต้องการบางสิ่งที่สามารถผ่านไปได้ เท่าที่แสดงขอบเขตเขตของคุณ Fusion Tables สามารถทำเช่นนั้นได้หรือไม่?


1

CloudMade , Google Maps , Yahoo! MapsหรือBing Maps ในที่สุดใครบางคนก็จะเข้ามาช่วยพวกเขาในเว็บไซต์และจะไม่มีข้อมูลเกี่ยวกับ OpenLayers หรือ GeoJSON มันจะเป็นหลักฐานในอนาคตที่จะใช้ข้อเสนอเชิงพาณิชย์ที่มีชื่อเสียง มันจะง่ายขึ้นสำหรับพวกเขาที่จะหาคนที่รู้ว่าจะทำอย่างไรกับ Google Maps และจะมีส่วนต่อประสานที่คุ้นเคย และยังฟรีสำหรับไซต์สาธารณะ

ตรวจสอบให้แน่ใจว่าคุณได้รับรหัส API ของตัวเอง


3
คำถามนี้ติดแท็ก "โอเพ่นซอร์ส" ไม่ใช่การลงคะแนนเนื่องจากคุณมีสิทธิ์ที่จะแนะนำเวอร์ชันเชิงพาณิชย์ แค่บอกว่าด้วยแผนที่ google คุณจะต้องอัปเกรดรหัสของคุณหลังจาก 3 ปีที่จะถูกบังคับให้คุณพัฒนาแอพเดียวกันซ้ำแล้วซ้ำอีกเรื่อย ๆ สำหรับ google maps รุ่นใหม่ทุกครั้ง เมื่อคุณพัฒนาด้วย openlayers คุณสามารถโฮสต์ไลบรารีเองได้นานเท่าที่คุณต้องการ คุณไม่ต้องกังวลเกี่ยวกับการพลิกสวิตช์ซึ่งจะปิดบริการของคุณ
CaptDragon

1
ฉันไม่มีอะไรกับโอเพนซอร์ซ ค่อนข้างตรงกันข้าม ฉันอาจตีความ 'เปิด' อย่างอิสระ (และฉันไม่ได้ใช้แท็กเป็นข้อ จำกัด ) สำหรับโดเมนปัญหาที่เขากล่าวถึงคำแนะนำสำหรับ OpenLayers, MapServer, GeoServer, OpenStreetMap ฯลฯ นั้นซับซ้อนกว่าในทางเทคนิคมากกว่า 99.9% ของพนักงานที่ไม่แสวงหาผลกำไรสามารถจัดการได้ด้วยตนเอง หากเขาต้องการช่วยองค์กรเขาควรให้สิ่งที่พวกเขาสามารถแก้ไขได้หรือหาคนที่จะแก้ไขได้อย่างง่ายดายเมื่อเขาจากไป จำนวนคนที่มี Google แผนที่ในทักษะของพวกเขานั้นสูงขึ้นอย่างมากและไม่ต้องการการเข้าถึงเซิร์ฟเวอร์องค์กร
ฌอน

1
ใช่ฉันไม่รู้ว่าทำไมผู้คนถึงโหวตคำตอบที่แนะนำ GeoServer & MapServer เมื่อผู้ถามบอกว่าเขาไม่สามารถโฮสต์บริการแผนที่ได้ : P
CaptDragon

@capdragon: มันระบุไว้อย่างชัดเจนในคำตอบด้วยเช่นกันว่า GeoServer / MapServer และข้อมูลเชิงพื้นที่เป็นตัวเลือก สามารถไปข้างหน้ากับ Openlayers โดยที่พวกเขา .. ไม่มีอันตรายที่จะให้ข้อมูล relvant พิเศษในคำตอบให้กับผู้ใช้ที่จะตระหนักถึงพวกเขา ...
Senthil

@Senthil: อ่านอีกครั้งและฉันพูด: "องค์กรนี้ไม่ได้ / จะไม่มีเซิร์ฟเวอร์ตั้งค่าให้เป็นเจ้าภาพเลเยอร์ของแผนที่นี้" ไม่บังคับแม้แต่คำเดียวในคำถาม
CaptDragon

1

อาจคุ้มค่าที่จะลองใช้ CartoDB:

http://cartodb.com/

เป็นบริการแผนที่เว็บฟรีที่ช่วยให้คุณสามารถโหลดและแก้ไขข้อมูลทางภูมิศาสตร์ได้อย่างง่ายดาย ฉันไม่แน่ใจว่าพวกเขามีตัวเลือกในการสร้างแผนที่เป็น "ส่วนตัว" หรือไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.