Daha çox

Sferik merkator SVG -dən kirəmitli bir xəritə necə yaradılır?


Mən CİS adamı deyiləm; bu həqiqətən yalnız bir işdir, buna görə yəqin ki, terminologiyam/strategiyam səhvdir; Xahiş edərdim ki, mənə səbr edəsiniz. İşlədiyim Qt əsaslı C ++ tətbiqi üçün aşağıdakı tələblərim var:

  • Fayanslı bir xəritə göstərin (məsələn, OpenStreetMaps). Bu yaxşı işləyir.

  • Xəritənin üstündəki digər vektor məlumatlarının üst -üstə düşməsinə icazə verin (sınaq olaraq, Təbii Yerdən aldığım dünya sərhədlərinin şəkli var.

Tətbiqimdə vektor məlumatlarının əvvəlcədən işlənməsi mümkündür, buna görə də EPSG: 4326 proqnozlaşdırılan Təbii Yer şəklini bir SVG faylına çevirmək qərarına gəldim (tətbiqimdə ən asan şəkildə göstərə bilərəm). Kartoqrafdan istifadə edərək bunu etdim. Onun konfiqurasiyası belə görünür:

{"qat": [{"src": "ne_10m_admin_0_countries.shp", "class": "world_boundaries"}], "proje": {"id": "proj4", "projstr": " +proj = merc + lon_0 = 0 +k = 1 +x_0 = 0 +y_0 = 0 +a = 6378137 +b = 6378137 +towgs84 = 0,0,0,0,0,0,0 +ədəd = m +no_defs "}," sərhədləri ": {" mode ":" bbox "," data ": [-180, -85.0511, 180, 85.0511]}}

İnanıram ki, bu, giriş şəklini götürməli, onu Sferik Merkatora (OSM plitələrinin proyeksiyasına uyğun olmalıdır) yenidən yazmalı və müvafiq SVG yaratmalıdır. Bütün bunlar "işləyir", amma SVG faylının proyeksiyası bir az sönmüş kimi görünür. SVG xüsusiyyətlərini OSM görüntü plitələrinin üstünə qoyduğumda, bunlar belə sıralanmır:

Qara bir piksel genişliyindəki xətlər SVG-dən göstərilir. Öncədən işləmə mərhələlərində səhv etdiyim konseptual bir şey olub olmadığını düşünürəm. Mən düşünmək SVG plitələrini düzgün göstərdiyimi (SVG sənədini 360 dərəcə genişliyində və 170.1022 dərəcə hündürlüyündə olan bir kvadrat şəkli kimi qiymətləndirirəm və lazım olan hər bir kafelə uyğun gələn görüntünün kvadrat hissəsini kəsirəm). Ancaq CİS mənim işim olmadığından əminəm ki, cahilliyim məni bir yerdən azdıra bilər.


İş prosesimdə bir problem olub olmadığını görmək üçün bəzi alternativ vasitələri sınamaq qərarına gəldim. Yuxarıdakı şərhçilərdən birinin təklifi ilə bunun əvəzinə aşağıdakıları etdim:

  • Mən istifadə etdimogr2ogrgiriş şəkli faylını EPSG -də yenidən yansıtmaq üçün: 3857.
  • Daha sonra Sferik Merkator şəklini SVG -yə çevirmək üçün shp2svg istifadə etdim.

Bu, tətbiqimdə düzgün şəkildə göstərilən bir SVG faylı ilə nəticələndi. Düşünürəm ki, ya Kartoqrafda bir səhv olmalıdır, ya da səhv idarə etmişəm. Düzgün istifadə etdiyimi düşünürəm, amma sənədləri mümkün olduğu qədər ətraflı deyil.


Oke, JavaScript -dən istifadə edək, çünki düşünürəm ki, ən böyük kitabxana var. Burada interaktiv bir veb xəritəsi yaratmaq üçün bir neçə yanaşmanı izah edəcəyəm.

1) Birinci yanaşma düz svg istifadə etməkdir:

Seçdiyiniz vektor proqramı ilə əsas xəritəni svg olaraq yükləyə və ya çəkə bilərsiniz. Sonra hər bir ölkəyə çoxbucaqlıya bənzərsiz bir şəxsiyyət təyin edə bilərsiniz və JS -in içərisində klik və ya siçan sürüşməsi kimi siçan hadisəsi ilə SVG -yə daxil ola bilərsiniz. Ölkənin bütün məlumatları JS xaricində bir .json (daha asan) və ya .xml faylında saxlanıla bilər. SVG hadisəsindən əldə etdiyiniz şəxsiyyət nömrəsi ilə .json -dan uyğun məlumat əldə edə bilərsiniz. Bəlkə də bu təkəri yenidən icad edir, amma çox tənzimlənir. Ancaq düşünürəm ki, daha mürəkkəb bir kitabxana istifadə edirsinizsə, yalnız statik xəritələr istəsəniz daha sadə olar.

2) İkinci yanaşma, svg qarşılıqlı əlaqəsi üçün bir kitabxanadan istifadə etməkdir:

3) Üçüncü yanaşma, svg -yə əsaslanan tematik veb xəritələşdirmə kitabxanasından istifadə etməkdir:

JQVMAP (keçmiş vectormap.js) və ya yeni Avstriya layihəsi mapmap.js istifadə edin

4) Topoqrafik veb xəritələmə kitabxanasından istifadə edin

