;-)

Про математику сферического «Меркатора»

У нас еcть карта 512×512 тайлов, на которой каждый пиксель имеет уникальный шестнадцатеричный код. Делим карту на 512 строк, в строке 512 тайлов, размер строки 131 072×256 пикс., всего в строке получается 33 554 432 пикс.

Осталось рассчитать, сколько квадратных километров занимают пиксели в этих строках.

Для начала вникаем, куда проекция «Меркатора» разместила наши строки на сфере. По пути выясняем, что данные на карте «Гугла» отображаются в сферической системе координат (Spherical Mercator EPSG:900913 (EPSG:3857) and WGS84 Datum). Радиус сферы 6 378 137 м. На карте видно не всю сферу — максимальная полярная параллель 85,051 128 78°.

В проекции «Меркатора» параллели смещаются по мере удаления от нулевой параллели.

Это смещение параллелей (y) выражается формулой 1:

R=1; θ — угол параллели в радианах.

Полученная из формулы 1 величина смещения параллелей (коэффициент масштаба) переводится обратно в радианы с помощью формулы 2:

На сфере «Меркатора» масштаб сегментов карты (тайлов) градиентно уменьшается по мере удаления от экватора.

Если представить проекцию «Меркатора» в виде градиентной шкалы масштабов, эта шкала будет абсолютно линейной.

Все строки на шкале масштабов совершенно одинаковы, но тем не менее чем ближе строка к полюсу на карте, тем меньше где-то там на сфере ее масштаб. Чтобы определить диапазон шкалы масштабов, переводим угол максимальной полярной параллели в радианы 85,051 128 78° · π / 180° = 1,484 422 229 748 71 и вычисляем коэффициент ее масштаба, используя формулу 1.

1 · ln (tan(1,484 422 229 748 71 / 2 + π / 4)) = 3,141 592 653 628 9

Поскольку сфера симметрична, достаточно определить коэффициент масштаба для каждой параллели на одной половине, то есть рассчитать углы 256 строк, имеющих одинаковый размер на карте, но уменьшающихся по мере удаления от экватора на сфере. Градиент масштабов делится на любое количество сегментов, но, учитывая масштаб карты, нужно именно 256 — от экватора (y255) до полярной параллели (y0).

Делим градиент масштабов на 256 сегментов.

y255 = y0 / 256 = 0,012 271 846 3
y254 = y255 + y255 = 0,024 543 692 6
y253 = y254 + y255 = 0,036 815 538 9
y252 = y253 + y255 = ...
y251 = y252 + y255
И так далее до полярной параллели.

Используя формулу 2, переводим коэффициент масштаба каждой параллели в радианы и градусы.

θ255 = 2 atan (exp (y255 / 1)) – ½ π = 0,012 271 538 3 rad = 0,703 107 352 4°
θ254 = 2 atan (exp (y254 / 1)) – ½ π = 0,024 541 228 8 rad = 1,406 108 835 5°
θ253 = 0,036 807 225 2 rad = 2,108 898 659 3°
и т. д.

Считаем площадь полярного сегмента, который не влез на карту.

Полярный угол (φ0) = (90°θ0) · 2 = 9,897 742 44° = 0,172 748 194 1 rad
Высота полярного сегмента = Радиус сферы · (1 – cos(φ0 / 2)) = 23,777 208 59 км
Полярная хорда = 2 · Радиус сферы · sin(φ0 / 2) = 1 100,442 151 23 км
Площадь полюса = π · ((Полярная хорда / 2) ^ 2 + Высота полярного сегмента ^ 2) = 952 872,030 890 85 км2

Осталось рассчитать площади строк.

Находим угол (φ) пересечения параллели с радиусом сферы в радианах для каждой параллели от θ255 до θ0.

φ255 = (90°θ255) · 2 π / 180° = 3,117 049 577 rad
φ254 = (90°θ254) · 2 π / 180° = 3,092 510 195 9 rad
φ253 = 3,067 978 203 2 rad
и т. д.

Высота полярного сегмента нам уже известна, осталось рассчитать высоту (h) строк:

