Daha çox

PostGIS SQL ifadələrini işə salmaq və nəticələri GeoServer vasitəsilə göstərmək üçün AJAX -dan istifadə

PostGIS SQL ifadələrini işə salmaq və nəticələri GeoServer vasitəsilə göstərmək üçün AJAX -dan istifadə


Web GIS öyrənirəm və PostGIS -dən istifadə edərək məkan təhlili aparan bir veb interfeysi haqqında böyük bir şəkil verən yaxşı bir nümunə tapa bilmirəm.

Axtardığım şey, internetdə çalışan pgAdmin -in qrafik/GIS versiyasıdır. Bir SQL ifadəsi verildikdə, veb interfeysi PostGIS -ə zəng vurur və ehtimal ki, nəticələr cədvəli yaradır və sonra pgAdmin -də olduğu kimi cədvəl şəklində deyil, qrafik/kartoqrafik formada göstərilir.

Ətrafına baxdım və burada ən çox sual/cavab PostGIS -də mövcud bir cədvəlin necə göstəriləcəyinə aiddir. Ancaq tam döngəni əhatə edən heç bir şey yoxdur. Yəni sorğuya başlayın, nəticəni verilənlər bazasında saxlayın, göstərin və bəlkə də yeni bir sorğu üçün nəticə cədvəlindən istifadə edin.

GeoServer və RESTful API ilə bir az tanışlığım və JavScript/jQuery/HTML5 haqqında çox sadə biliklərim var.

Bəziləri bu sorğu-mağaza-göstərmə döngəsinə nail olmaq üçün uyğun bir yol təklif edə bilərmi?

Qeyd: Vizualizasiya hissəsi və GeoJson -u əldə etməklə daha az maraqlanıram, çünki onlar sonrakı analiz üçün PostGIS tərəfindən birbaşa istifadə oluna bilməz.


@Johnun cavabından GeoJSON çox yaxşı bir seçim kimi görünür və düşünürəm ki, GeoJSON -un bu qədər populyar olmasının yaxşı bir səbəbi var. Digər tərəfdən, daha çox "server tərəfli" bir həll tapacağına ümid edirdim PostGIS məkan təhlili aparırRəsm/kartoqrafiya ilə məşğul olan GeoServer PostGIS cədvəllərinin/baxışlarının. Ümid edirik ki, bu, ən az müştəri tərəfi proqramlaşdırmanı əhatə edəcək (SQL əmrləri və GeoServer API zənglərindən başqa).

Bunu GeoServer idarəetmə interfeysi və ya RESTful API ilə birlikdə pgAdmin ilə əllə edə bilərəməyməking. Ancaq eyni şeyi İnternetdən proqramla necə edəcəyimi bilmirəm, məsələn. AJAX və REST API -ləri. İstifadə etməyə çalışmışamWPSamma çox uğur qazanmadı. Məsələn, sadə raster xəritələr cəbrini yerinə yetirməyə çalışdım, amma GeoServerdəki WPS serverdən iki giriş rasterini alır və daha sonra təhlil üçün başqa bir rastr məlumat dəsti deyil, yalnız yükləmək üçün bir çıxış görüntüsü verir. Burada "döngə" pozulur.

Bundan əlavə, WPS funksiyaları bir paketdən digərinə dəyişir. WPS -də səhv bir şey varsa, yuxarı komanda həqiqətən aktiv olmadıqda onu düzəltmək daha asandır.

Beləliklə, WPS -ə güvənməməyi düşünürəm və bunun əvəzinə bütün vektor və rastr analizlərini aparmaq üçün PostGIS -ə güvənirəm, çünki Postgresin daha çox sınaqdan keçirildiyini və oradakı əlaqəli/xəritə cəbrinin tamamlandığını düşünürəm. AJAX -ı Postgres -ə SQL bəyanatları vermək üçün (bəlkə də hansısa server tərəfində PHP proxy ilə) vermək və nəticədə yaranan cədvəllərin bir hissəsini GeoServer (və ya başqa bir xəritə serveri) vasitəsi ilə "komanda mərkəzi" olaraq istifadə etmək ümidindəydim. (məsələn, nəticə cədvəllərini/baxışlarını dərc etmək/yeniləməklə).


Sualınız olduqca genişdir, amma dediklərinizə görə ən yaxşı format GeoJSON olardı. OpenLayers, Leaflet və Google Xəritələr, çox az miqdarda kodlaşdırma ilə GeoJSON -u oxuyur və göstərir. Açıq Layers 3 GeoJSON nümunəsidir. OpenLayers 2 və 3 -də, verilənlər bazası saxlanması üçün OpenLayers vektor obyektlərini yenidən JSON -a seriyalaşdırmağa imkan verən (Geo) JSON yazıçıları da var.

İlk növbədə serverdən JSON əldə etməyə gəldikdə, GeoServer -dən bir neçə seçiminiz var.

  1. WFS. Bu, məlumatların oxunmasına və yenilənməsinə imkan verir və məlumatları GeoJSON daxil olmaqla bir çox formatda ötürəcək. Daha çox məlumat üçün GeoServer WFS sənədlərinə baxın. OpenLayers 3 WFS nümunəsidir

  2. WPS. Bu, uzaq sorğuları GeoServer -ə göndərməyə və nəticələrini veb müştərinizdə geri qaytarmağa imkan verir, standart olaraq JSON, Geoserver sənədlərinə baxın. OpenLayers 2 WPS nümunəsidir. Bu yanaşma əslində həndəsələrinizdə, tamponunuzda, birliyinizdə və s. Uzaqdan GIS/məkan əməliyyatları aparmağa və nəticəni müştəriyə qaytarmağa imkan verir.