Burada açıq kitabxanalardan leaflet.js və ya openlayers.js istifadə edə bilərsiniz. Bunlarla ölkələrinizi .geojson olaraq əlavə etməyiniz ən yaxşı yanaşma olacaq. Geojson, ən coğrafi proqramlarla ölkələrinizlə qarşılıqlı əlaqə qurmağa imkan verən çox gözəl bir formatdır.

5) Öz plitələrinizi istifadə edərək yaradın

Bu yanaşma ən təsirli həlldir, amma tətbiq etmək ən sadə deyil. Burada beş yanaşmanı izah edən çox gözəl bir dərslik var. Ancaq düşünürəm ki, ən sadəsi TileMill -dən istifadə etməkdir.

6) Xəritəçəkəndən istifadə Əgər xəritəçəkənlərlə tanış deyilsinizsə, bu yalnız geniş bir tətbiq tətbiq edəcəyiniz zaman nəzərə alınmalıdır. Nice Mapservers Deegree və populyar Geoserverdir.

Bütün bu yanaşmaların müsbət və mənfi tərəfləri var, amma düşünürəm ki, bu həllərdən biri ehtiyaclarınıza uyğun olacaq və sizə ən yaxşı uğurlar arzulayıram!


Mükəmməllik Xəritəsi: Gözəl Veb Xəritələri etmək üçün D3.js -dən istifadə

Məlumatlara əsaslanan sənədlər və ya D3.js, "məlumatlara əsaslanan sənədləri idarə etmək üçün bir JavaScript kitabxanasıdır". Və ya daha sadə desək, D3.js bir məlumat vizual kitabxanasıdır. Mike Bostock tərəfindən məlumatların statik göstərilməsi ilə interaktiv və cizgi məlumat vizualizasiyaları arasındakı boşluğu aradan qaldırmaq fikri ilə hazırlanmışdır.

D3, bir ton istifadəsi olan güclü bir kitabxanadır. Bu dərslikdə D3 -ün xüsusilə cəlbedici bir tətbiqini müzakirə edəcəyəm: xəritə hazırlama. Faydalı və məlumatlı bir veb xəritəsi qurmağın ümumi çətinliklərindən keçəcəyik və hər bir vəziyyətdə D3.js -nin xəritələrin gözəl görünməsi və gözəl olması üçün lazım olan hər şeyi bacarıqlı JavaScript tərtibatçılarına verdiyini göstərəcəyik.

D3.js nə üçün istifadə olunur?

D3.js hər hansı bir ixtiyari məlumatı Document Object Modelinə (DOM) bağlaya bilər və sonra JavaScript, CSS, HTML və SVG -dən istifadə edərək həmin məlumatlara əsaslanan sənədə dəyişikliklər tətbiq edə bilər. Nəticə sadə HTML çıxışı və ya animasiyalar, keçişlər və qarşılıqlı əlaqə kimi dinamik davranışı olan interaktiv SVG cədvəlləri ola bilər. Bütün məlumatların çevrilməsi və göstərilməsi müştəri tərəfində, brauzerdə aparılır.

Ən sadə halda, D3.js bir DOM -u idarə etmək üçün istifadə edilə bilər. Boş bir sənəd gövdəsinə "Hello World" mətni ilə bir paraqraf elementi əlavə etmək üçün D3.js istifadə edildiyi sadə bir nümunə:

Bununla birlikdə, D3.js -in gücü məlumatların görmə qabiliyyətindədir. Məsələn, qrafiklər yaratmaq üçün istifadə edilə bilər. Cizgi cədvəlləri yaratmaq üçün istifadə edilə bilər. Hətta fərqli bağlı çizelgeleri birləşdirmək və canlandırmaq üçün də istifadə edilə bilər.

Veb Xəritələri və Coğrafi Məlumat Vizualizasiyası üçün D3

Ancaq D3.js yalnız DOM manipulyasiyasından və ya qrafiklər çəkməkdən daha çox istifadə edilə bilər. D3.js, coğrafi məlumatların işlənməsinə gəldikdə son dərəcə güclüdür. Coğrafi məlumatların manipulyasiyası və təqdim edilməsi çox çətin ola bilər, ancaq D3.js ilə xəritə qurmaq olduqca sadədir.

JSON-a uyğun məlumat formatında saxlanılan məlumatlara əsaslanaraq dünya xəritəsi çəkəcək bir D3.js nümunəsidir. Sadəcə xəritənin ölçüsünü və istifadə ediləcək coğrafi proyeksiyanı təyin etməlisiniz (bu barədə daha sonra), bir SVG elementi təyin etməli, DOM -a əlavə etməli və JSON -dan istifadə edərək xəritə məlumatlarını yükləməlisiniz. Xəritə tərtibatı CSS vasitəsilə həyata keçirilir.

var proyeksiya = d3.geo.mercator ()

var svg = d3.select ("body"). əlavə et ("svg")

