Daha çox

ST_AsSVG istifadə edərək PostGIS-dən SVG necə göstərilə bilər


Dünən axşam National Geographic-dən bir kartoqraf ilə danışarkən, PostGIS və Inkscape-də qurulmuş açıq mənbəli xəritə nəşr alətləri dəstinə (iş axışı və başqalarının ArcGIS məlumatlarını istifadə edərək Illustrator'u Avenza Map Publisher ilə necə istifadə etməsi) yenidən maraqlandım (zirvə?).

PostGIS ST_AsSVG əmri ilə bir SVG faylı olaraq çıxışla necə işləyəcəyimə əmin deyiləm. Digər müzakirələrdə SVG-lərin bir şəkildə ixrac edilə biləcəyini görə bilərəm, amma bunun tam olaraq necə işlədiyindən əmin deyiləm.

Bununla yanaşı, bəlkə də yalnız statik bir SVG sənədini ixrac etmək əmrini yönəltməyin bir məsələsi olduğunu düşünsək - Inkscape'in birbaşa PostGIS-dən kənar bir SVG oxuması mümkün ola bilərmi?


Postgis funksiyası ST_AsSVG sadəcə həndəsələri SVG nöqtəsinə və ya yol ekvivalentlərinə çevirir və birbaşa hər hansı bir atribut / üslub əlavə etməyinizə imkan vermir. Məsələn, bir nöqtə, linestring və çoxbucaqlı bir sorğu:

İLƏ şəkillərlə (geom, atribut) AS (VALUES ((SELECT ST_MakePoint (0,0)), 1), ((ST_MakeLine (ST_MakePoint (0,0), ST_MakePoint (10,10))), 2), ((SELECT ST_MakeBox2d (ST_MakePoint (0,0), ST_MakePoint (10,10))), 3)) ST_AsSVG (geom) şəkillərdən SEÇİN;

qaytarır:

cx = "0" cy = "0" M 0 0 L 10 -10 M 0 0 L 0 -10 10 -10 10 0 Z

bir nöqtə, bağlanmamış bir linestring və qapalı bir xətt, yəni bir çoxbucaqlıdır. M - hərəkət, L - sətir, Z - yaxın deməkdir. SVG-də başqa həndəsə növləri var, ancaq ST_AsSVG-nin qaytardığı budur (eyni versiyanın Çox versiyası üçün sənədlərə baxın).

Özünüzə görə, bu çox faydalı deyil, çünki siz darıxırıqyol yazılarıvə hər hansı bir stil məlumatı, bunlara tam bir nümunə belə görünə bilər:

 

Daha çox məlumat üçün w3schools SVG Təlimatına baxın.

Beləliklə, bir Postgis sorğusundan istifadə edərək həqiqətən etibarlı bir SVG yaratmaq istəyirsinizsə, yol etiketləri və rəng, sətir, doldurma və s format əlavə etməlisiniz. Bu istifadə edərək həyata keçirilə bilərqat operatoruvə aiş ifadəsiformatlaşdırma. Misal üçün,

İLƏ şəkillərlə (geom, atribut) AS (VALUES ((SELECT ST_MakeLine (ST_MakePoint (0,0), ST_MakePoint (10,10))), 2), ((SELECT ST_Envelope (ST_MakeBox2d (ST_MakePoint (0,0), ST_MakePoint () 10,10)))), 3)) SEÇİN concat (')') Şəkillərdən;

qayıdan:

 

Nəhayət, bunların hamısını büksənizserial_to_stringmassiv_aggvə başlığı və altlığı əlavə edin, yəni, bütün geometriyalarınızı təmsil edən bir SVG bloku ilə sona çatacaqsınız, məsələn.

