พื้นที่ดิสก์และจำนวนของไพ่สำหรับเลเยอร์โลก


9

ฉันกำลังคิดเกี่ยวกับการทดสอบการสร้างไทล์เลเยอร์สำหรับการทำแผนที่เว็บ

ในบริบทนี้ฉันต้องการทราบว่าฉันสามารถคำนวณจำนวนแผ่นกระเบื้องได้อย่างไร (256x256 สำหรับ tilecache ถ้าฉันจำได้) ฉันจะต้องใช้ n ระดับในพิกัด WGS84

บางทีฉันอาจจะใช้คอมโพสิตโซลูชันกับแผ่นกระเบื้องที่สร้างไว้ล่วงหน้าและในรุ่นบิน แต่ฉันต้องรู้ในตอนท้ายว่าพื้นที่ว่างในดิสก์ที่มีอยู่หากมีการสร้างไทล์ทั้งหมดและจำนวนไฟล์ที่จะแสดง

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

ยินดีต้อนรับข้อมูลใด ๆ

แก้ไข:

ฉันพบสคริปต์นี้เพื่อคำนวณจำนวนไทล์ที่จะสร้างขึ้นอยู่กับระดับการซูมและขอบเขตข้อมูลของคุณ ดูส่วนสำคัญนี้https://gist.github.com/1675606


คำตอบ:



5

ฉันทำแผ่นชีทที่แสดงจำนวนรวมของไพ่สำหรับระดับการซูมที่กำหนด

มันมีสองตาราง หนึ่งแสดงจำนวนระดับการซูมที่จำเป็นในการแสดงสิ่งต่าง ๆ ในระดับหนึ่งเริ่มต้นจากการแสดงไพ่คน

level 1: 1 # Person
level 2: 5 # Car
level 3: 21 # House building
level 4: 85 # Square
level 5: 341 # Small neighbourhood
level 6: 1,365 # Football stadium
level 7: 5,461 # Small farm
level 8: 21,845 # Central park New York
level 9: 87,381 # Entire airport
level 10: 349,525 # Small city (Copenhagen)
level 11: 1,398,101 # Medium city (Amsterdam)
level 12: 5,592,405 # Large city (London)
level 13: 22,369,621 # Medium Island (Mallorca)
level 14: 89,478,485 # Large Island (Sicily)
level 15: 357,913,941 # Small country (Denmark, Estonia, Taiwan)
level 16: 1,431,655,765 # Medium Country (Korea, Greece)
level 17: 5,726,623,061 # Region (Southern Europe, Arabian Peninsula)
level 18: 22,906,492,245 # Small continent or large country (China)
level 19: 91,625,968,981 # Medium continent (Africa) or huge country (Russia) 
level 20: 366,503,875,925 # Asia
level 21: 1,466,015,503,701 # The World

อีกอันหนึ่งแสดงจำนวนระดับการซูมที่จำเป็นหากเริ่มต้นด้วยแผนที่โลกและระดับรายละเอียดที่ก้าวหน้า:

level 1: 1 # The World
level 2: 5 # Large contenents
level 3: 21 # Medium continents, huge countries
level 4: 85 # Small continents, large countries
level 5: 341 # Region (Southern Europe, Arabian Peninsula)
level 6: 1,365 # Medium Country (Korea, Greece)
level 7: 5,461 # Small country (Denmark, Estonia, Taiwan)
level 8: 21,845 # Large Island (Sicily)
level 9: 87,381 # Medium Island (Mallorca)
level 10: 349,525 # Large city (London)
level 11: 1,398,101 # Medium city (Amsterdam)
level 12: 5,592,405 # Small city (Copenhagen)
level 13: 22,369,621 # Entire airport
level 14: 89,478,485 # Central park New York
level 15: 357,913,941 # Small farm
level 16: 1,431,655,765 # Football stadium
level 17: 5,726,623,061 # Small neighbourhood
level 18: 22,906,492,245 # Square
level 19: 91,625,968,981 # House building 
level 20: 366,503,875,925 # Car
level 21: 1,466,015,503,701 # Person

1

นี่เป็นคำถามที่เก่ามาก แต่อย่างน้อยก็มีข้อแม้ที่สำคัญสองประการขึ้นอยู่กับงานที่ทำ

  1. งานอาจส่งผลให้มีการสร้างไทล์เปล่าจำนวนมาก (โดยมาก) โดยไม่มีการจัดการเฉพาะของกระบวนการสร้างไทล์
  2. ขนาดบนดิสก์ของปิรามิดกระเบื้องอาจจะมาก (มากกว่า 100%) มีขนาดใหญ่กว่าที่คาดหวังจากผลรวมของขนาดไฟล์ขององค์ประกอบเนื่องจากขนาดของคลัสเตอร์ 4KB ขั้นต่ำ (aka ขนาดบล็อก) ในการจัดเก็บมากที่สุด

(2) สวยมากแล้วอธิบาย แต่เป็นตัวอย่างฉันมีปิรามิดที่มีขนาดไฟล์ทั้งหมด 168MB แต่ขนาดของมันบนดิสก์มีขนาดมากกว่า 600MB มันสำคัญยิ่งกว่าที่จะได้รับ (1) ถูกต้อง