h0 = Радиус сферы · (1 – cos(φ0 / 2)) – Высота полярного сегмента = 0,589 672 519 79 км
h1 = Радиус сферы · (1 – cos(φ1 / 2)) – Cумма высот предыдущих сегментов = 0,604 267 661 96 км
h2 = Радиус сферы · (1 – cos(φ2 / 2)) – Cумма высот предыдущих сегментов = 0,619 222 612 38 км
h3 = 0,634 546 168 98 км
и т. д.
h255 = Радиус сферыCумма высот предыдущих сегментов = 78,267 588 018 18 км

Наконец получаем площадь (S) каждой строки.

S0 = 2 π · Радиус сферы · h0 = 23 631,136 069 7 км2
S1 = 2 π · Радиус сферы · h1 = 24 216,036 635 6 км2
S2 = 24 815,356 523 4 км2
S3 = 25 429,448 309 54 км2
и т. д.

S255 = 3 136 574,895 768 57 км2
S256 = S255
S257 = S254
S258 = S253
и т. д.
S511 = S0

Чтобы узнать площадь пикселя в строке, просто делим площадь строки на общее количество пикселей в ней.

Тайлы из проекции «Меркатора» в 10-м масштабе на сфере имеют форму, неприлично похожую на квадрат.

Для подсчета пикселей используем волшебный способ.

Смотрим, сколько квадратных километров занимают пиксели в строках.

Округляем значения и сравниваем полученные данные с «Википедией».

  Цвет Название Площадь, км2   Википедия Разница