İstək vermək üçün yalnız AJAX istifadə edirsinizsə etməli olduğunuz öz seçimlərinizi yuvarlamaq kimi başqa variantlar da var - sonra server tərəfini bir şəkildə kodlaşdırmalı olacaqsınız. Postgres -in bir çox xüsusiyyətini əldə etmək üçün onların xüsusiyyətləri ilə yanaşı, birXüsusiyyət Kolleksiyası. Bu, JSON məlumat tipindən və row_to_json və array_to_json funksiyalarından istifadə etməklə edilə bilər. Boston Gis saytında Postgis in Action yazarı Regina Obe -dən gələn tipik bir sorğu belə görünür:

SELECT row_to_json (fc) FROM (SELECT 'FeatureCollection' Type as, array_to_json (array_agg (f)) Features from FROM (SELECT 'Feature' Type As, ST_AsGeoJSON (lg.geog) :: json As geometry, row_to_json ((SELECT l l) (SEÇİM loc_id, loc_name) As l)) Məkanlardan xassələr kimi As lg) As f) As fc kimi;

ilk gördüyünüz zaman baxmaq olduqca çətindir, amma çox güclüdür. Bu o deməkdir ki, həndəsələriniz hələ də bir həndəsə sahəsinə sahibdir, buna görə də istədiyiniz bütün CBS analizlərini edə bilərsiniz, lakin yenə də nümayiş məqsədləri üçün asanlıqla GeoJSON istehsal edə bilərsiniz.

İstifadə variantları da varGeoDjangovə birbaşa Postgres cədvəlindən atributları olan GeoJSON istehsal edəcək vektorformatlar kitabxanası. Python/Django -dan xüsusi olaraq bəhs etmədiniz, ancaq Python GIS insanları arasında çox populyar olduğu üçün bunu qeyd etməyə dəyər olduğunu düşündüm. Budur GeoDjango -dan GeoJSON yanaşması haqqında daha uzun bir blog məqaləsi.

Nəhayət, Postgresdə bir dəfə JSON üzərində analiz apara bilməyəcəyiniz doğru deyil. Postgres 9.2 -dən bəri bir JSON məlumat növü var və qarşıdakı Postgres 9.4 -də JSONB olaraq bilinən ikili bir JSON formatı olacaq ki, bu da indeksləşdirməyə və birbaşa JSON -da axtarmağa imkan verəcək. Ayrı -ayrı həndəsə sütunlarında mövcud olan çoxlu funksiyaları nəzərə alaraq bunu mütləq tövsiyə etmirəm, amma tamlığı üçün qeyd edirəm. İnanıram ki, bu, MongoDB kimi NoSQL verilənlər bazalarındakı açar/dəyər mağazalarının artan populyarlığına bir cavabdır və heç bir halda Postgisin CBS tipli sorğular üçün həndəsə sütununun yerini dəyişməyəcək.

Bənzər bir şəkildə istifadə edilə bilən WKT formatı da var, ancaq ona atributlar əlavə etmək daha ağrılıdır və kompleks strukturların kodlaşdırılmasına imkan verən GML/XML var, ancaq ağrıdır Javascript ilə işləmək (çoxları ümumiyyətlə deyərdi), JSON doğma olduğu üçün "WebGIS" üçün o qədər mükəmməldir.

Bağışlayın, belə uzun bir cavab üçün, amma sualınız olduqca genişdir: D.


SQL Görünüşü olaraq REST-API vasitəsilə dinamik olaraq bir təbəqə yaratmaq istədiyinizə bənzəyir.

Başqa bir yanaşma PostGis -də görünüşlər yaratmaq, mağazanı yeniləmək və görünüşü bir təbəqə olaraq yayımlamaq olardı.

Birincisi, verilənlər bazasını baxışlarla qarışdırmır və dinamik işiniz GeoServer -də toplanır. REST-API, Əsas Doğrulamadan istifadə edir, buna görə proxy-də Doğrulama başlığını əlavə edən zəngləri proxy etsəniz daha asandır. Ayrıca, etimadnaməniz istifadəçiləriniz üçün oxunmur.


Verilənləri verilənlər bazasından OutSystems -də əldə edin və göstərin

Verilənləri bir verilənlər bazasından, məsələn, ekranda göstərmək üçün tez -tez götürməlisiniz. OutSystems -dəki verilənlər bazasından məlumat əldə etməyin səmərəli yolu məcmu istifadə etməkdir.

Bu sənəd sizə iki addımda yol göstərir:

  1. Məlumat əldə etmək. Əvvəlcə verilənlər bazanızdan bəzi məlumatları yükləməlisiniz. Nümunə OutSystems -dən nümunə məlumatlardan istifadə edir, ancaq siz də varlıqlarınızı istifadə edə bilərsiniz.
  2. Məlumat göstərilir. Tətbiqinizdə məlumatlar olduqda, bütün qeydləri və ya yalnız bir qismini göstərə bilərsiniz. Nümunə List vidjetindən istifadə edir, ancaq Cədvəl və ya başqa vidjet əlavə edə bilərsiniz.

Bu məqalə üzərində işləyirik. Zəhmət olmasa səs verərək bu yeni versiyanın nə qədər faydalı olduğunu bizə bildirin.


