มากกว่า

ทำคลัสเตอร์ 40,000 คะแนนจาก shapefile และเติม Google Maps / Webapp หรือไม่


ฉันเพิ่งเริ่มงานเว็บแอพ Python/Django ใหม่ที่เกี่ยวข้องกับ GIS (และฉันยังใหม่กับ GIS เลย) นี่คืองานของฉันและสิ่งที่ฉันพบมาจนถึงตอนนี้ และฉันยังติดอยู่กับการค้นหาว่าวิธีใดดีที่สุดหรือวิธีมาตรฐานสากลในการทำสิ่งต่างๆ

  • เรากำลังสร้างเว็บแอปที่ผู้ใช้สามารถอัปโหลดไฟล์รูปร่าง และนำระเบียนและคะแนนจากไฟล์มาใส่ลงในแผนที่

    1. อัพโหลดไฟล์รูปร่าง
    2. แยกวิเคราะห์ไฟล์รูปร่างโดยใช้ไลบรารี pyshp - ดูเหมือนว่าโอเค
    3. ฉันสามารถอ่านรูปร่าง (พิกัด) และบันทึก (ค่าสำหรับแต่ละฟิลด์ในแต่ละรูปร่าง)
    4. สมมุติว่าฉันมีพิกัดประมาณ 40,000+ พิกัด แต่ละอันมีระเบียนภาคสนามอยู่ในนั้น
    5. ฉันจะต้องเติม 40,000 คะแนนเหล่านั้นบน Google แผนที่ - จุดเหล่านั้นควรแสดงด้วยเครื่องหมาย และบันทึกภาคสนามสามารถแสดงด้วยแผนที่ความหนาแน่น (ขึ้นอยู่กับฟิลด์ที่ผู้ใช้เลือกที่จะกรองเป็น)
    6. แน่นอนว่าการโหลด 40,000 คะแนนลงใน Google Maps นั้นไม่สมเหตุสมผล เพราะจะทำให้ฝั่งไคลเอ็นต์ช้าลง

ฉันจะทำอย่างไรเพื่อให้สิ่งนี้รวดเร็วหรือใช้งานได้

เมื่อคิดถึงการจัดกลุ่มพิกัดใกล้เคียงในกริด และไม่เพียงเท่านั้น แต่ละพิกัดมีบันทึกภาคสนาม และเราต้องจัดกลุ่มพิกัด (?) เพื่อให้พิกัดคลัสเตอร์มีการแสดงค่าที่ถูกต้องในนั้น ตัวเลือกบางอย่างที่ฉันได้ดูคือ:-

  1. ใช้ http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/docs/reference.html สิ่งนี้จะเร่งความเร็วขึ้น… แต่เซิร์ฟเวอร์จะยังคงส่ง 40,000 คะแนน ซึ่งอาจจะไม่ ทำงานในจุดที่เราต้องโหลดมากกว่า 40,000 คะแนนสำหรับแต่ละส่วนที่แตกต่างกันบนแผนที่
  2. กำลังมองหาวิธีที่เราสามารถบรรลุ http://www.gdal.org/grid_tutorial.html โดยใช้ http://www.gdal.org/gdal_grid.html - ฉันไม่สามารถทำให้รุ่น .tiff ทำงานได้ ยัง
  3. นอกจากนี้ เพื่อให้ได้ข้อมูลกริด ฉันพบ http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html - แม้ว่าฉันจะไม่คิดว่ามันทำจริงๆ
  4. ฉันเพิ่งจะได้เรียนรู้เกี่ยวกับ GeoDjango และ https://github.com/biodiv/anycluster และกำลังตรวจสอบเพื่อดูว่านี่ควรเป็นสิ่งที่ฉันควรใช้หรือไม่
  5. และฉันยังคงค้นคว้าต่อไป

ฉันไม่รู้ว่ามีมาตรฐานสากลหรือเปล่า ดูเหมือนปัญหาทั่วไปที่หลายคนอาจเคยเจอ ฉันอาจไม่รู้ศัพท์แสงที่จะค้นหา


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

ใน KML มีคุณลักษณะที่ค่อนข้างใหม่ที่เรียกว่า "ภูมิภาค" ซึ่งพยายามจัดการด้านการแสดงผลของสิ่งต่างๆ เดิมออกแบบมาสำหรับ GoogleEarth แต่ฉันคิดว่ามันอาจใช้งานได้กับ GoogleMaps เช่นกัน: https://developers.google.com/kml/documentation/regions?csw=1

หากคุณค้นหาผู้คนที่แสดงข้อมูลทางทะเลของ AIS คุณจะพบตัวอย่างการทำคลัสเตอร์ฝั่งไคลเอ็นต์ใน GoogleMaps ด้วย นี่เป็นข้อดี - ซูมออกแล้วเจาะลึกเข้าไปในภูมิภาคต่างๆ คุณสามารถดูที่มาของหน้า: http://www.shinemicro.com/marine_traffic.asp

นี่คือหัวข้อที่เกี่ยวข้องกับกลยุทธ์โดยใช้ OpenLayers และ GoogleMaps: จะแสดงจุดต่างๆ ของ KML ที่มีพิกัดเดียวกันใน OpenLayers ได้อย่างไร

กลยุทธ์ทั้งหมดข้างต้นจะยังคงบังคับให้ผู้ใช้ของคุณดาวน์โหลดข้อมูลจุดประมาณ 2MB ขึ้นอยู่กับขนาดบันทึก

คุณพูดถึง GeoDjango ซึ่งจะทำให้คุณใช้ฐานข้อมูลทางภูมิศาสตร์และเซิร์ฟเวอร์แผนที่จริง จะมีช่วงการเรียนรู้ที่สูงชันและการสร้างแอปพลิเคชันที่มากขึ้น แต่ท้ายที่สุดแล้วมันจะทำงานได้ดีกว่าวิธีอื่นๆ

ฉันจะทดสอบ 40,000 คะแนนใน KML ก่อนและดูว่ามันแย่แค่ไหน ด้วยวิธีนี้คุณจะมีเกณฑ์เปรียบเทียบเพื่อเปรียบเทียบโซลูชันอื่นๆ ลองโหลดใน GoogleEarth เพื่อเปรียบเทียบว่า GE จัดการกับมันอย่างไรเมื่อเปรียบเทียบกับ GMaps

ส่วนหนึ่งของการตัดสินใจของคุณควรจะขึ้นอยู่กับว่าฟังก์ชันนี้เป็นศูนย์กลางของแอปพลิเคชันของคุณอย่างไร หากนี่เป็นส่วนเล็ก ๆ ของแอปพลิเคชั่นที่ใหญ่กว่า อาจไม่คุ้มค่าที่จะพัฒนาวิธีแก้ปัญหาที่ดีที่สุดสำหรับส่วนนี้ หากทุกอย่างถูกสร้างขึ้นด้วยฟังก์ชันนี้ คุณอาจจะต้องใช้ GeoDjango หรือคล้ายกัน


ดูวิดีโอ: Making a new polygon shapefile in ArcMap (ตุลาคม 2021).