Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2012-01-26

Сотни терабайт

Ходят слухи, что если сложить вместе все тайлы Google Maps, то размер потребного хранилища для такого кеша будет исчисляться сотнями терабайт.

Давайте посчитаем. Для начала, узнаем количество тайлов на территорию Москвы.

Исходные данные таковы.
Территория — квадрат со стороной 30 километров.
Всего есть 20 LOD-ов (масштабная линейка из 20-ти ступеней).
Каждый следующий масштаб отличается от предыдущего в два раза, т.е. тайлов на одну и ту же территорию в четыре раза больше (или меньше, если в другую сторону).
Самый крупный масштаб 1 : 1128.497176.
Плотность картинки 96 DPI (дюйм карты насчитывает 96 пикселей).
Тайл — квадрат со стороной 256 пикселов.
Средний тайл весит 0.02 мегабайт. В отличие от остальных данных, этот параметр получен экспериментально и не может быть на 100% точным. Скорее всего он весит меньше, поскольку плотность информации очень разная на разных масштабах и территориях.

Имеем 1128.5 дюймов местности в 1 дюйме карты, что дает нам 1128.5 * 25.4 / 1000 / 96 = 0.29858 метров на 1 пиксель.
Чтобы закрыть 30 километров надо 30000 / 0.29858 / 256 = 392.48 тайлов. Это по одной стороне.
Значит на Москву надо 392.48 ** 2 = 154041.12 тайлов.
Что в мегабайтах означает 0.02 * 154041.12 = 3080.82 мегабайт или 3 гигабайта.

Итак, мы выяснили, что для самого крупного масштаба гуглокарт на Москву надо 3 гигабайта тайлов. Масштаб на ступень меньше потребует 3080.82 / 4 = 770 мегабайт, следующая ступень потребует 192 мегабайта, и далее — геометрическая прогрессия на 20 шагов. Пяти гигабайт должно хватить с избытком на всю масштабную линейку.

Теперь, если хотите, можете сами посчитать, сколько надо тайлов (сотни терабайт, да?) на цилиндрическую развертку (проекция Меркатора) Земли в целом.
Длина экватора - 40076 км. Длина меридиана – 40009 км, нам нужна половина (от полюса до полюса). Короче, считать надо прямоугольник 40000 км на 20000 км в несколько округленном виде.

У меня получилось 2 738 терабайт. Три петабайта на весь глобус, и это только один масштаб, пусть и самый крупный. Я правильно посчитал? А то у меня с арифметикой часто глюки бывают.

def GooGlobeTilesSize():
 squareSide = 30.0 * 1000.0 # meters
 scale20 = 1128.497176 # meters in meter
 dpi = 96
 tileSide = 256.0 # pixel
 tileMB = 0.02 # megabyte
 inch = 2.54 / 100.0 # meter
 m2px = scale20 * inch / dpi # meters in pixel
 tilesLine = squareSide / m2px / tileSide
 squareTiles = tilesLine ** 2
 squareMegabytes = squareTiles * tileMB
 print '%s гигабайт на Москву' % (squareMegabytes / 1000.0)

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Klaipeda (15) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) Baltic (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) seaside (1) serialization (1) shore (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)