2 Cavab 2

Yaşadıqlarınız (AJAX yerli olaraq işləyir, ancaq serverdə deyil) gecikmə problemi var. Yerli olaraq hər şey o qədər sürətli işləyir ki, edə bilməzsən görmək sizin probleminiz. Bir sözlə, bu sizin probleminizdir:

AJAX geri zəng (A) icra edir & gt AJAX Geri Çağırış (B) (A) və gt gözləməli olduğunu bilmir (A) çox sürətli bitdiyindən problemi yerli quraşdırmada görə bilməzsiniz.

Beləliklə, (A) gözləmək məcburiyyətində qaldığınızı (B) geri bildirməyin bir yolunu tapmalısınız. İşdə:


SQL Təlimləri, Təcrübə, Həll - SUBQUERIES

2. İddiası 169 olan işçi ilə eyni təyinatda işləyən işçilərin adını (ad və soyad), maaşını, idarənin idarəsini, iş nömrəsini göstərmək üçün bir sorğu yazın. Redaktora gedin

3. Şöbələrdən hər hansı birinin ən kiçik əmək haqqı olan bu qədər maaş alan işçilərin adını (ad və soyad), maaşını, şöbə idini göstərmək üçün bir sorğu yazın. Redaktora gedin

4. Ortalama maaşdan çox qazanan bütün işçilər üçün işçinin kimliyini, işçinin adını (ad və soyad) göstərmək üçün bir sorğu yazın. Redaktora gedin

5. Payam -a hesabat verən bütün işçilərin işçi adını (ad və soyad), işçinin kimliyini və maaşını göstərmək üçün bir sorğu yazın. Redaktora gedin

6. Maliyyə şöbəsindəki bütün işçilər üçün şöbə nömrəsini, adını (ad və soyad), iş və şöbə adını göstərmək üçün bir sorğu yazın. Redaktora gedin

7. Əmək haqqı və hesabat verən şəxs kimliyi sırasıyla 3000 və 121 olan bir işçinin bütün məlumatlarını göstərmək üçün bir sorğu yazın. Redaktora gedin

8. İd nömrəsi 134, 159 və 183 olan hər hansı bir işçinin bütün məlumatlarını göstərin. Redaktora gedin

9. Əmək haqqı 1000 və 3000 aralığında olan işçilərin bütün məlumatlarını göstərmək üçün bir sorğu yazın. Redaktora gedin

10. Əmək haqqı ən kiçik maaşla 2500 arasında olan işçilərin bütün məlumatlarını göstərmək üçün bir sorğu yazın. Redaktora gedin

11. Müdiri 100 və 200 aralığında meneceri id işlədiyi şöbələrdə işləməyən işçilərin bütün məlumatlarını göstərmək üçün bir sorğu yazın. Redaktora gedin

12. İd nömrəsi ikinci ən yüksək maaş alan işçilər üçün bütün məlumatları göstərmək üçün bir sorğu yazın. Redaktora gedin

13. İşçinin adını (ad və soyadını) və Clara ilə eyni şöbədəki bütün işçilər üçün işə götürmək üçün bir sorğu yazın. Clara istisna olun. Redaktora gedin

14. Adında T. olan hər hansı bir işçi ilə bir şöbədə çalışan bütün işçilər üçün işçinin nömrəsini və adını (ad və soyad) göstərmək üçün bir sorğu yazın Redaktora gedin.

15. İşçilərin sayını, adını (adı və soyadı) və maaşını, orta maaşdan çox qazanan və adlarında J hər hansı bir işçi ilə bir şöbədə işləyən bütün işçilərin maaşlarını göstərmək üçün bir sorğu yazın. Redaktora gedin

16. Şöbəsi Toronto olan bütün işçilər üçün işçinin adını (adı və soyadı), işçinin kimliyini və vəzifəsini göstərin. Redaktora gedin

17. Əmək haqqı MK_MAN olan işçilərin maaşlarından az olan bütün işçilər üçün işçinin nömrəsini, adını (ad və soyadını) və vəzifə adını göstərmək üçün bir sorğu yazın. Redaktora gedin

18. Əmək haqqı MK_MAN olan işçilərin maaşlarından az olan bütün işçilər üçün işçinin nömrəsini, adını (ad və soyadını) və vəzifə adını göstərmək üçün bir sorğu yazın. Vəzifə başlığını istisna edin MK_MAN. Redaktora gedin

19. Əmək haqqı PU_MAN olan işçilərin maaşlarından çox olan bütün işçilər üçün işçinin nömrəsini, adını (ad və soyad) və vəzifə adını göstərmək üçün bir sorğu yazın. PU_MAN vəzifəsini istisna edin. Redaktora gedin

20. Əmək haqqı hər hansı bir şöbənin orta əmək haqqından çox olan işçilərin sayını, adını (ad və soyad) və vəzifə adını göstərmək üçün bir sorğu yazın. Redaktora gedin

21. Əmək haqqı 3700 -dən çox olan işçilərin mövcudluğuna dair işçinin adını (ad və soyadını) və şöbəni göstərmək üçün bir sorğu yazın. Redaktora gedin

22. Ən azı bir işçinin olduğu şöbələrin idarəsini və ümumi əmək haqqını göstərmək üçün bir sorğu yazın. Redaktora gedin

23. İş adı ST_MAN və iş adı IT_PROG olan DEVELOPER olan işçilər üçün işçinin kimliyini, adını (adı və soyadı) və dəyişdirilmiş SALESMAN adı olan iş id sütununu göstərmək üçün bir sorğu yazın. Redaktora gedin