สำหรับ (1): พิจารณาว่างาน 'ไฟล์โลก' ของคุณเกี่ยวข้องกับขอบเขตของประเทศหรือไม่

กระเบื้องใด ๆ ที่ไม่ได้อยู่ในขอบเขตสามารถให้บริการกับหนึ่งในสองของกระเบื้อง 'alt' - 'ทะเล' (สีฟ้า) สำหรับทุกที่ไม่ได้อยู่ในประเทศหรือกระเบื้อง 'บล็อก' (เติม) สำหรับกระเบื้องที่อยู่ภายในทั้งหมด ชายแดนแห่งชาติ จะต้องแสดงเฉพาะส่วนที่มีส่วนของเส้นขอบเท่านั้นส่วนที่เหลือสามารถ 'เริ่มต้น' ได้

ทำไมนี้ เนื่องจากแผ่นบล็อกทั้งหมดของประเภทเฉพาะ (ประเภทใน (ทะเลที่ดิน) หรือประเภท (ทะเลประเทศก. ประเทศข ฯลฯ ) จะเหมือนกัน

ไทล์ 'บล็อก' อาจเป็นหนึ่งสีสำหรับแต่ละประเทศหรือหนึ่งสีสำหรับทั้งโลกหรือไทล์เปล่า (ถ้าคุณวางโครงร่างของประเทศไว้บนพื้นหลัง)

'บล็อก' จะต้องแสดงผลเพียงครั้งเดียว (เช่น 1 256x256 แผ่นซึ่งเต็มไปด้วยสีที่ต้องการทั้งหมด)

เมื่อกระเบื้องถูกสร้างขึ้นคุณสามารถทดสอบ

(a) ถ้า 'ผู้ปกครอง' - ไทล์ที่ระดับการซูมน้อยกว่าหนึ่ง - อยู่; และ

(b) ถ้ามันเป็นไพ่ 'บล็อก' (เช่นนั้นจะเต็มไปด้วยสีเดียวทั้งหมด)

ในกรณี (ก) ไม่จำเป็นต้องแสดงผลกระเบื้อง หากผู้ปกครองไม่มีอยู่ก็เป็นเพราะผู้ปกครองทั้งหมดเป็นบล็อกกระเบื้องและถูกลบ

ในกรณี (b) (ซึ่งมีพาเรนต์อยู่ดังนั้นจำเป็นต้องทดสอบไทล์) ถ้าเป็นบล็อกไทล์คุณสามารถลบออกจากปิรามิดได้อย่างปลอดภัย (การทดสอบ block-tile-ness นั้นขึ้นอยู่กับขนาดไฟล์เพียงอย่างเดียว 256x256 ไทล์ทั้งหมดของสีเดียวมีขนาดที่แม่นยำมากและความน่าจะเป็นที่ไทล์ของ 'เนื้อหาที่เหมาะสม' มีขนาดเท่ากับศูนย์)

การลบไทล์เหล่านี้ในระหว่างกระบวนการสร้างเพิ่มเวลาน้อยที่สุดในลูปการเรนเดอร์ tile แต่จะช่วยประหยัดพื้นที่ดิสก์จำนวนมาก อีกทางเลือกหนึ่งคือแสดงทุกอย่างแล้วค้นหาพีระมิดซ้ำเพื่อหาแผ่นบล็อกและลบออก: ใช้เวลานานกว่า

เมื่อสร้างปิรามิดแล้วขั้นตอนการเรียกใช้ไทล์สามารถกำหนดค่าเริ่มต้นเป็นไทล์ 'บล็อก' หากมันไปหา tile / z / x / y และรับ 404

หากต้องการดูว่าทำไมในกรณีนี้ให้ลองพิจารณาการซูมแบบ 256x256 = 1 โดยที่จตุภาคบนสุดว่างเปล่าทั้งหมด คุณรู้แน่นอนว่าไพ่ 4 ใบที่ซูม = 2 ที่ครอบคลุมพื้นที่เดียวกันนั้นจะว่างเปล่าเช่นกัน ในทำนองเดียวกันไพ่ 16 ใบที่ซูม = 3 เป็นต้นไป

ดังนั้นเวลาใด ๆ ในระหว่างกระบวนการเรียงแบบเรียงต่อกันที่ไทล์เป็นสีบล็อก (หรือว่างเปล่า) ทุกครั้งที่ระดับการซูมสูงกว่าสามารถถูกละเว้นได้

สิ่งนี้จะช่วยประหยัดพื้นที่เก็บข้อมูลจำนวนมากและใช้เวลามากมายในกระบวนการปูกระเบื้อง

ข้อแม้สำหรับคำเตือนเหล่านี้: งานปูกระเบื้องที่ซับซ้อนมากขึ้นจะสลับเลเยอร์ต่างๆที่ระดับการซูมที่แตกต่างกัน หากเป็นกรณีนี้จะต้องใช้ความระมัดระวังอย่างมากเพื่อให้แน่ใจว่าไม่มีการทดสอบ 'ผู้ปกครอง' เมื่อระดับการย่อ / ขยายเป็นระดับที่มีเลเยอร์ใหม่รวมอยู่ในชุดการแสดงผล

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