ไลบรารีเพื่อเรนเดอร์แผนที่แบบเวกเตอร์ในเบราว์เซอร์


13

มีไลบรารี JavaScript แบบโอเพ่นซอร์สเช่น Leaflet หรือ OpenLayers ซึ่งสามารถใช้ในเว็บหรือแอปพลิเคชันมือถือและโหลดแผนที่แบบเวกเตอร์แทนภาพหรือไม่? ฉันต้องการข้อมูลถนนและ POI บางแห่งเท่านั้น

ไลบรารีเดียวที่ฉันพบคือpolymaps - แต่ฉันยังต้องการเซิร์ฟเวอร์หรือบริการที่ให้บริการข้อมูล SVG แบบเวกเตอร์ (ดีกว่าจาก OpenStreetMap) นอกจากนี้ยังมีโครงการ Android ที่ดีที่เรียกว่าMapsforgeแต่ฉันต้องการมันสำหรับเว็บแอปพลิเคชันหรืออุปกรณ์มือถืออื่น ๆ

คำตอบ:



10

สำหรับแค่การวาดเวกเตอร์LeafletหรือOpenLayersก็ทำได้ดี ไม่มีอะไรใหม่ที่นั่น

สำหรับเวกเตอร์กระเบื้องแผนที่ (เช่นความละเอียดที่แตกต่างกัน / ระดับของรายละเอียดในระดับที่แตกต่างกันซูม) TileStacheเป็นเซิร์ฟเวอร์ที่ง่ายและดี ฉันใช้กับการทดลองกับ Polymaps จำนวนมาก (AFAIK โปรแกรมดูเวกเตอร์แบบไทล์ js แบบปูกระเบื้องที่ใช้งานทั่วไปเท่านั้น) บางคนใช้OpenLayers เพื่อเพิ่มการสนับสนุนเวกเตอร์แบบเรียงต่อกัน แต่ AFAIK มันไม่ได้รวมเข้ากับลำตัวในหนึ่งปีดังนั้นมันอาจจะไม่เกิดขึ้นในอนาคตอันใกล้เพราะขาดความสนใจ

TileStache (เซิร์ฟเวอร์) ตัวมันเองทำงานได้ดีมาก อย่างไรก็ตามฉันพบข้อบกพร่องหลายอย่างใน Polymaps และเนื่องจากมันไม่ได้รับการอัปเดตอีกต่อไป (โครงการที่ถูกทอดทิ้ง) ฉันไม่สามารถโน้มน้าวตัวเองให้ใช้มันในการผลิตได้ (ฉันต้องรักษามันด้วยตัวเอง ... ตัวฉันเอง)

ทางออกของฉันสำหรับฉันได้รับการเขียนที่กำหนดเอง OpenGL renderer เวกเตอร์พื้นเมืองซึ่งจะใช้ในAmigoCloud ในความเป็นจริงนั่นคือวิธีการแสดงแผนที่ทั้งหมดในบริการของเรา สำหรับจุดประสงค์นั้น TileStache ส่งมอบค่อนข้างดี

คุณต้องการที่จะมองไปที่ผู้ให้บริการ TileStache เวกเตอร์ สำหรับตัวอย่างเกี่ยวกับวิธีการใช้มันคุณสามารถดูที่พื้นฐานมากชุดทดสอบเวกเตอร์ที่ผมเขียน

น่าเศร้าที่ฉันไม่คิดว่า Leaflet มีการสนับสนุนเวกเตอร์ที่มีการปูกระเบื้อง


ขอบคุณ! มีตัวอย่าง tilestache ง่ายๆในเว็บหรือไม่
Karussell

ความหนาแน่นของประชากร polymaps ใช้แคชตัวให้บริการเวคเตอร์แบบเรียงต่อกัน (เช่นไม่ได้รันเซิร์ฟเวอร์ tilestache แต่เป็นเพียงสำเนาของสิ่งที่ ouput จะมีลักษณะ) มองไปที่รหัสควรจะทำให้มันเห็นได้ชัดว่ามันเป็นเวกเตอร์กระเบื้องpolymaps.org/ex/population.html น่าเสียดายที่การสาธิต tilestache ที่พร้อมใช้งานออนไลน์ไม่ได้ใช้ผู้ให้บริการเวกเตอร์ อย่างไรก็ตามหากคุณเรียกใช้ tilestache-server แบบโลคัลและแทนที่ URL การสาธิตสำหรับโลคัลโฮสต์ของคุณด้วยเวกเตอร์แหล่งข้อมูล (shapefile, postgis, ฯลฯ ) ที่กำหนดค่ามันจะทำงานได้ ข่าวสารเกี่ยวกับความช่วยเหลือหากจำเป็น
Ragi Yaser Burhum

ฉันไม่เห็นด้วยกับคำตอบนี้โดยเฉพาะสิ่งFor just drawing vectors, Leaflet or OpenLayers will do just fine. Nothing new there.นี้จะใช้งานได้หากเวกเตอร์มีการซ้อนทับ แต่จะทำอย่างไรถ้าแผนที่ทั้งหมด (ชั้นฐานทั้งหมด) จัดเป็นเวกเตอร์หรือไม่
giser