24. Əmək haqqı bütün işçilərin orta əmək haqqından çox və aşağı olan işçilər üçün müvafiq olaraq YÜKSƏK və DÜŞÜK başlıqlı işçinin kimliyini, adını (adı və soyadı), maaşını və SalaryStatus sütununu göstərmək üçün bir sorğu yazın. Redaktora gedin

25. Əmək haqqı daha çox olan işçilər üçün müvafiq olaraq YÜKSƏK və DÜŞÜK başlıqlı işçi id, adı (adı və soyadı), SalaryDrawn, AvgCompare (maaş - bütün işçilərin orta əmək haqqı) və SalaryStatus sütununu göstərmək üçün sorğu yazın. və bütün işçilərin orta əmək haqqından azdır. Redaktora gedin

26. Əslində bir və ya daha çox işçinin təyin olunduğu bütün şöbələri tapmaq üçün bir sıra satır qaytaran bir alt sorğu yazın. Redaktora gedin

27. Birləşmiş Krallıqda yerləşən şöbələrdə çalışan bütün işçiləri müəyyən edəcək bir sorğu yazın. Redaktora gedin

Nümunə cədvəli: yerlər

Nümunə cədvəli: ölkələr

28. Ortalamadan daha çox qazanan və İT şöbələrinin hər hansı birində çalışan bütün işçiləri müəyyən etmək üçün bir sorğu yazın. Redaktora gedin

29. Özer bəydən daha çox kimin qazandığını müəyyən etmək üçün bir sorğu yazın. Redaktora gedin

30. Hansı işçilərin ABŞ -da yerləşən bir şöbədə işləyən bir meneceri olduğunu öyrənmək üçün bir sorğu yazın. Redaktora gedin

31. Əmək haqqı şöbəsinin ümumi əmək haqqı hesabının 50% -dən çox olan bütün işçilərin adlarını axtaran bir sorğu yazın. Redaktora gedin

32. Menecer olan işçilərin təfərrüatlarını öyrənmək üçün bir sorğu yazın. Redaktora gedin

33. Bir şöbəni idarə edən işçilərin təfərrüatlarını öyrənmək üçün bir sorğu yazın. Redaktora gedin

34. İşçinin şəxsiyyətini, adını (soyadı və soyadı), əmək haqqını, şöbənin adını və şəhərini işçinin qazandığı əmək haqqı olaraq alan bütün işçilər üçün 1 Yanvar 2002 -ci il tarixini göstərmək üçün bir sorğu yazın. və 31 dekabr 2003. Redaktora gedin

35. Londonda yerləşən bütün şöbələrin şöbə kodunu və adını göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

36. Orta əmək haqqından çox qazanan bütün işçilərin ad və soyadını, maaşını və şöbə şəxsiyyətini göstərmək üçün SQL -də bir sorğu yazın və siyahını əmək haqqına görə azalan qaydada təşkil edin. Redaktora gedin

37. Şəxsiyyəti 40 olan bir şöbənin maksimum maaşından çox qazanan işçilər üçün ad və soyad, maaş və şöbə kimliyini göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

38. Bölmənin yerləşdiyi bütün şöbələr üçün şöbə adını və Id -ni göstərmək üçün SQL -də bir sorğu yazın ki, Id nömrəsi 30 nömrəli şöbənin yerləşdiyi yerin Id -nə bərabərdir. Redaktora gedin

39. 201 nömrəli şəxsin işlədiyi işçinin işlədiyi şöbədə işləyən bütün işçilərin ad və soyadını, maaşını və şöbə kimliyini göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

40. Əmək haqqı, idarəsi 40 olan şöbədə çalışan işçinin maaşına bərabər olan işçilərin ad və soyadını, maaşını və şöbə kimliyini göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

41. Marketinq şöbəsində çalışan bütün işçilərin ad və soyadını və şöbə kodunu göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

42.Kimliyi 40 olan bir şöbənin minimum maaşından çox qazanan işçilər üçün ad və soyad, maaş və şöbə kimliyini göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

43. Şəxsiyyəti 165 olan işçidən sonra işə götürülən bütün işçilərin tam adını, e -poçtunu və təyinatını göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

44. Kimliyi 70 olan bir şöbənin minimum maaşından az qazanan işçilər üçün ad və soyad, maaş və şöbə kimliyini göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

45. Ortalama maaşdan az qazanan işçilərin ad və soyadını, maaşını və şöbə kimliyini göstərmək üçün SQL -də bir sorğu yazın və işçinin Laura ad sahibi olaraq işlədiyi şöbədə işləyin. Redaktora gedin

46. Şöbəsi London şəhərində olan işçilərin ad və soyadını, maaşını və şöbə kimliyini göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

47. ID 134 və orada işləyən işçinin şəhərini göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

48. Bir və ya daha çox iş görmüş işçilər üçün maksimum əmək haqqı 7000 və daha yuxarı olan şöbələrin təfərrüatlarını göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

49. Başlanğıc əmək haqqı ən az 8000 olan şöbələrin təfərrüatlı məlumatlarını göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

50. 4 və ya daha çox işçiyə nəzarət edən menecerin tam adını (ad və soyadını) göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

51. Keçmişdə Satış nümayəndəsi olaraq işləyən işçilər üçün hazırkı işin təfərrüatlarını göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