d3.json ("dünya-110m2.json", funksiya (səhv, topologiya) <

D3 üçün coğrafi məlumatlar

Bu D3.js təlimatı üçün, xəritə quruculuğunun JSON formatında, xüsusən də GeoJSON və TopoJSON spesifikasiyalarında formatlanmış məlumatlarla ən yaxşı işlədiyini unutmayın.

GeoJSON "müxtəlif coğrafi məlumat strukturlarını kodlaşdırmaq üçün bir formatdır". Ad/dəyər cütlərinin xüsusiyyət kolleksiyalarına qruplaşdırılmış diskret həndəsə obyektlərini təmsil etmək üçün hazırlanmışdır.

TopoJSON, həndəsələrin "qövs adlanan paylaşılan xətt seqmentlərindən bir -birinə yapışdırıldığı" topologiyanı kodlaya bilən GeoJSON -un bir uzantısıdır. TopoJSON, yalnız məkan məlumatlarını deyil, coğrafi xüsusiyyətlər arasında əlaqəli məlumatları saxlayaraq artıqlığı aradan qaldırır. Nəticədə, həndəsə xüsusiyyətlərini bölüşdüyü yerlərdə həndəsə daha yığcam və birləşdirilmişdir. Bu, GeoJSON ekvivalentindən 80% kiçik tipik TopoJSON faylı ilə nəticələnir.

Beləliklə, məsələn, bir -birinin ardınca bir neçə ölkənin olduğu bir xəritə verildiyi təqdirdə, sərhədlərin paylaşılan hissələri iki dəfə GeoJSON -da, hər iki ölkə sərhədində saxlanılacaq. TopoJSON -da yalnız bir sətir olacaq.

Xəritə Kitabxanaları: Google Xəritə və Leaflet.js

Bu gün ən populyar Xəritəçəkmə kitabxanaları Google Maps və Leaflet -dir. Vebdə "sürüşkən xəritələr" əldə etmək üçün hazırlanmışdır. "Sürüşkən xəritələr", xəritənin ətrafında böyütməyə və sürüşdürməyə imkan verən müasir JavaScript ilə işləyən veb xəritələrinə aid bir termindir.

Leaflet Google Xəritələrə əla alternativdir. Sadəliyi, performansı və istifadəsini nəzərə alaraq mobil dostu interaktiv xəritələr hazırlamaq üçün hazırlanmış açıq mənbə JavaScript kitabxanasıdır. Leaflet, İnternetdə mövcud olan rastr əsaslı xəritələrin böyük bir seçimindən istifadə edərkən ən yaxşısıdır və kirəmitli xəritələrlə işləmək və təqdimat qabiliyyətlərini gətirir.

Vərəqə, D3.js -in məlumat manipulyasiya xüsusiyyətləri ilə birlikdə və vektor əsaslı qrafika üçün D3.js -dən istifadə etməklə böyük uğurla istifadə edilə bilər. Bunları bir araya gətirmək hər iki kitabxanada ən yaxşısını gətirir.

Google Xəritələri D3.js ilə birləşdirmək daha çətindir, çünki Google Xəritə açıq mənbə deyil. Google Xəritələri və D3 -dən birlikdə istifadə etmək mümkündür, lakin bu, əsasən D3.js ilə Google Xəritə fon xəritələri üzərində məlumatların üst -üstə qoyulması ilə məhdudlaşır. Hacking olmadan daha dərin inteqrasiya mümkün deyil.

Proqnozlar - Sferik Merkatorun Ardınca

3 ölçülü sferik Yerin xəritələrini 2 ölçülü səthlərə necə çəkmək məsələsi köhnə və mürəkkəb bir problemdir. Bir xəritə üçün ən yaxşı proyeksiyanı seçmək hər bir veb xəritədə veriləcək vacib bir qərardır.

Yuxarıdakı sadə dünya xəritəmiz D3.js dərsliyimizdə, d3.geo.mercator () çağıraraq Sferik Mercator proyeksiya koordinat sistemindən istifadə etdik. Bu proyeksiyaya Web Mercator da deyilir. Bu proqnoz Google Xəritələri təqdim etdikdə Google tərəfindən populyarlaşdı. Daha sonra digər veb xidmətləri də proyeksiyanı qəbul etdi, yəni OpenStreetMap, Bing Maps, Here Maps və MapQuest. Bu, Sferik Mercatoru onlayn sürüşkən xəritələr üçün çox populyar bir proyeksiya halına gətirdi.

Bütün Xəritəçəkmə kitabxanaları, Sferik Mercator proyeksiyasını qutudan kənarda dəstəkləyir. Başqa proyeksiyalardan istifadə etmək istəyirsinizsə, məsələn, bir koordinat sistemindən digərinə hər hansı bir çevrilmə edə bilən Proj4js kitabxanasından istifadə etməlisiniz. Leaflet vəziyyətində, bir Proj4Leaflet plagini var. Google Xəritə vəziyyətində, heç bir şey yoxdur.

D3.js, bir çox fərqli coğrafi proyeksiya üçün daxili dəstəyi ilə kartoqrafik proyeksiyaları yeni bir səviyyəyə qaldırır. D3.js coğrafi proyeksiyaları tam həndəsi çevrilmələr kimi modelləşdirir, yəni düz xətlər əyrilərə proqnozlaşdırıldıqda, D3.js xətləri bölmək və proyeksiya artefaktlarını ortadan qaldırmaq üçün konfiqurasiya edilə bilən uyğunlaşdırma nümunəsini tətbiq edir. Genişləndirilmiş Coğrafi Projeksiyonlar D3 plagini, dəstəklənən proyeksiyaların sayını 40 -dan yuxarıya çatdırır. D3.geo.projection və d3.geo.projectionMutator istifadə edərək tamamilə yeni bir xüsusi proyeksiya yaratmaq mümkündür.

Daha əvvəl də qeyd edildiyi kimi, D3.js -in əsas üstünlüklərindən biri vektor məlumatları ilə işləməkdir. Raster məlumatlarından istifadə etmək üçün D3.js -ni Leaflet ilə birləşdirmək imkanı var. Ancaq sürüşkən xəritələr yaratmaq üçün d3.geo.tile istifadə edərək yalnız D3.js ilə hər şeyi etmək üçün bir seçim də var. Yalnız D3.js ilə belə insanlar rastr xəritələri ilə inanılmaz işlər görürlər.

Uçmaqda vektor manipulyasiyası

Klassik kartoqrafiyada ən böyük çətinliklərdən biri xəritənin ümumiləşdirilməsidir. Bacardığınız qədər ətraflı həndəsəyə sahib olmaq istəyirsiniz, ancaq bu məlumatların göstərilən xəritənin miqyasına uyğunlaşması lazımdır. Çox yüksək bir məlumat qətnaməsi yükləmə müddətini artırır və göstərilməsini yavaşlatır, çox aşağı bir qətnamə detalları və topoloji əlaqələri pozur. Vektor məlumatlarından istifadə edən sürüşkən xəritələr xəritənin ümumiləşdirilməsi ilə böyük bir problemlə üzləşə bilər.

Bir seçim əvvəlcədən xəritənin ümumiləşdirilməsini etməkdir: fərqli qətnamələrdə fərqli məlumat dəstlərinə sahib olmaq və sonra cari seçilmiş miqyas üçün uyğun məlumat dəstini göstərmək. Ancaq bu, məlumat dəstlərini çoxaldır, məlumatların saxlanmasını çətinləşdirir və səhvlərə meyllidir. Yenə də əksər xəritələşdirmə kitabxanaları bu seçimlə məhdudlaşır.

Ən yaxşı həll xəritəni ümumiləşdirməkdir. Güclü məlumat manipulyasiya xüsusiyyətləri ilə yenə D3.js gəlir. D3.js brauzerdə xəttin sadələşdirilməsinə imkan verir.

D3.js -ni mənimsəmək asan deyil və dik bir öyrənmə əyrisi var. JavaScript obyektləri, jQuery zəncirvari sintaksisi, SVG və CSS və əlbəttə D3 API -ləri ilə bir çox texnologiya ilə tanış olmaq lazımdır. Bunun üzərinə, sonunda gözəl qrafika yaratmaq üçün bir az dizayn bacarığına sahib olmaq lazımdır. Xoşbəxtlikdən, D3.js -in böyük bir icması var və insanların qazması üçün çoxlu qaynaqlar var. D3 öyrənmək üçün əla bir başlanğıc nöqtəsi bu dərslərdir.

Nümunələri araşdıraraq öyrənməyi sevirsinizsə, Mike Bostock veb səhifəsində 600 -dən çox D3.js nümunəsini paylaşdı. Bütün D3.js nümunələrində versiya nəzarəti üçün git anbarı var və forkable, cloneable və şərh edilə bilər.

CartoDB istifadə edirsinizsə, CartoDB -nin D3 xəritələrini asanlaşdırdığını eşitməkdən məmnun olacaqsınız.

Və sonunda kiçik bir bonus üçün, D3 -ün edə biləcəyi inanılmaz şeyləri göstərən ən sevdiyim nümunələrdən biri:

Earth, D3.js. ilə hazırlanmış bütün dünyanın qlobal cizgi 3D külək xəritəsi. Dünya, Milli Ətraf Mühitin Proqnozlaşdırılması Mərkəzlərində, NOAA / Milli İstilikdə superkompüterlər tərəfindən edilən hava proqnozlarına əsaslanaraq, qlobal hava şəraitinin vizualizasiyadır. və JSON -a çevrildi. Külək sürətinin oxunması üçün yüksəkliklər kimi göstərilən məlumatları fərdiləşdirə, üst -üstə düşən məlumatları dəyişdirə və hətta Yerin proyeksiyasını dəyişə bilərsiniz.

Tomislav Bacinger, veb, mobil və masa üstü tətbiqlərin dizaynı və inkişafı sahəsində geniş təcrübəyə malik aparıcı proqram mühəndisi və sahibkardır. Müxtəlif coğrafi texnologiyalar haqqında mükəmməl biliklərə malikdir və xəritələr və vizualizasiyalara böyük həvəsi var. Çevikdir və müstəqil bir freelancer olaraq və ya komandalar daxilində inteqrasiya edə bilir.


Altıbucaqlı Şəbəkə Yaradılması və Projeksiyonu

İnteraktivliyi dəstəkləmək üçün üç Javascript faylı birləşdirilərək ekran koordinatını müvafiq hex grid koordinatına uyğunlaşdırılır. Ayrıca, altıbucaqlı nöqtənin yeri fırlanan bir kürədə göstərilmək üçün göndərilir.

Təəssüf ki, 3D sferik xəritəyə çıxan 2D altıbucaqlı silindrik xəritə mükəmməl deyil (nə etsəniz də, proyeksiya pozulacaq), şimal/cənub qütblərinə doğru gördüyünüz kimi, altıbucaqlı hüceyrələrin sahəsi təhrif olunur. Maraqlanan oxucu kodu təkmilləşdirə bilərmi?

Tam demo mənbə kodu D3HexMap github repo yoldaşı tərəfindən ödənilə bilər. Nümayişdən sonra daha çox izahat veriləcək.

Demo İnteraktiv Vizualizasiya

Vurgulanan altıbucaqlı hüceyrənin mərkəzinə (qırmızı nöqtə) döndüyünü görmək üçün imlecinizi altıbucaqlı ızgara üzərində hərəkət etdirməyə çalışın.


1 Cavab 1

Alberləri düzəldə bilməzsən. Albers proyeksiyası konik bir proyeksiyadır - paralellər fərqli ölçülərdədir, çünki konusa yansıdırlar, bu da proqnozlaşdırılan uzunluqların fərqli olduğu üçün bir əyrinin olacağı deməkdir (paralellər də dünyanın müxtəlif uzunluqlarıdır).

Silindrik Mecator proyeksiyası ekvatorla eyni genişliyi tutmaq üçün daha qısa paralelləri uzadır, buna görə də paralellər düz və üfüqi və Merkator proyeksiyasında bərabər uzunluqdadır.

Bir Albers proyeksiyasından bəzi əyriləri çıxarmaq üçün sui -istifadə edə bilərik, ancaq d3 -ün geoAlbersUsa proyeksiyası bu cür dəyişikliyə icazə verməyən kompozit bir proyeksiyadır. Bu, həqiqətən, yalnız proqnozlar toplusudur.

Bunun əvəzinə d3.geoTransform və d3.geoMercator istifadə edərək öz kompozit proyeksiyamızı yarada bilərik. Nəticə belə görünməlidir:

Budur sadə bir d3 geoTransform:

Bu yalnız x və y dəyərlərini ikiyə vurur, belə bir yol generatoruna ötürülə bilər: d3.geoPath (proyeksiya)

Burada kompozit bir proyeksiya etmək üçün üç proyeksiyanı düzgün qurmalı və sonra xəritəyə düzgün tərcümə etməliyik. 960x500 xəritəsini (d3.geoAlbersUsa -ya bənzər) götürərək bu proyeksiyaları qurdum:

Merkator, həddindən artıq enliklərə keçdikcə ölçüsünü həqiqətən şişirdir və buna görə də coğrafi cəhətdən böyük olan (Texasdan iki dəfə böyük) Alyaska olur. çox proqnozlaşdırıldıqda çox böyükdür. Ölçüsünü aşağı saldım, buna uyğun gəlir (bu, əksinə, proqnozlaşdırılan ölçülərin 1/10 hissəsidir).

Həm də hansı proyeksiyadan istifadə edəcəyimizi seçməliyik, buna görə bir nöqtənin Alyaskada, Havayda və ya aşağı 48 -də olub olmadığını müəyyən edə biləcəyimiz bir neçə qaydaya əsaslanaraq:

Budur, üç proqnoz və müəyyən bir nöqtə üçün hansının istifadə olunacağını təyin etmək üçün bir metodumuz var.

Hamısını daha çox saxlamaq üçün d3.geoMercatorUsa () olaraq yığacağam və əldə edirik:


SCNShere geometriyasında SCNMaterial üçün veb merkator proyeksiya xəritəsindən necə istifadə edə bilərəm?

Tətbiqimdə sadə bir dünya görünüşü var. Əvvəllər WhirlyGlobe istifadə edirdik, amma bunun əvəzinə SceneKit istifadə etməyi seçdik. Whirly Globe -da xəritə plitələrindən istifadə etməyimiz və SceneKit -də (deyə bildiyim qədər) işləməməsi xaricində hər şey əla işləyir və bundan məmnunuq. Bu xəritəni (döşənmiş, parçalanmış və ya bir fayl olaraq) bir SCNSphere həndəsəsində istifadə etmək istəyirik.

Apple -ın sənədlərində istifadə etdiyi peyk xəritəsini kopyaladım və doğru görünür, amma ehtiyacımız olmayan xəritə deyil. Xəritəmiz veb/kürə merkator proyeksiyasındadır və sahəmdə SceneKit -də pis görünür.

Apple -ın istifadə etdiyi 2x1 proyeksiyasının nə adlandırıldığını bilmirəm*, buna görə də hələlik bu məlumatlar mənim üçün kifayət qədər ola bilər.

  • Mən indi edirəm:
    • Equirectangular - Əlbətdə yazdıqdan sonra SAĞ.
    • Platte Carre olaraq da bilinir (Hal Muellerin şərhinə görə)

    Veb merkator proyeksiyasında xəritəmizin ixracı 1x1 -dir. Yalnız şaquli oxda sıxmaq işləmir (SceneKit bunu avtomatik olaraq edir).

    Lazım gələrsə bir alət və ya hibriddən istifadə edərək faylı proqramlı olaraq çevirə bilərəm.


    Sferik merkator SVG -dən kirəmitli bir xəritə necə yaradılır? - Coğrafi İnformasiya Sistemləri

    Polymaps, müasir veb brauzerlərdə dinamik, interaktiv xəritələr hazırlamaq üçün pulsuz bir JavaScript kitabxanasıdır.

    Polymaps, xəritələr üzərində çoxlu zoom məlumat dəstlərinin sürətli bir şəkildə göstərilməsini təmin edir və OpenStreetMap, CloudMade, Bing və digər şəkil əsaslı veb xəritələri təmin edənlərin adi kartoqrafiyasına əlavə olaraq, döşənmiş vektor məlumatları üçün müxtəlif vizual təqdimatları dəstəkləyir.

    Polymaps məlumatları tam miqyasda yükləyə bildiyi üçün, ölkə səviyyəsindən aşağıya, əyalətlərə, şəhərlərə, məhəllələrə və ayrı -ayrı küçələrə qədər məlumatları göstərmək üçün idealdır. Polymaps məlumatları göstərmək üçün SVG (Ölçeklenebilir Vektor Qrafikası) istifadə etdiyindən, məlumatlarınızın dizaynını təyin etmək üçün tanış, rahat CSS qaydalarından istifadə edə bilərsiniz. Polymaps, görüntüləri və məlumatları üçün tanınmış sferik merkator kafel formatından istifadə etdiyinə görə məlumat dərc etmək çox çətindir.


    2 Cavab 2

    Icosahedral xəritəsi

    İkosahedron 20 üçbucaqlı üzlü çoxbucaqlıdır. Icosahedral xəritələri tez -tez RPG üçün istifadə olunur. İkosaedronuzu asanlıqla kürəyə çevirə bilərsiniz. Torpaq kütlələri çox da pozulmayacaq.

    Xəritənizi düzləşdirdiyiniz zaman şəkil (a) kimi görünəcək

    Dünyanı (b) və ikosaedrini (c) müqayisə edə bilərsiniz. Təhrif çox da böyük deyil.

    Xəritəni düzləşdirərkən qitələrinizin yarısını kəsmək istəmirsinizsə, üçbucaqları hərəkət etdirə bilərsiniz. Dymaxion xəritəsi, bu üsulla əldə edə biləcəyinizə yaxşı bir nümunədir.

    Ən böyük narahatçılığınız xəritənizin qəribə bir forma sahib ola bilməsidir və okeanları kəsmək məcburiyyətində qalacaqsınız. Ancaq mükəmməl bir həll yoxdur. Sahələri və məsafələri qorumaq istəyirsinizsə, bu ən yaxşı seçimlərdən biridir.

    Sualınızı düzgün başa düşsəm, dəqiq bir proyeksiya istəyiniz o qədər də çox deyil, dünyanın hər hansı bir yerində xəritəsinin mərkəzinə bənzəyən bir xarakterə (simvol) sahib olmaq istəyirsiniz və bunu bacarmaq istəyirsiniz. o char ilə başqa bir char arasında dəqiq bir məsafə ölçüsü yaradın.

    Əgər belədirsə, AlexP -in şərhi əslində 'doğru' cavabdır. Universal Transverse Mercator proyeksiya metodu əslində bütün onlayn xəritələrin (Apple, Bing, Google OpenStreetMaps və s.) Necə işlədiyidir. Onlara görə, hər halda Bringyabarraback -da yeni bir yaşayış binası tikəndə və ya Weardafarkarwee ərazisində bir küçə düzəltdikdə bütün qlobal xəritəni yükləyən bir telefon (məsələn) istəmədiyiniz halda xəritəni döşəmək istəyirsiniz. Yalnız istəyərsən müvafiq yükləyə biləcəyiniz xəritələr və bu, harada olduğunuz və harada getdiyiniz üçün xəritə plitələri deməkdir.

    Dəqiqlik baxımından, bu xəritələr sahənin ÇOX dəqiq tərcümələridir, çünki hər hansı bir mənalı xətaya girəndə yeni bir kafelə keçirlər. Beləliklə, 'xəritədə' birdən çox simvol varsa, onları müvafiq kafelin üzərinə qoyun və oradan uzaqlaşdıqda bitişik kafelini endirib davam edin.

    Məsafələri müəyyən etmək bir az daha çətindir, ancaq plitələriniz sərhədlərə uyğun olduğu üçün plitələri A nöqtəsi ilə B nöqtəsi arasına qoyursunuz, aralarındakı düz xətt məsafəsini VƏ AÇIĞI ölçün və məsafəni ölçmək sadə trigonometriya. Bu yanaşma təəccüblü dərəcədə dəqiqdir və ağlabatan tolerantlıq çərçivəsində istədiyinizi edəcək. (Nə qədər dəqiq bir məsafə hesablamasına ehtiyacınız olduğunu bilmirəm, amma xəritənin proyeksiya növlərindən danışmağınız ya çox dəqiqliyə ehtiyacınız olduğu və ya problemi çox bişirdiyiniz deməkdir, heç bir inciklik yoxdur.)

    AlexP -nin təklif etdiyi kimi, düşünülmüş hər şey planetdəki GPS əsaslı hər bir naviqasiya sistemi üçün kifayət qədər bir yanaşmadır. Axtarışınızı oradan başlamanızı ciddi şəkildə təklif edərdim və kifayət qədər dəqiq deyilsə, niyə daha yaxşı dəqiqliyə ehtiyacınız olduğunu anlamaq üçün tələblərinizi yenidən nəzərdən keçirin.


    6.5 Məlumatın Sferik Merkator Koordinat Sisteminə Çevrilməsi

    Google Xəritə kimi məşhur onlayn xəritə xidmətləri xəritələri üçün sferik bir Mercator proyeksiyasından istifadə edirlər. Bir Oracle Database buraxılışını 11.1.0.7 -dən əvvəl istifadə edirsinizsə və Google Xəritələr plitəsi kimi bir kafel qatının üstünə öz məkan məlumatlarınızı qoymalısınızsa, koordinatları düzgün idarə etmək üçün verilənlər bazasını qurmalısınız. iki koordinat sistemi eyni deyilsə, həmin kafel qatının koordinat sistemi ilə öz məlumat koordinat sisteminiz arasında sistem çevrilməsi.

    Bu hissədəki hərəkətləri yerinə yetirmək üçün verilənlər bazanız 10.2.0.1 və ya daha yeni bir versiya olmalıdır.

    Google Xəritə, Yahoo! Xəritələr. Bu koordinat sistemi (SRID 3785) 11.1.0.7 Buraxılışından əvvəl Oracle Spatial and Graph ilə təmin edilməmişdir. MapViewer və Oracle Spatial and Graph -ın öz məlumatlarınızı bu koordinat sisteminə çevirməsini təmin etmək üçün əvvəlcədən təyin edilməmişsə, əvvəlcə bu koordinat sistemi tərifini Oracle verilənlər bazanıza əlavə etməlisiniz.

    Bu koordinat sisteminin müəyyən olub olmadığını yoxlamaq üçün aşağıdakı ifadəni daxil edə bilərsiniz:

    Əvvəlki ifadə bir sətir qaytarırsa, bu hissədəki hərəkətləri yerinə yetirmək lazım deyil. Əvvəlki bəyanat bir sətir qaytarmırsa, öz məkan məlumatlarınızı kafel qatının üstünə qoymaq üçün bu hissədəki hərəkətləri etməlisiniz.

    Verilənlər bazasına DBA rolu olan kimi imtiyazlı bir istifadəçi olaraq qoşulun.

    Csdefinition.sql skriptini aşağıdakı kimi işlədin. ($ MAPVIEWER_HOME -ni MapViewer -in yerləşdirildiyi WebLogic Server nümunəsinin kök qovluğu ilə əvəz edin və əmri tək sətirə daxil edin.)

    Linux: $ MAPVIEWER_HOME /j2ee/home/applications/mapviewer/web/WEB-INF/admin/csdefinition.sql

    Windows: $ MAPVIEWER_HOME j2ee home applications mapviewer web WEB-INF admin csdefinition.sql

    Lazım gələrsə, məlumatları müəyyən bir koordinat sistemindən Sferik Merkator sisteminə çevirərkən Oracle Spatial and Graph -ın datum çevrilməsini atlamasına səbəb olmaq üçün bir çevrilmə qaydası yaradın. Belə bir çevrilmə qaydası yaratmağın lazım olub olmadığını öyrənmək üçün Bölmə 6.5.1 -ə baxın.

    Daha yaxşı performans üçün məkan məlumatlarınızı əvvəlcədən dəyişdirin və ya MapViewer-in məlumatları iş vaxtı dəyişdirməsinə icazə verin ("anında"). Diqqət yetirin ki, verilənlər bazası buraxılışı 10.2.0.4-dən əvvəldirsə, əvvəlcədən dəyişdirmək yeganə seçimdir.

    Bütün məlumatlarınızı əvvəlcədən Sferik Merkator koordinat sisteminə çevirmək üçün bütün məlumatlarda SDO_CS.TRANSFORM_LAYER prosedurundan istifadə edin və çevrilmiş məlumatları Xəritəçəkmə üçün istifadə edin. (Oracle Spatial and Graph Developer's Guide -də SDO_CS.TRANSFORM_LAYER istinad hissəsinə baxın.)

    MapViewer -in məlumatları işləmə müddətində çevirməsinə icazə vermək üçün xəritələşdirmə üçün istifadə etməzdən əvvəl məlumatları çevirməyin.

    6.5.1 Datum Dönüşümünü Atlamaq üçün Çevrilmə Qaydasının Yaradılması

    Məkan məlumatları çox vaxt WGS84 və ya BNG kimi ellipsoid məlumatlarına əsaslanan bir koordinat sistemində olur. Belə hallarda, Oracle Spatial and Graph standart olaraq məlumatları Sferik Merkator sisteminə çevirərkən datum çevrilməsini tətbiq edir. Bu, məlumatlarınızla Google Xəritə digər xəritə xidməti plitələri arasında az miqdarda uyğunsuzluq və ya səhv gətirəcək. Bu problemi həll etmək istəyirsinizsə, Oracle Spatial və Graph -a verilənləri müəyyən bir koordinat sistemindən Kürə Mercator sisteminə çevirərkən məlumat çevrilməsini atlamağı söyləyən çevrilmə qaydaları yarada bilərsiniz.

    Misal 6-4, csdefinition.sql skriptinə daxil olan və bu cür çevrilmə qaydaları yaradan SQL ifadələrini göstərir. Bununla birlikdə, məkan məlumatlarınızın koordinat sistemi Misal 6-4-də göstərilən qaydalarla əhatə olunmursa, məlumatlarınızın koordinat sistemi bu qaydalarla əhatə olunmadığı təqdirdə öz qaydanızı yarada bilərsiniz. (Koordinat sistemi çevrilmə qaydaları yaratmaq haqqında daha çox məlumat üçün Oracle Spatial and Graph Developer's Guide -ə baxın.)

    Nümunə 6-4 csdefinition.sql Scriptində müəyyən edilmiş Çevrilmə Qaydaları


    Img2grd (1) - Linux Man Səhifələri

    Linux -da img2grd təlimatını göstərmək üçün əmr: $ man 1 img2grd

    SİNOPSİS

    img2grd imgfile grdfile bölgə növü [] [[minlat/maxlat]] [] [dəqiqə] [] [navg] [[miqyas]] [[səviyyə]] [maxlon] [-n & ltflags & gt]

    Qeyd: Seçim bayrağı ilə əlaqəli arqumentlər arasında boş yerə icazə verilmir.

    TƏSVİRİ

    img2grd bir img formatlı fayl oxuyur, bir alt dəsti çıxarır və bir grid faylına yazır. -M seçimi img faylının Sferik Mercator proyeksiyasının qorunub saxlanılmamasını və ya Mercator proyeksiyasını ləğv etməklə Coğrafi bir cədvəlin yazılıb yazılmamasını diktə edir. Coğrafi şəbəkə seçilsə, verilmiş dəqiq -R üzərinə yenidən nümunə götürməyi də tələb edə bilərsiniz.

    TƏLƏB EDİLƏN ARGUMENTLƏR

    OPSİYONLU ARGUMENTS

    Coğrafi nümunələr

    Çıxış şəbəkəsinin coğrafi koordinatlarda olması lazımdırsa, -M seçimi istisna edilməlidir. World_grav.img.7.2 -R -40/40/-70/-30 bölgəsindəki məlumatları çıxarmaq və coğrafi koordinatları əldə etmək üçün yenidən layihələndirmək üçün cəhd edə bilərsiniz.

    İmg faylındakı enlik aralığı Mercator vahidlərində eyni məsafədə olduğu üçün ortaya çıxan cədvəl göstərilən -R ilə tam uyğun gəlməyəcək və enlik aralığı uzunluq aralığına bərabər olmayacaq. Uzunluq və enlikdə -R ilə eyni uyğunluğa ehtiyacınız varsa, -E seçimindən istifadə edin:

    MERCATOR NÜMUNƏLƏRİ

    Img faylları bir Mercator proyeksiyasında olduğundan, planınız bir Mercator xəritəsi hazırlamaqdırsa coğrafi bir şəbəkə çıxarmamalısınız. Bunu etsəniz, qısa dalğa detallarını itirərək ızgaranı proyeksiya və yenidən redaktə etməyi bitirdiniz. İstədiyiniz Mercator proyeksiyası ilə eyni miqyaslı xətti bir proyeksiya istifadə edərək -M istifadə etmək və cədvəl qurmaq daha yaxşıdır (bax GMT Misal 29). World_grav.img.7.2 -R -40/40/-70/-30 bölgəsindəki məlumatları çıxarmaq üçün çalıştırın.

    Qeyd edək ki, -V seçimi, aralığın -R -40/40/-70.0004681551/-29.9945810754 -ə düzəldildiyini bildirir. Şəbəkə fayl başlığının bölgəsinin -R 0/80/0/67.9666667 olduğunu göstərdiyini öyrənmək üçün grdinfo -dan da istifadə edə bilərik. -70.0004681551/-29.9945810754 və -Jm 1. Beləliklə, ship.lonlatgrav almaq və merc_grav.nc nümunəsindən istifadə etmək üçün bunu edə bilərik:

    Belə bir tətbiqdə məlumatların proyeksiyası və proyektdən çıxarılması üçün yuxarıda göstərilən metoddan istifadə etmək tövsiyə olunur, çünki o zaman yalnız bir interpolasiya addımı var (grdtrack -də). Biri əvvəlcə grid faylını lon, lat -a çevirməyə və sonra nümunə götürməyə çalışırsa, iki interpolasiya mərhələsi var (çevrilmədə və nümunədə).

    İstifadə edə biləcəyimiz yuxarıdakı cədvəldən uzun və uzun bir ızgara düzəltmək üçün

    Bəzi hallarda bu asan olmayacaq, çünki iki koordinat sistemindəki -R yaxşı uyğun gələ bilməz. Bu baş verdikdə biz də istifadə edə bilərik (əslində istifadə etmək həmişə daha yaxşı ola bilər)

    Yuxarıdakı bölgənin Mercator xəritəsini yaratmaq üçün, PROJ_LENGTH_UNIT üçün gmt.conf dəyərimizin düym olduğunu düşünün. Sonra yuxarıdakı merc_grav.nc faylı -Jm 1i ilə proqnozlaşdırıldığı üçün eni 80 düymdür. Bu şəbəkəyə tətbiq olunan hər hansı bir xəritə proqramında (məsələn, grdcontour, grdimage, grdview) -Jx 0.1i istifadə edərək 8 düym genişliyində bir xəritə edə bilərik, sonra da lon, lat (məsələn, psxy, pscoast) üzərində işləyən bindirmələr üçün iki sistemin uyğunlaşması üçün yuxarıdakı tənzimlənmiş -R və -Jm 0.1 istifadə edə bilər.

    Ancaq bundan daha ağıllı ola bilərik. Giriş img faylının 2,0 dəqiqəlik genişlikdə piksellərə sahib olduğunu dərk edərək (və ya nx və ny -ni grdinfo merc_grav.nc ilə yoxlayırıq), merc_grav.nc -nin img faylının tam qətnaməsindən istifadə etdiyini və 2400 ilə 2039 piksel və 8 düym ölçüdə olduğunu anlayırıq. geniş, hər düym üçün 300 pikseldir. O qədər ehtiyacımız olmadığına qərar veririk və hər düym üçün 100 piksel ilə kifayətlənəcəyik, buna görə məlumatları 3 ilə 3 kvadrat arasında ortalamaq istəyirik. (Kontur qurmaq istəsək, yəqin ki, hamar kontur əldə etmək üçün məlumatları daha çox ortalamağı seçərik (məsələn, 6 ilə 6).) 2039 -un 3 -ə bölünmədiyi üçün bu dəfə fərqli bir düzəliş -R alacağıq:

    Bu dəfə tənzimlənmiş bölgənin -R -40/40/-70.023256525/-29.9368261101 olduğunu və çıxışın 800 ilə 601 pikseldir, bizim üçün daha yaxşı bir ölçü olduğunu görürük. İndi bunun üçün grdgradient istifadə edərək süni işıqlandırma faylı yarada bilərik:

    və & quotgrav.cpt & quot adlı bir CPT faylımız varsa, belə bir rəngli gölgeli bir relyef xəritəsi yarada bilərik:

    Bir img faylından yalnız məhdudlaşdırılmış məlumat dəyərlərini lat/lon koordinatlarında əldə etmək istədiyinizi düşünün. Sonra img2grd -T 2 seçimi ilə işləyin, dəyərləri atmaq üçün grd2xyz istifadə edin, NaN -ləri aradan qaldırmaq üçün grep -v NaN -dən keçin və yuxarıdakı kimi tərs proyeksiya ilə mapproject vasitəsilə boru keçirin.