@giser นั่นคือเหตุผลที่ฉันสร้างความแตกต่างระหว่าง "เพียงแค่การวาดเวกเตอร์" และ "เวกเตอร์แผนที่แบบเรียงต่อกัน" คำตอบที่สองคือคำที่ฉันใช้แผนที่ "ทั้งหมด" ที่ทำจากเวกเตอร์ล้วนๆ นี่คือตัวอย่างของสิ่งนี้: bl.ocks.org/mbostock/5593150
Ragi Yaser Burhum

@RagiYaserBurhum: ฉันขอโทษฉันเข้าใจผิด
giser

10

อัปเดต: ตั้งแต่การโพสต์สิ่งนี้ Mapbox เปิดตัวMapbox GL JSซึ่งใช้การแสดงผลแผนที่ฐานเวกเตอร์ WebGL ในเบราว์เซอร์

ณ จุดนี้ไม่มีตัวเลือกที่จัดตั้งขึ้น แผนที่ผลิตแบบเวกเตอร์เต็มรูปแบบเพียงอย่างเดียวคือ MapsGL ของ Google และมีข้อ จำกัด อย่างมากเนื่องจากการสนับสนุนและประสิทธิภาพของเบราว์เซอร์

สิ่งที่ใกล้เคียงที่สุดที่คุณจะได้รับจากโอเพ่นซอร์สในขณะนี้คือKothic.jsและกลิ้งแผ่นบันทึกของคุณเองด้วยสคริปต์ของ Kothic


+1 เดี๋ยวก่อนนี่เจ๋ง! ไม่เข้าใจว่าทำไมคุณถึงถูกโหวตให้แพ้!
Karussell

6

ถ้าฉันเข้าใจคำถามของคุณถูกต้องทั้ง OpenLayers และ Leaflet จะโหลด / แสดงข้อมูลเวกเตอร์

ตัวอย่างเช่น

http://leafletjs.com/examples/geojson/

สิ่งนี้จะโหลดไฟล์ GeoJSON ไปยังแผนที่แผ่นพับซึ่งใช้ OSM ผ่าน CloudMade ในพื้นหลัง

OpenLayers อาจรองรับรูปแบบเวกเตอร์ที่แตกต่างกันมากขึ้นเช่น KML

http://dev.openlayers.org/examples/dynamic-text-layer.html

หากคุณหมายความว่าคุณอยู่หลังเซิร์ฟเวอร์เพื่อให้บริการข้อมูลเวกเตอร์ลงบนแผนที่ให้ดูที่ MapServer, GeoServer และ ESRI ArcGIS Server ซึ่งทั้งหมดจะทำหน้าที่เซิร์ฟเวอร์ข้อมูลเวกเตอร์บนแผนที่ของคุณเป็น Web Feature Server (WFS)


ฉันหมายถึงแผนที่ตัวเองเป็นข้อมูลเวกเตอร์ไม่ใช่คุณสมบัติบางอย่างที่ฉันโหลดลงบนแผนที่
Karussell

การให้บริการข้อมูลจำนวนมากผ่านประเภทเวกเตอร์สามารถแขวนหรือแม้กระทั่งฆ่าเบราว์เซอร์ได้เนื่องจาก<svg>องค์ประกอบมากเกินไปคุณควรคำนึงถึงเรื่องนี้ด้วย
Krystian

@ Krystian นั่นคือถ้าคุณแสดงแผนที่ด้วย SVG เห็นได้ชัดว่าคุณสามารถแสดงผลด้วย OpenGL / WebGL (เช่นเดียวกับ Google Maps บน Android / iOS และในแผนที่ WebGL จาวาสคริปต์)
Ragi Yaser Burhum

@RagiYaserBurhum ใช่ฉันไม่ได้คิดเกี่ยวกับเรื่องนั้น แต่ในกรณีนี้คุณไม่สามารถใช้ webGL ได้เนื่องจากข้อ จำกัด ใน APIs และอื่น ๆ
Krystian

1
OP ไม่ได้พูดถึง ArcGIS API ดังนั้นฉันจึงไม่สมมติว่า (GIS มากมายสามารถทำได้โดยไม่ต้องใช้ ArcGIS) ใช่ฉันเห็นด้วยว่าการผสม ArcGIS JS กับ WebGL อาจเป็นเรื่องเจ็บปวด เวกเตอร์แบบเรียงต่อกันเป็นของใหม่ - แต่พวกเขามีโอกาสที่ดีในการเป็นอนาคต อาจจะ
Ragi Yaser Burhum

2

ฉันพบอีกหนึ่งโครงการที่น่าสนใจที่เรียกว่าGL-Solarซึ่งใช้เทคโนโลยี webgl แทนที่จะเป็น SVG หรือ Canvas แม้ว่ามันจะอยู่ในช่วงต้นของการพัฒนา แต่มันก็ดูดี

นอกจากนี้ยังMapCSS , Cartagenและd3.jsควรจะกล่าวถึง d3.js ใช้ใน OSM ออนไลน์บรรณาธิการiD นอกจากนี้ยังมีโพสต์บล็อกเกี่ยวกับแผ่นพับและการแสดงผล html5

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