52. Bütün işçilərin ən aşağı əmək haqqını qazanan işçilər haqqında bütün məlumatları göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

53. Susan tərəfindən idarə olunan şöbələrin detallarını göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

54. Departament ID, tam adı (adı və soyadı), bir şöbədə ən yüksək maaş alan işçilərin maaşını göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin

55. Keçmişdə heç bir işi olmayan işçilərin bütün məlumatlarını göstərmək üçün SQL -də bir sorğu yazın. Redaktora gedin


Hfrhyu

İki qarşılıqlı qismən törəmələr arasındakı əlaqələr?

Entropiyanın artmasına hansı qüvvə səbəb olur?

Sığınacağın geri çəkilməsi qanunsuz ola bilərmi?

Əxlaqi səlahiyyəti olmayan bir dində yaxşılığı necə təyin edə bilərəm?

Rəqibiniz səni daim döyəndə şahmatı necə əyləncəli saxlayırsan?

Daha böyük bir araşdırmanın bir hissəsi olaraq avtomatik olaraq yaradılan bir məqaləni nəzərdən keçirilməyən bir sayta yükləmək etikdirmi?

Aşağıdakı imzalar etibarsız idi: EXPKEYSIG 1397BC53640DB551

Dövrlərdə eyni üzə təsadüfi ləkə necə əlavə edə bilərəm?

Alov İnvestisiyası sehrindən istifadə edərək bir hərəkət olaraq yarada biləcəyiniz atəş xətti nə qədər davam edir?

Qara dəlik görüntüsünün krediti yanlış paylandı?

Vəzifə sahibi olmaq üçün universitetin motivasiyası

Nəsrdə sadəlik dəqiqlik və aydınlıqdan daha yaxşıdır?

Python - Balıqçılıq Simulyatoru

Müəyyən bir adla bütün faylların məzmununu yeni bir fayla necə köçürmək olar?

Niyə tənliyin bu təkrarlanan yolu işləyir?

Partlayan Zar simulyasiyası

Hər bölüm "Şalvarım haradadır?" eyni?

Eyni kamera sensoru olan smartfonlar fərqli görüntü keyfiyyətinə sahib ola bilərmi?

Mükəmməl bir dördüncü aralıq ya samit, ya da səssiz hesab edilə bilər?

Derivasiya ağacı göstərilmir

İpoteka məsləhətçisi, həddindən artıq ödəmələrlə birlikdə lazım olandan daha uzun bir müddət təklif edir

Leaflet istifadə edərək şəkil faylını necə ixrac etmək olar?

Planlaşdırılan təmir 17/18 Aprel 2019 -da 00: 00 -da (00:00) ABŞ -da (8:00 pm ABŞ/Şərqi) Shapefile -dən hər bir məhəllə üçün çoxbucaqlı məlumatları çıxarın Shapefile məlumatlarını GeoJSON -a çevirmək Polygon üst -üstə düşür Java? Python shutil istifadə edərək şəkil faylını hərəkət etdirmək? WFS-ni şəkil sənədinə ixrac etmək? IPUMS-NHGIS Forma fayllarını R istifadə edərək GeoJSON fayllarına necə çevirmək və sonra Leaflet istifadə edərək göstərmək olar? Niyə mənim şəkil faylım (.shp) yox oldu? cədvəl Shapefile -dən fərqlidir?

Tıkladığım üçün "ixrac" düyməsini istəyirəm, şəkil faylı bütün faylları shp, shx, prj, dbf ilə birlikdə zip qovluğu olaraq yüklənməlidir. Layihəm iki əsas vəzifəm olan GIS əsaslıdır:


  1. Forma faylını idxal edin: shapefile üçün geojson, yəni leafLet köməyi ilə edirəm.

  2. Forma faylını ixrac edin: bu zaman xəritədə/qatda/şəkil sənədində çəkildikdən/düzəldildikdən sonra cüt şəkil faylı yaradılmalıdır.

Bu xüsusi şəkil faylının surətini necə ixrac edə bilərəm?

Tıkladığım üçün "ixrac" düyməsini istəyirəm, şəkil faylı bütün faylları shp, shx, prj, dbf ilə birlikdə zip qovluğu olaraq yüklənməlidir. Layihəm iki əsas vəzifəm olan GIS əsaslıdır:


  1. Forma faylını idxal edin: shapefile üçün geojson, yəni leafLet köməyi ilə edirəm.

  2. Forma faylını ixrac edin: burada xəritədə/qatda/şəkil sənədində çəkildikdən/düzəldildikdən sonra cüt şəkil faylı yaradılmalıdır.

Bu xüsusi şəkil faylının surətini necə ixrac edə bilərəm?

Tıkladığım üçün "ixrac" düyməsini istəyirəm, şəkil faylı bütün faylları shp, shx, prj, dbf ilə birlikdə zip qovluğu olaraq yüklənməlidir. Layihəm iki əsas vəzifəm olan GIS əsaslıdır:


  1. Forma faylını idxal edin: shapefile üçün geojson, yəni leafLet köməyi ilə edirəm.

  2. Forma faylını ixrac edin: burada xəritədə/qatda/şəkil sənədində çəkildikdən/düzəldildikdən sonra cüt şəkil faylı yaradılmalıdır.

Bu xüsusi şəkil faylının surətini necə ixrac edə bilərəm?