İLƏ şəkillərlə (geom, atribut) AS (VALUES ((SELECT ST_MakeLine (ST_MakePoint (0,0), ST_MakePoint (10,10))), 2), ((SELECT ST_Envelope (ST_MakeBox2d (ST_MakePoint (0,0), st_makepoint () 10,10)))), 3)), yollar (svg) kimi (SELECT concat (')') ŞƏKİLLƏRDƏN', array_to_string (array_agg (svg), "),'') Yollardan;

indi tək qeydini qaytaran:

TL; DR, digər seçimlər

Hansı məqamda düşünürsünüz, TL; DR və doğrudur ki, bu çox işdir və vuruşun rəngini, genişliyini və s. Etmək iddiası ifadələri çox uzun və sarsılmaz ola bilər.

Digər seçimlər var. Geoserver (bir Postgis / vektor məlumat mənbəyi ilə) bir SVG'yi bir çıxış formatı olaraq dəstəkləyir və onları düzəltmək üçün Geoserver içərisindəki SLD'leri və ya CartoCSS'yi istifadə edə bilərsiniz, sonra yalnız SVG ilə bir WMS'yi çıxış formatı olaraq isteyin və işiniz bitdi. @Scro'nun da dediyi kimi, kimi vasitələrdən istifadə edə bilərsiniz TileMill sizin üçün stil hazırlamaq (yoxlanılmamış). Beləliklə, çox uzun bir cavabdan sonra əsasən ST_AsSVG-dən çox sürətli və çirkli SVG-lərdən başqa bir şey istifadə etməməyinizi təklif edirəm.


PostGIS-dən çox, QGIS-dən məlumat ixrac etməyə açıqsınızsa, Sadə SVG plaginini istifadə edə bilərsiniz. Bu plagin, simbologiyanı qorumağa çalışaraq, QGIS içərisindəki aktiv təbəqələri ixrac edəcəkdir. Bunu nisbətən yaxşı bir uğurla istifadə etdim. Ayrıca, xəritələrinizi başlamaq və SVG ixrac funksiyasından istifadə etmək üçün QGIS bəstəkarını istifadə edə bilərsiniz. Bu, PostGIS sorğusu ilə eyni deyil, lakin məqsəd QGIS-dən Inkscape-ə məlumat əldə etməkdirsə, bu işləyəcəkdir.


Bəzi çox bacarıqsız bir təlaşla Google / Bu Sayt ovundakı yoldaşlar üçün faydalı ola biləcəyini ümid etdiyim daha mükəmməl (/ ümumiləşdirilmiş) bir həll yolu tapdım.

Sorğu ilə AS (SELECT wkb_geometry AS geometry FROM FROM), q AS (SELECT ST_XMin (ST_Collect (geometry)) as x_min, ST_XMax (ST_Collect (geometry)) as x_max, ST_YMin (ST_Collect (geometry)) as y_min, ST_Clect ( həndəsə)) y_max olaraq, ARRAY_TO_STRING (ARRAY_AGG (CONCAT (')')), ") sorğudan svg olaraq) SEÇİN CONCAT ('', q.svg,'') Q

Sorğunuzu əvvəlcə bunun içinə atınsorğu AS (…)CTE, və Bob sənin əmindir.


SVG image href tamamilə qara rəngdədir

Bir tarayıcıdan bir SVG götürməyə çalışıram (pgadmin4). Bununla birlikdə, səhv göstərilən bir SVG ilə bitərəm. Yaradılan qrafik xarici sənədlərə istinad edərək SVG "nişanlarından" istifadə edir. Bu brauzerdə yaxşı işləsə də, bu quraşdırılmış SVG-lərin bütün rəngli pikselləri 100% qara rəngdə göstərilir. (Düzgün sənədləri göstərmək üçün bağlantıları düzəltdikdən sonra. Göründüyü kimi formalar düzgündür).

Brauzerdəki şəkil:

Və inkscape-də nə tapıram:


1 Cavab 1

Bunu burada həll etdim http://jsfiddle.net/fktGL/1/, əvvəl svg atributunu dəyişdirməli oldum

svg W3C doğrulama xidmətində doğrulanmadığına görə və burada bir dəyişiklik lazım olduğunu izah edən bir yığın axını.

Bundan sonra SVG-nin düzgün göstərilməsinə imkan vermək üçün bir neçə fasilə əlavə etməli oldum. Bunun şəklin SVG & amp kətanında çəkildiyi üçün başa düşdüm, amma hər ikisi də şəkli göstərmək üçün bir az vaxt lazımdır. Mənim həll yolum daha yavaş cihazlarda mükəmməl işləmir (zaman aşmalarında artım kömək edəcək), ancaq bunun üçün başqa bir yol bilmirəm (hər hansı bir şərhə / düzəlişə xoş gəlmisiniz).


Bu, bizim nəzərimizə görə dizayndır - brauzer hələ bu şəkil formatını dəstəkləməmişdən əvvəl Internet Explorer-in ilkin versiyalarında .png şəklindən istifadə etmək kimidir.

Buna görə .svg & ltimg & gt olaraq bağladığınız zaman tamaşaçıları məhdudlaşdırdığınızdan xəbərdar olun, çünki bütün brauzerlər bu məzmunu göstərə bilməz.

Bunları daha sadə .png şəkil sənədlərinə çevirməyi təklif edirəm. Sözügedən yazı üçün bunu etdim.

Chrome kimi bir IMG etiketi içərisində SVG-ni dəstəkləyən brauzerlərdə işləyir. Firefox-un bir OBJECT etiketində olması üçün SVG lazımdır. IE SVG-ni dəstəkləmir. Arayış üçün http://en.wikipedia.org/wiki/Scalable_Vector_Graphics#Support_for_SVG_in_web_browsers-ə baxın.

SVG görüntüdən daha çox flaş kimidir. Brauzerlərdə bunun üçün dəstək birbaşa bir şəkil kimi istifadə etməyə çalışmaqdansa daima plaginlərdən keçmişdir.

Google bu şəkildə Chrome-da özbaşına getdi və HTML5-ə daxil edildi. Lakin bu hələ bir standart deyil.

Yəni əsasən SVG şəkillərindən istifadə etməyin hələ

Ziyarətçilərlə qarışıqlığa gəldikdə, düşünürəm ki, SVG şəklini yükləmədikləri təqdirdə yükləmələri qeyri-adi haldır, bu vəziyyətdə veb istifadə üçün bu anda bir png etmək lazım olduğunu bilməlidirlər.


5.1. PostGIS Həndəsəsi / Coğrafiya / Qutu Məlumat Növləri

Bu bölmə, məkan məlumatlarını təmsil etmək üçün PostGIS tərəfindən quraşdırılmış xüsusi PostgreSQL məlumat növlərinin siyahısını verir.

Hər bir məlumat növü öz tökmə davranışını təsvir edir. Çıxış növü bir məlumat növünün dəyərlərini başqa bir növə çevirir. PostgreSQL, növ dəyərlərini çevirmək üçün istifadə olunan funksiyalarla yanaşı, xüsusi növlər üçün tökmə davranışını təyin etməyə imkan verir. Atışlar ola bilər avtomatik bir funksiya arqumentinin funksiya tərəfindən dəstəklənən bir növə avtomatik çevrilməsinə imkan verən davranış.

Bəzi atışlar var açıq davranış, yəni aktyorlar CAST (myval As sometype) və ya myval :: sometype sintaksisindən istifadə etməklə təyin olunmalıdır. Açıq tökmə, müəyyən bir növü dəstəkləməyən həddindən artıq yüklənmiş bir funksiyadan istifadə edilərkən ortaya çıxa bilən birmənalı atma məsələsini qarşısını alır. Məsələn, bir funksiya bir həndəsi deyil, bir box2d və ya bir box3d qəbul edə bilər. Həndəsə hər iki qutu növünə avtomatik bir tökmə bəxş etdiyi üçün bu, "birmənalı olmayan funksiya" səhvini meydana gətirir. Xətanın qarşısını almaq üçün istədiyiniz qutu növünə açıq bir yayım istifadə edin.

Bütün məlumat növləri mətnə ​​tökülə bilər, buna görə bunun açıq şəkildə göstərilməsinə ehtiyac yoxdur.


Xəritə xüsusiyyətləri sadələşdirilir

SVG-nin fayl ölçüsünü azaltmaq üçün Kartograph topologiyanı qoruyan sadələşdirməni dəstəkləyir. Varsayılan alqoritm, Mike Bostock tərəfindən gözəl izah edilən Visvalingam-Whyatt sadələşdirməsidir.

Bununla birlikdə, Kartograph, aşağıdakı lüğət təmin edərək istifadə edə biləcəyiniz digər iki alqoritmi (douglas-peucker və məsafə) də əhatə edir.

Dözümlülüyün mənası fərqli alqoritmlər arasında dəyişir, lakin ümumiyyətlə tolerantlıq nə qədər yüksəkdirsə, sadələşdirmə o qədər güclü olur (və fayl ölçüsü o qədər kiçikdir).


Cavab verin

Nəticədə OSM məlumatlarını ya PostGIS / PostgreSQL kimi bir verilənlər bazasına və ya Esri Shapefiles olaraq çevirmək istərdiniz. Bu cür məhsullar üçün standartlara olduqca yaxındırlar. Onlayn proqram təminatı üçün bir çox tövsiyə elmi / məlumat tərəfdən veriləcəkdir. Hər şeydə bir əhəmiyyət var, ancaq bir dizayn fonundan gəldiyiniz təqdirdə illüstrator üçün MAPublisher plagininə baxmaq istərdiniz. NatGeo və s. Üçün bir çox xəritə illüstratorlarının bu günlərdə istifadə edəcəyinə inanıram. Veb dizayn standartları ilə tanışsınızsa, Mapbox-un köhnə Mapbox Studio versiyasını yoxlamaq istəyə bilərsiniz. Hələ də bir öyrənmə əyrisi var, ancaq xəritədəki məlumatları daxil etdikdən sonra onu CSS kimi tərtib edə və çap qətnamələrində ixrac edə bilərsiniz. Studio-nun daha yeni versiyası yalnız onlayndır və çap qərarlarında ixrac üçün dəstəyi azaldıb (veb istifadəsinə yönəldilmişdir).

Yuxarıdakıların hamısını araşdırmaq üçün bir az vaxt ayırmağı təklif edərdim. Bunu etmək üçün daha peşəkar bir marşrutun öyrənmə əyrisi var və vaxt və səbr vacibdirsə, bəlkə də daha sadə (OSM standart ixrac) seçimini qəbul etmək doğru ola bilər. Xəritəni eps, svg və ya ai kimi bir vektor şəklində ixrac etməyin ən yaxşı həll kimi görünə biləcəyinə inanmağın asan olduğunu, ancaq xəritəniz nisbətən sadə olmadıqca sürətlə bir tərtibat mürəkkəbliyi ilə qarşılaşacağınıza inanmağın asan olduğunu xəbərdar edəcəyəm. Bunu istisna etməyin, ancaq bundan xəbərdar olun. Shapefiles kimi GIS verilənlər bazaları və formatları üslubların qaydalara və filtrlərə əsaslanaraq tətbiq olunmasına imkan verir (html-də CSS stillərinə bənzəməyən bir konsepsiya). Bu, xəritənin bənzər xüsusiyyətləri bənzər bir şəkildə göstərilməsinə əsaslanaraq əlaqəli bir vizual dil istədiyiniz xəritələri vizual şəkildə əlaqələndirmək üçün olduqca faydalıdır.


1 Cavab 1

Overleaf, arxa hissədə bir "normal lateks tərtibçisi" (bu yaxınlarda TeX Live 2018-ə yüksəldilmişdir) istifadə edir. Yəni .tex dosyanızı PDF-yə çevirmək (pdflatex və ya xelatex istifadə edərək və ya hər hansı bir şey) Overleaf serverlərində olur. Bundan sonra sistem, nəticədə çıxan PDF-i brauzerinizə göndərir, burada ön kodun PDF-i HTML kətanında göstərmək üçün pdf.js istifadə edir. Overleaf / ShareLaTeX mənbə kodunun bir hissəsi GitHub-da mövcuddur (2014-cü il orijinal blog yazısı bu linkdə idi (indi yönləndirilib)).

Overleaf-dan başqa “veb saytımda bəzi lateks sənədlərinin tərtib edilmiş bir versiyasını […] göstərmək istəyirəm” dedikdə, başqa bir seçim də serverdə DVI (PDF əvəzinə) istehsal etmək və sonra dvisvgm istifadə edərək SVG-yə çevirməkdir. .

Mümkün olan digər yanaşma, bunun əvəzinə istifadəçinin brauzerində tərtib prosesini aparmaqdır. Bunu indiyə qədər həyata keçirməyi hədəfləyən iki layihənin həm təcrübə, həm də yavaş olduğunu bilirəm:

TeX Live kodunu Emscripten vasitəsilə Javascriptə tərtib edən texlive.js (demoya bax) və xetex.js mövcuddur (bu günlərdə bunun əvəzinə WebAssembly-də də tərtib edilə bilər).

Jim Fowler-in son işləri də burada və burada demoda, burada kod mənbəyində / burada və burada TUGboat məqaləsində 40-cı cilddə (2019) Sayı 1-də var. Bu, Web-in Assambleyasına xüsusi bir kompilyatordan istifadə edərək TeX-in WEB / Pascal kodunu tərtib edir, sonra istifadə edir HTML-ə çevirmək üçün xüsusi bir DVI çeviricisi.


Məsələn, giriş olaraq bir FEN verilir (deyək ki, python skriptimizi boardtosvg.py olaraq saxlayırıq)

Python3 və python-şahmat kitabxanasının 0.30.1 versiyasından istifadə etmək

Məsələn, FEN: 'rnbqkbnr / pppppppp / 8/8 / 4P3/8 / PPPP1PPP / RNBQKBNR b KQkq e3 0 1'

Skriptinizi terminaldan çalıştırmaq üçün əmr verin:

python boardtosvg.py 'rnbqkbnr / pppppppp / 8/8 / 4P3/8 / PPPP1PPP / RNBQKBNR b KQkq e3 0 1'

Saxlanılan fayl (SVG'ləri aça bilməyəcəksinizsə, ən azı faylı görmək üçün xrom kimi bir brauzerdən istifadə edə bilərsiniz):


Addım 4: Məlumatları yükləyin

Kifayət qədər vaxt keçdiyini düşünsək, Repustate bizim üçün bir neçə məlumat tapacaq və bunu Sosial API vasitəsilə əldə edə bilərik:

Məlumat CSV olaraq gəlir. & Rsquoll oxucu üçün sorğu verə biləcəyiniz və bundan sonra ala biləcəyiniz bir formatda məlumatları saxlaması üçün bir məşq olaraq qalır, ancaq məlumatlarımızı saxladığımızı düşünək. Bu məlumat zibilliyinə hər bir tweetin (er) enlem ve boylamı daxil ediləcək. Bu tweetin (Toronto) Torontoda olduğunu haradan bilək? Əslində bir neçə yol var.

PostgreSQL üçün coğrafi məlumatlarla hər cür maraqlı sorğu etməyə imkan verən inanılmaz dərəcədə ecazkar bir uzantı olan PostGIS-dən istifadə edə bilərik. Bu marşruta getsəydik, orijinal shapefile bir PostGIS effektiv verilənlər bazasına yükləyə bilərik, sonra hər bir tweet üçün ST_Contains metodundan istifadə edərək hansı tweet (lər) in Torontoda olduğunu yoxlaya bilərik. Bunu etmək üçün başqa bir yol, verilənlər bazası üzərində təkrarlamaq və hər biri üçün seçdiyiniz dildə çoxbucaqlı hesablamada sürətli bir nöqtə etməkdir. Çoxbucaqlı məlumatlar yaratdığımız GeoJSON sənədindən götürülə bilər. Nə olursa olsun gedin, göstərilən lat / uzun koordinatlar verilərək Torontodan hansı məlumatların çıxdığını müəyyənləşdirmək çox çətin deyil.


CBS əlavə hərəkət məlumatları: traektoriya ümumiləşdirmə kodu və nümunə məlumatları

Bu günün yazısı, GIS # 3-də Hərəkət məlumatlarının davamıdır: kütləvi traektoriya məlumat dəstlərini görselləşdirmək. Bu yazıda traektoriyanın ümumiləşdirilməsi konsepsiyasını xülasə etdim. İndi Github'dakı QGIS-Processing-alətlər deposunda skriptləri və nümunə məlumatlarını dərc etdim.

Trajectory ümumiləşdirmə skriptlərini Qenerasiya alət qutunuza əlavə etmək üçün fayllardan skript əlavə et alətindən istifadə edə bilərsiniz:

Qeyd etmək lazımdır ki, fayllardan skript əlavə etmək, skriptlər üçün potensial kömək sənədlərini düzgün bir şəkildə idxal edə bilmir, amma bu dəfə kömək sənədlərini yazmaq üçün hələ başım çıxmadığım üçün bu dəfə bir problem deyil.

Ssenarilər aşağıdakı qaydada istifadə olunur:

  1. Xarakterik traektoriya nöqtələrini çıxarın
  2. Məkanda qrup xalları
  3. Traektoriyalardan hüceyrələr arasındakı axınları hesablayın

Nümunə layihə daxilolma məlumatlarını və ayrıca fərdi alətlərin çıxış qatlarını ehtiva edir. Tələb olunan yeganə giriş, traektoriyaların LINESTRINGM (M qeyd edin!) Xüsusiyyətləri olması lazım olduğu bir traektoriya təbəqəsidir.

GeoLife layihəsi tərəfindən verilən məlumatlara əsaslanan trayektoriya nümunəsi

Xarakterik traektoriya nöqtələrini çıxarın, məsafə parametrləri metrlə, dayanma müddəti saniyələrlə, açılar dərəcə ilə göstərilir. Xarakterik nöqtələr başlanğıc və bitmə yerlərini, həmçinin dönmə və dayandırma yerlərini ehtiva edir:

Xüsusi nöqtələr daha sonra qruplaşdırılır. Bu alətdə məsafə, nümunə məlumatları halında dərəcə olan qat vahidlərində göstərilməlidir.

Nəhayət, bu qruplar tərəfindən təyin olunan hüceyrələr arasında axınları hesablaya bilərik:

Axın gücü ilə ölçülən axın xətləri və sayımlarla ölçülən hüceyrə mərkəzləri

Bu vasitələrdən öz məlumatlarınızda istifadə edirsinizsə, xoşbəxtəm, nə düşündüyünüzə baxın!


Videoya baxın: Geometry Creation and Manipulation Using PostGIS. PostGIS Baby Steps (Oktyabr 2021).