1#BC2657Россия16 523 293>16 364 387 158 906
2#00A66DАнтарктида12 982 769<14 000 0001 017 231
3#639F5AКитай9 279 960>9 232 276 47 684
4#D23127Канада8 951 513<9 093 507 141 994
5#717070Бразилия8 402 706<8 460 415 57 709
6#C6382FСоединенные Штаты Америки7 675 122>7 664 012 11 110
7#F9DD14Австралия7 602 329<7 633 565 31 236
8#E4A41BИндия3 107 011>2 864 021 242 990
9#1BAA64Аргентина2 718 051<2 736 690 18 639
10#8D9C46Казахстан2 663 315<2 699 700 36 385
11#02A3D3Алжир2 311 284<2 381 741 70 457
12#EE9617Демократическая Республика Конго2 298 093>2 267 048 31 045
13#BA4939Гренландия2 148 362<2 166 086 17 724
14#C73A2DМексика1 945 932>1 943 945 1 987
15#05A39DСаудовская Аравия1 933 260<2 149 690 216 430
16#B7A42FИндонезия1 884 107>1 811 569 72 538
17#C58B2DСудан1 848 010<1 886 068 38 058
18#D17B26Ливия1 619 483<1 759 540 140 057
19#3A987EИран1 614 889>1 531 595 83 294
20#789D50Монголия1 544 445>1 481 307 63 138
21#D92D1EАляска (штат США)1 445 171<1 553 556 108 385
22#7CB341Перу1 283 667>1 279 996 3 671
23#E78619Чад1 261 656>1 259 200 2 456
24#039FCCМали1 253 642>1 220 190 33 452
25#92BC35Ангола1 253 229>1 246 700 6 529
26#05A865Южно-Африканская Республика1 207 747<1 214 470 6 723
27#EC8618Нигер1 181 112<1 266 700 85 588
28#856862Колумбия1 126 802>1 038 700 88 102
29#3A9D76Эфиопия1 125 202>1 000 000 125 202
30#52AF50Боливия1 076 932<1 083 301 6 369
31#0B9AC5Мавритания1 041 661>1 025 520 16 141
32#C37E2FЕгипет 995 966> 995 450 516
33#986052Венесуэла 904 531> 882 050 22 481
34#D38824Нигерия 904 112< 910 768 6 656
35#BBC226Танзания 886 158> 885 800 358
36#1BA575Пакистан 846 859< 881 912 35 053
37#7DB93CНамибия 819 591< 823 290 3 699
Показать все
38#2CAE59Мозамбик 777 243< 786 380 9 137
39#0DA0A1Турция 766 879< 769 632 2 753
40#66B249Чили 743 189< 743 812 623
41#A7BF2EЗамбия 740 579< 743 398 2 819
42#D7A520Мьянма 663 594> 653 508 10 086
43#4E9A6CЮжный Судан 645 839> 619 745 26 094
44#3BA26EАфганистан 638 342< 652 230 13 888
45#D69722Сомали 637 081> 627 337 9 744
46#DF871EЦентрально-Африканская Республика 623 043> 622 984 59
47#F3D313Мадагаскар 590 710> 581 540 9 170
48#E2951CКения 577 330> 569 140 8 190
49#67B644Ботсвана 561 420< 566 730 5 310
50#E5761AУкраина 558 031> 553 544 4 487
51#AC6143Франция 545 040< 551 695 6 655
52#ECA416Таиланд 510 625< 510 890 265
53#866F5EИспания 495 397< 498 980 3 583
54#779556Камерун 464 083< 472 710 8 627
55#19A188Туркмения 463 674< 469 930 6 256
56#F4DA13Папуа-Новая Гвинея 461 724> 452 860 8 864
57#00736FЙемен 454 707< 527 968 73 261
58#299F80Узбекистан 435 604> 425 400 10 204
59#0DA199Ирак 429 297< 437 367 8 070
60#0E9CC9Марокко 412 458< 446 300 33 842
61#E5581AШвеция 412 314> 410 335 1 979
62#3DAD57Парагвай 397 335> 397 302 33
63#52B34BЗимбабве 388 113> 386 847 1 266
64#0FA484Япония 368 605> 364 485 4 120
65#887859Германия 352 555> 348 672 3 883
66#00A596Конго 342 139> 341 500 639
67#05A589Вьетнам 324 000> 318 003 5 997
68#2793A1Кот-д'Ивуар 320 564> 310 070 10 494
69#D9B11FОман 309 362< 311 888 2 526
70#4C8A81Польша 307 097< 309 500 2 403
71#00A3BDНорвегия 305 211> 304 282 929
72#E0591CФинляндия 302 498< 303 815 1 317
73#747D67Италия 297 320> 294 140 3 180
74#C8A426Филиппины 293 519< 298 170 4 651
75#1898ABБуркина-Фасо 273 799< 273 800 1
76#06A1D0Западная Сахара 270 371> 266 000 4 371
77#CCBB22Новая Зеландия 264 276> 262 443 1 833
78#05A493Габон 261 946> 257 667 4 279
79#BABA29Эквадор 247 882< 256 369 8 487
80#00A3CCГвинея 245 958> 245 717 241
81#CB552CВеликобритания 241 571< 241 930 359
82#898054Румыния 234 966> 229 891 5 075
83#0D9DB4Гана 233 184> 227 533 5 651
84#00A58BЛаос 228 584< 230 800 2 216
85#37899BГайана 210 929> 196 849 14 080
86#C17132Беларусь 204 905> 202 900 2 005
87#E99517Уганда 204 166> 197 100 7 066
88#7AA54BВосточная Малайзия (Малайзия) 197 022< 198 161 1 139
89#0C9BC1Сенегал 196 113> 192 530 3 583
90#A19A3CКиргизия 190 095< 191 801 1 706
91#619067Сирия 185 250> 183 630 1 620
92#F1A616Камбоджа 177 905> 176 515 1 390
93#2BAC5EУругвай 174 208< 175 015 807
94#DD781FТунис 148 430< 155 360 6 930
95#0EA57AНепал 147 126< 156 000 8 874
96#2791A7Суринам 144 772> 141 510 3 262
97#4FA064Таджикистан 139 171> 130 168 9 003
98#2AA66EБангладеш 134 038> 130 598 3 440
99#8EA541Западная Малайзия (Малайзия) 130 553< 130 647 94
100#199C9AГреция 130 398< 143 351 12 953
101#B38D36Эритрея 121 106> 101 000 20 106
102#2AA276КНДР 120 588> 120 408 180
103#CA4B2DНикарагуа 119 227< 119 990 763
104#A08F40Бенин 115 716> 110 622 5 094
105#D54525Гондурас 111 724> 88 802 22 922
106#975358Куба 110 261< 111 890 1 629
107#289991Болгария 110 122> 109 820 302
108#C8422EГватемала 108 315< 108 489 174
109#E24B1BИсландия 100 555< 107 159 6 604
110#1AA37EЮжная Корея 99 147< 100 250 1 103
111#00A3C5Либерия 96 081< 99 909 3 828
112#3EB152Малави 94 115< 96 320 2 205
113#9D7B48Венгрия 91 506< 94 080 2 574
114#4D9474Иордания 89 086< 89 608 522
115#996850Португалия 87 941< 91 470 3 529
116#199F91Азербайджан 84 423< 86 100 1 677
117#0C9CBBФранцузская Гвиана (Франция) 83 680> 83 534 146
118#28969AАвстрия 83 118> 82 445 673
119#38908EЧешская Республика 78 219> 77 247 972
120#758561Сербия 76 724< 88 246 11 522
121#AB5845Панама 74 528> 74 340 188
122#05A0C1Сьерра-Леоне 72 229> 71 620 609
123#E6B21AОбъединенные Арабские Эмираты 71 477< 83 600 12 123
124#BD5B36Ирландия 68 490< 68 883 393
125#05A57EШри-Ланка 64 708> 62 732 1 976
126#CF6E28Литва 63 577> 62 680 897
127#DA6A21Латвия 63 207> 62 249 958
128#DE4C1CШпицберген и Ян Майен (Норвегия) 61 745< 62 045 300
129#E97619Грузия 56 782< 69 700 12 918
130#8B924BТого 56 600> 54 385 2 215
131#0D9EABХорватия 55 814< 55 974 160
132#BB5138Коста-Рика 51 138> 51 060 78
133#05A1B1Босния и Герцеговина 50 916< 51 187 271
134#B0763CСловакия 48 622> 48 105 517
135#706777Доминиканская Республика 47 802< 48 320 518
136#E3671AЭстония 43 107> 42 388 719
137#D95E23Дания 42 384< 42 434 50
138#3CA666Бутан 39 996> 38 394 1 602
139#5F8375Швейцария 39 778< 39 997 219
140#3EB44AТайвань 35 560> 32 260 3 300
141#CE612BНидерланды 34 130> 33 893 237
142#05A0C8Гвинея-Бисау 33 431> 28 120 5 311
143#0EAA61Лесото 30 598> 30 355 243
144#BF6634Бельгия 30 411> 30 278 133
145#53B944Молдова 30 244< 32 891 2 647
146#289C88Армения 28 394< 29 843 1 449
147#ECD917Соломоновы острова 28 307> 27 986 321
148#4C8E7BАлбания 28 027> 27 398 629
149#0DA38EЭкваториальная Гвинея 26 968< 28 051 1 083
150#845C67Гаити 26 829< 27 560 731
151#CDC420Бурунди 25 043< 25 680 637
152#399486Республика Македония 24 891< 25 433 542
153#DDC61BРуанда 23 922< 24 668 746
154#E1401BБелиз 21 820< 22 806 986
155#B18139Израиль 21 562> 20 330 1 232
156#629761Джибути 21 520< 23 180 1 660
157#DC401DСальвадор 20 406< 20 721 315
158#199AA3Словения 20 184> 20 151 33
159#DCBD1DФиджи 18 734> 18 274 460
160#CFD21FНовая Каледония (Франция) 18 532> 18 275 257
161#00A580Кувейт 17 380< 17 818 438
162#1BAB5EСвазиленд 17 349> 17 204 145
163#DD2D1AГавайи (штат США) 16 680> 16 647 33
164#0EAA5CТимор-Лесте 14 698< 14 874 176
165#00A4B4Черногория 13 596> 13 452 144
166#E76619Калининградская область (Россия) 13 326< 13 355 29
167#A84A46Багамы 12 286> 10 010 2 276
168#E0D61AВануату 12 083< 12 173 90
169#0FA969Фолклендские острова (Британия) 11 834> 11 586 248
170#F4B416Катар 11 606< 12 189 583
171#975A55Ямайка 10 978> 10 831 147
172#608A6EРеспублика Косово 10 880< 10 887 7
173#00A2D0Гамбия 10 450> 10 000 450
174#768D5BЛиван 10 239> 10 230 9
175#835D65Пуэрто-Рико (США) 8 886< 9 104 218
176#05A2A7Абхазия 8 665> 8 660 5
177#B9403BГалапагосы (Эквадор) 8 019> 8 010 9
178#4A8587Канарские острова (Испания) 7 414< 7 493 79
179#3EB34EАрхипелаг Кергелен (Франция) 7 005< 7 215 210
180#0EAA57Палестина 6 036> 5 265 771
181#A3A539Бруней-Даруссалам 5 863> 5 269 594
182#3EB548Республика Кипр 5 511< 5 550 39
183#4A818CТринидад и Тобаго 5 137> 5 128 9
184#388C95Кабо-Верде 4 031< 4 033 2
185#00A4AAЮжная Осетия 3 860< 3 900 40
186#EAC917Южная Джорджия и Южные Сандвичевы острова (Британия) 3 644< 3 903 259
187#3CAA5FФранцузская Полинезия (Франция) 3 518< 3 667 149
188#8A884FТурецкая Республика Северного Кипра 3 461> 3 355 106
189#05A85AПриднестровье 3 209< 4 163 954
190#05A774Самоа 2 835> 2 821 14
191#AE6B3FЛюксембург 2 586= 2 586
192#68BA40Реюньон (Франция) 2 499< 2 511 12
193#73766CАзорские острова (Португалия) 2 293< 2 333 40
194#93C233Маврикий 1 991< 2 030 39
195#F8D514Коморы 1 657< 1 862 205
196#3886A6Гваделупа (Франция) 1 626< 1 628 2
197#D75024Фарерские острова (Дания) 1 378< 1 392 14
198#3887A0Мартиника (Франция) 1 111< 1 128 17
199#0EAA55Гонконг 1 067> 1 053 14
200#C6982AСан-Томе и Принсипи 998> 964 34
201#AA5046Острова Теркс и Кайкос (Британия) 886> 430 456
202#5E7D7AМадейра (Португалия) 790< 801 11
203#EFB316Бахрейн 758< 765 7
204#3685A3Доминика 748< 751 3
205#2CB14CСингапур 678< 687 9
206#F5C214Тонга 659< 717 58
207#8FAD3CФедеративные Штаты Микронезии 655< 702 47
208#278FB3Сент-Люсия 603< 606 3
209#10FDFFОстров Мэн 568< 572 4
210#A5AF34Гуам (США) 539< 544 5
211#DA2E1BОстрова Лайн (Кирибати) 489< 503 14
212#9B714DАндорра 465< 468 3
213#B9B02CСеверные Марианские острова (США) 462< 464 2
214#64a554Палау 442< 459 17
215#CECB1FСейшелы 440< 455 15
216#1997C0Барбадос 434> 431 3
217#477C94Антигуа и Барбуда 422< 443 21
218#1896B8Кюрасао (Нидерланды) 419< 444 25
219#248DB0Сент-Винсент и Гренадины 382< 389 7
220#A8C62CМайотта (Франция) 382> 374 8
221#278EADГренада 352> 344 8
222#2CB054Остров Херд и острова Макдональд (Австралия) 345< 412 67
223#1BAD58Острова Крозе (Франция) 339< 352 13
224#846364Виргинские острова (США) 336< 346 10
225#EBD216Острова Принс-Эдуард (ЮАР) 330< 335 5
226#B59933Мальта 309< 316 7
227#68BE3CОстрова Гилберта (Кирибати) 284> 281 3
228#F1C014Острова Кука (Новая Зеландия) 284> 236 48
229#1897B2Бонэйр (Нидерланды) 269< 294 25
230#E8BF19Ниуэ (Новая Зеландия) 261> 260 1
231#955455Острова Кайман (Британия) 259< 264 5
232#4A7C97Сент-Китс и Невис 258< 261 3
233#05A0B9Акротири и Декелия (Британия) 248< 254 6
234#00A65AСен-Пьер и Микелон (Франция) 218< 242 24
235#7BAD45Маршалловы острова 210> 181 29
236#0EA872Американское Самоа (США) 197< 199 2
237#91B538Остров Пасхи (Чили) 183> 164 19
238#F3CB14Острова Тристан-да-Кунья (Британия) 176< 207 31
239#1695BCАруба (Нидерланды) 175< 178 3
240#FAE114Лихтенштейн 158< 160 2
241#F5DF13Британские Виргинские острова (Британия) 139< 151 12
242#00A676Уоллис и Футуна (Франция) 139< 142 3
243#05A85EОстров Рождества (Австралия) 133< 135 2
244#F7CC14Остров Святой Елены (Британия) 122> 121 1
245#66AC4EОстров Маккуори (Австралия) 122< 128 6
246#178FB7Джерси 120> 118 2
247#4A7E91Монтсеррат (Британия) 100< 102 2
248#05A86CОстров Вознесения (Британия) 96> 88 8
249#CAB024Мальдивы 87< 298 211
250#16B793Гернси (Британия) 78= 78
251#6F6774Ангилья (Британия) 77< 91 14
252#DFCF1AОстров Буве (Норвегия) 73> 49 24
253#2CB14FСан-Марино 61= 61
254#EDDC16Остров Амстердам (Франция) 54< 55 1
255#A94949Бермуды (Британия) 50< 54 4
256#A6B730Острова Питкэрн (Британия) 49> 47 2
257#716C73Сен-Мартен (Франция) 46< 54 8
258#5E797EСан-Андрес и Провиденсия (Колумбия) 46< 53 7
259#53B647Британская территория в Индийском океане (Британия) 45< 60 15
260#1BA86DТокелау (Новая Зеландия) 41> 12 29
261#BDCE24Остров Норфолк (Австралия) 36= 36
262#7FC336Острова Феникс (Кирибати) 33> 28 5
263#1BAD51Синт-Мартен (Нидерланды) 31< 34 3
264#05A857Макао 30> 28 2
265#7EC136Науру 21= 21
266#00A666Остров Европа (Франция) 21< 28 7
267#5D7582Синт-Эстатиус (Нидерланды) 20< 21 1
268#1BAD53Сеута (Испания) 20> 19 1
269#93C630Тувалу 20< 26 6
270#5D7187Сен-Бартелеми (Франция) 18< 21 3
271#5B7183Остров Саба (Нидерланды) 12< 13 1
272#00A65FКокосовые острова (Австралия) 12< 14 2
273#D0D61FМелилья (Испания) 12= 12
274#E0DA1AОстров Сен-Поль (Франция) 10> 6 4
275#50AB56Остров Уэйк (США) 9> 7 2
276#BED224Гибралтар (Британия) 6< 7 1
277#FFFFFFСпратли (Бруней, Вьетнам, Китай, Малайзия, Тайвань, Филиппины) 6< 7 1
278#52B942Остров Банаба (Кирибати) 6= 6
279#DF361CАтолл Мидуэй (США) 5< 6 1
280#A9CD29Жуан-ди-Нова (Франция) 5< 6 1
281#2AAA66Остров Джарвис (США) 4= 4
282#8A37A3Парасельские острова (Вьетнам, Китай, Тайвань) 4< 8 4
283#BCC925Глорьез (Франция) 4< 12 8
284#9E8544Остров Навасса (США) 4< 5 1
285#B94138Атолл Клиппертон (Франция) 3< 6 3
286#D23324Атолл Пальмира (США) 3< 5 2
287#94C82FМонако 2= 2
288#A9CB29Остров Хауленд (США) 2= 2
289#68BD3DОстров Бейкер (США) 1< 2 1
290#D33C25Атолл Джонстон (США) 1< 3 2
291#7EBE38Остров Тромлен (Франция) 1= 1
292#DB371DАтолл Куре (США)0,9=0,9
293#00A658Ватикан0,5>0,440,06
  Риф Кингмен (США)0,002<0,0120,01
  Силенд0,001<0,0040,003
             
    Вода 366 495 583 > 361 132 000 5 363 583
    Суша 144 712 310 < 148 940 000 4 227 690
    Всего 511 207 893 > 510 072 000 1 135 893

Вспоминаем историю про Йемен и домохозяйку.

В список не вошли такие территории, как Сомалийская Республика, Джубаленд, Галмудуг, Пунтленд, Маахир, Хатумо, Республика Сомалиленд, Авдаленд, Нагорно-Карабахская Республика, Луганская и Донецкая Народные Республики.