Tıkladığım üçün "ixrac" düyməsini istəyirəm, şəkil faylı bütün faylları shp, shx, prj, dbf ilə birlikdə zip qovluğu olaraq yüklənməlidir. Layihəm iki əsas vəzifəm olan GIS əsaslıdır:


  1. Forma faylını idxal edin: shapefile üçün geojson, yəni leafLet köməyi ilə edirəm.

  2. Forma faylını ixrac edin: burada xəritədə/qatda/şəkil sənədində çəkildikdən/düzəldildikdən sonra cüt şəkil faylı yaradılmalıdır.

Bu xüsusi şəkil faylının surətini necə ixrac edə bilərəm?


JSON Doğrulama

JSON məlumatlarımızı təsdiq etməyi unutmamalıyıq! JSON fayllarını təsdiqləmək üçün istifadə edilə bilən JSONLint adlı bir onlayn JSON Doğrulayıcı vasitəsi var. JavaScript -dən fərqli olaraq, JSON çox sərtdir və tolerantlığa malik deyil, məsələn. yuxarıda qeyd olunan son vergüllər və ya açarların yazılmasının bir çox yolu (tırnak işarəsi olmadan / ilə).

Beləliklə, JSON ilə işləyərkən ən çox yayılmış səhvləri müzakirə edək.

Ümumi $ .getJSON Səhvləri

  • $ .GetJSON zənglərində səssiz uğursuzluqlar: Bu, məsələn, jsoncallback = json1234 istifadə edildikdə, json1234 () funksiyası olmadığı halda baş verə bilər. Belə hallarda $ .getJSON səssizcə səhv edər. Buna görə də həmişə jsoncallback =? jQuery -nin ilkin geri çağırışı avtomatik idarə etməsinə icazə vermək.
  • Ən yaxşı halda, real JSON (JSONP əvəzinə) istifadə olunur (ya öz serverimizlə danışmaqla, ya da CORS vasitəsi ilə). Bu, JSONP -dən istifadə etməklə potensial olaraq təqdim olunan bir sıra səhvləri aradan qaldırır. Əsas sual budur: Server / API JSONP -ni dəstəkləyirmi? JSONP istifadə etmək üçün hər hansı bir məhdudiyyət varmı?
  • Tutulmamış sintaksis xətası: Gözlənilməyən nişan (Chrome -da) və ya etibarsız etiket (Firefox -da). Sonuncu, JSON məlumatlarını JavaScript geri çağırışına ötürməklə düzəldilə bilər. Ümumiyyətlə, bu, JSON -un düzgün qurulmadığının güclü bir göstəricisidir. Yuxarıda göstərildiyi kimi JSONLint istifadə etməyi düşünün.

İndi böyük sual budur: Səhvin əslində daşınan JSON -da olub olmadığını necə müəyyən edə bilərik?

JSON səhvlərini necə düzəltmək olar

JSON ilə əlaqədar hər hansı bir hata ayıklamaya başlamazdan əvvəl əhatə olunmalı üç əsas nöqtə var:

  • Server tərəfindən qaytarılmış JSON-un düzgün MIME tipli düzgün formatda olduğundan əmin olmalıyıq.
  • $ .GetJSON əvəzinə $ .get istifadə etməyə çalışa bilərik, çünki serverimiz etibarsız JSON qaytarır. Həmçinin JSON.parse () qaytarılmış mətndə uğursuz olarsa, dərhal JSON -un günahkar olduğunu bilirik.
  • Geri qaytarılan məlumatları konsola daxil edərək yoxlaya bilərik. Bu, sonrakı araşdırmalar üçün giriş olmalıdır.

Daha sonra qeyd olunan JSONLint vasitəsi ilə ayıklama başlamalıdır.


Birliyə əsaslanan SQL enjeksiyonuna nümunə

SQL Enjeksiyonunun ən çox yayılmış növlərindən biri UNION operatorundan istifadə edir. Təcavüzkarın iki və ya daha çox SELECT ifadəsinin nəticələrini tək bir nəticəyə birləşdirməsinə imkan verir. Texnika adlanır birlik-əsaslı SQL enjeksiyonu.

Aşağıdakılar bu texnikanın bir nümunəsidir. Veb səhifədən istifadə edir testphp.vulnweb.com, Acunetix tərəfindən ev sahibliyi edilən qəsdən həssas bir veb sayt.

Aşağıdakı HTTP tələbi qanuni bir istifadəçinin göndərəcəyi normal bir istəkdir:

Sənətçi parametri SQL Enjeksiyonuna həssasdır. Aşağıdakı yük, mövcud olmayan bir qeyd axtarmaq üçün sorğunu dəyişdirir. URL sorğu sətrindəki dəyəri -1 olaraq təyin edir. Əlbəttə ki, verilənlər bazasında olmayan başqa bir dəyər ola bilər. Ancaq mənfi bir dəyər yaxşı bir fikirdir, çünki bir verilənlər bazasındakı bir identifikator nadir hallarda mənfi bir rəqəmdir.

SQL Injection -da, UNION operatoru, veb tətbiqetməsinin işə salınması nəzərdə tutulan orijinal sorğuya zərərli bir SQL sorğusu əlavə etmək üçün istifadə olunur. Enjekte edilmiş sorğunun nəticəsi orijinal sorğunun nəticəsi ilə birləşdiriləcəkdir. Bu, təcavüzkara digər cədvəllərdən sütun dəyərləri əldə etməyə imkan verir.

Aşağıdakı nümunə, bu qəsdən həssas saytdan daha mənalı məlumatlar əldə etmək üçün SQL Enjeksiyon yükünün necə istifadə olunacağını göstərir:


Zəif kod nümunəsi

Bu enjeksiyon texnikasına praktik bir nəzər salmadan əvvəl əvvəlcə SQL Enjeksiyonunun nə olduğunu tez bir zamanda görək. Güman edək ki, PostGIS SQL ifadələrini işə salmaq və nəticələrini GeoServer - Coğrafi İnformasiya Sistemləri, [nobr] [H1toH2] vasitəsi ilə göstərmək üçün AJAX istifadə edərək parametr məqaləsini alan bir veb tətbiqimiz var.

Tez-tez soruşulan suallar

SQL enjeksiyonu səbəbindən baş verə biləcək ən pis şey nədir?

Bir SQL Enjeksiyonu, müştəri məlumatları da daxil olmaqla gizli məlumatların itirilməsinə səbəb ola bilər ki, bu da uyğunluğu təsir edə bilər və böyük cərimələrə səbəb ola bilər. Bir SQL Enjeksiyonu da tam sistem güzəştinə səbəb ola bilər (bu yazıda təsvir edildiyi kimi).

SQL Enjeksiyon hücumunun qurbanı olub -olmadığımı necə öyrənə bilərəm?

Bir SQL Enjeksiyonunun qurbanı olduğunuzdan şübhələnirsinizsə, əvvəlcə Acunetix kimi bir veb zəifliyi skanerindən istifadə edərək tətbiqlərinizi yoxlayın. Bir boşluq olduğunu təsdiqləsəniz və təcavüzkarın bundan istifadə etdiyindən şübhələnirsinizsə, sisteminizin əllə təhlilini aparmalısınız.

Tətbiqlərimdə SQL Enjeksiyonlarının qarşısını necə ala bilərəm?

SQL Enjeksiyonlarının qarşısını almaq üçün tətbiq heç vaxt sorğulara birbaşa istifadəçi daxil etməməlidir. Bunun əvəzinə, bütün inkişaf etdiricilər parametrləşdirilmiş sorğular (hazırlanmış ifadələr) və/və ya saxlanılan prosedurlardan istifadə etməlidirlər.

SQL Enjeksiyonları haqqında daha çox məlumatı haradan tapa bilərəm?

Acunetix saytında SQL Enjeksiyonunun bütün ləzzətləri haqqında çoxlu məlumatlar var. Bunun səbəbi, Acunetix -in həmişə bu kritik zəifliyin qarşısını almağınıza kömək etməkdir. Daha çoxunu tapmaq üçün sadəcə saytımızı axtarın.


Cədvəl məhdudiyyətləri

Cədvəl məhdudiyyətləri CONSTRAINT açar sözü ilə müəyyən edilir və aşağıda təsvir olunan müxtəlif məhdudiyyətləri tətbiq etmək üçün istifadə edilə bilər.

Şəxsiyyət məhdudiyyəti

Bu sütun üçün unikal, artan bir dəyər təmin etmək üçün isteğe bağlı sütun məhdudiyyət IDENTITY -dən istifadə edə bilərik. Kimlik sütunları tez -tez Cədvəl üçün unikal satır identifikatoru kimi xidmət etmək üçün İLKƏÇƏ KEY məhdudiyyətləri ilə istifadə olunur. IDENTITY xassəsi tinyint, smallint, int, decimal və ya rəqəmsal məlumat tipli bir sütuna təyin edilə bilər. Bu məhdudiyyət:

  • Ardıcıl ədədlər yaradır
  • Varlıq bütövlüyünü tətbiq etmir
  • Yalnız bir sütunda IDENTITY mülkü ola bilər
  • Tam ədəd, ədədi və ya onluq məlumat növü olaraq təyin olunmalıdır
  • IDENTITY xüsusiyyəti olan bir sütunu yeniləmək mümkün deyil
  • NULL dəyərlər ola bilməz
  • Varsayılanları və standart məhdudiyyətləri sütuna bağlamaq mümkün deyil

Şəxsiyyət üçün [(toxum, artım)]

  • Toxum - şəxsiyyət sütununun ilkin dəyəri
  • Artım - son artım sütununa əlavə ediləcək dəyər

Bu HOTEL verilənlər bazasında tblHotel cədvəlini yaradaraq SQL DDL ifadələrini daha da aydınlaşdırmaq üçün başqa bir verilənlər bazası nümunəsindən istifadə edəcəyik.

UNIQUE məhdudiyyəti, təkrarlanan dəyərlərin bir sütuna daxil edilməsinin qarşısını alır.

  • Həm PK, həm də UNİQUE məhdudiyyətləri varlıq bütövlüyünü tətbiq etmək üçün istifadə olunur.
  • Cədvəl üçün birdən çox UNİQUE məhdudiyyət müəyyən edilə bilər.
  • Mövcud bir cədvələ bənzərsiz bir məhdudiyyət əlavə edildikdə, mövcud məlumatlar həmişə təsdiqlənir.
  • NULL qəbul edən sütunlara UNİKAL bir məhdudiyyət qoyula bilər. Only bir sıra NULL ola bilər.
  • UNİKAL bir məhdudiyyət avtomatik olaraq seçilmiş sütunda unikal bir indeks yaradır.

UNİQUE məhdudiyyətinin ümumi sintaksisi budur:

Bu, UNİQUE məhdudiyyətini istifadə edən bir imtahandır.

XARİCİ AÇIQ məhdudiyyəti

FOREIGN KEY (FK) məhdudiyyəti, dəyərləri başqa bir cədvəlin İLK KEY (PK) ilə uyğun gələn bir sütunu və ya sütun birləşməsini təyin edir.

  • Əlaqəli cədvəldəki PK dəyərləri yeniləndikdə/dəyişdirildikdə FK -dakı dəyərlər avtomatik olaraq yenilənir.
  • FK məhdudiyyətləri PK və ya başqa bir cədvəlin UNİKAL məhdudiyyətinə istinad etməlidir.
  • FK üçün sütunların sayı PK və ya UNIQUE məhdudiyyəti ilə eyni olmalıdır.
  • WITH NOCHECK seçimi istifadə edilərsə, FK məhdudiyyəti cədvəldəki mövcud məlumatları təsdiqləməyəcək.
  • FK məhdudiyyətində iştirak edən sütunlarda indeks yaradılmır.

FOREIGN KEY məhdudiyyətinin ümumi sintaksisi budur:

Bu nümunədə, tblRoom cədvəlindəki HotelNo sahəsi, əvvəllər göstərilən tblHotel cədvəlindəki HotelNo sahəsinə FK -dir.

Məhdudiyyəti yoxlayın

CHECK məhdudiyyəti cədvələ daxil edilə bilən dəyərləri məhdudlaşdırır.

  • WHERE bəndinə bənzər axtarış şərtləri ola bilər.
  • Eyni cədvəldəki sütunlara istinad edə bilər.
  • Bir CHECK məhdudiyyəti üçün məlumatların doğrulama qaydası bir boolean ifadəyə uyğun qiymətləndirilməlidir.
  • Ona bağlı bir qayda olan bir sütun üçün təyin edilə bilər.

CHECK məhdudiyyəti üçün ümumi sintaksis budur:

Bu nümunədə, Tip sahəsi yalnız ‘Single ’, ‘Double ’, ‘Suite ’ və ya ‘Execution ’ növləri ilə məhdudlaşır.

Bu ikinci nümunədə, işçinin işə götürülmə tarixi 1 Yanvar 2004 -dən əvvəl olmalı və ya 300.000 dollar əmək haqqı limitinə malik olmalıdır.

Varsayılan məhdudiyyət

Varsayılan məhdudiyyət, istifadəçi təmin etmədiyi təqdirdə bir sütun üçün avtomatik olaraq əlavə olunan bir dəyəri təmin etmək üçün istifadə olunur.

  • Bir sütunda yalnız bir DEFAULT ola bilər.
  • DEFAULT məhdudiyyəti, zaman damgası məlumat tipinə və ya şəxsiyyət xüsusiyyətinə malik sütunlarda istifadə edilə bilməz.
  • Varsayılan məhdudiyyətlər yaradıldıqda avtomatik olaraq bir sütuna bağlanır.

DEFAULT məhdudiyyətinin ümumi sintaksisi belədir:

Bu nümunə, şəhər sahəsinin varsayılanını ‘Vancouver ’ olaraq təyin edir.


Test sürücüsü, AdventureWorks nümunə verilənlər bazası ilə quraşdırılmış JSON dəstəyi

AdventureWorks nümunə verilənlər bazasını əldə etmək üçün ən azından verilənlər bazası faylını və nümunələri və skript faylını GitHub -dan yükləyin.

Nümunə verilənlər bazasını SQL Server 2016 nümunəsinə bərpa etdikdən sonra nümunələr faylını çıxarın və sonra JSON Nümunə Sorğuları prosedurlarına baxış və indexes.sql JSON qovluğundan fayl. Bəzi mövcud məlumatları JSON məlumatları olaraq yenidən formatlaşdırmaq, JSON məlumatları üzərində nümunə sorğu və hesabatlarını sınamaq, JSON məlumatlarını indeksləşdirmək və JSON idxal və ixrac etmək üçün bu fayldakı skriptləri işə salın.

Dosyaya daxil olan skriptlərlə nə edə bilərsiniz:

JSON məlumatlarının sütunlarını yaratmaq üçün mövcud sxemi normallaşdırın.

SalesReasons, SalesOrderDetails, SalesPerson, Müştəri və satış sifarişi ilə bağlı məlumatları ehtiva edən digər cədvəllərdən məlumatları SalesOrder_json cədvəlindəki JSON sütunlarında saxlayın.

EmailAddresses/PersonPhone cədvəllərindəki məlumatları Person_json cədvəlində JSON obyektlərinin massivləri kimi saxlayın.

JSON məlumatlarını sorğulayan prosedurlar və görünüşlər yaradın.

JSON məlumatlarını indeksləyin. JSON xüsusiyyətlərində və tam mətn indekslərində indekslər yaradın.

JSON idxal və ixrac. Person və SalesOrder cədvəllərinin məzmununu JSON nəticələri olaraq ixrac edən prosedurları yaradın və işlədin və JSON girişini istifadə edərək Person və SalesOrder cədvəllərini idxal edin və yeniləyin.

Sorğu nümunələrini işlədin. 2 və 4 -cü addımlarda yaratdığınız saxlanan prosedurları və görünüşləri çağıran bəzi sorğular işlədin.

Skriptləri təmizləyin. 2 və 4 -cü addımlarda yaratdığınız saxlanan prosedurları və görünüşləri saxlamaq istəyirsinizsə bu hissəni işə salmayın.


Videoya baxın: MS SQL+DBeaver+ PostgreSQL+ Geoserver