Daha çox

Böyük kəsişmə əməliyyatları üçün çox poliqon və ya poliqon xüsusiyyətlərindən istifadə olunur?


Mənim kəsişmə əməliyyatları etmək istədiyim iki böyük təbəqəm var. Biri bələdiyyələr, digəri torpaq sahəsidir. Hal-hazırda, landuse təbəqəsi MultiPolygon tiplidir, yəni bütün dövlət üçün cədvəldə "Meşə" sinfi ilə yalnız bir girişim var, ancaq bir neçə kiçik poliqondan ibarətdir.

Şəhərimdəki bütün meşə sahələrini tapmaq istəsəydim, PostGIS-də daha səmərəli nə olardı:

  1. Bələdiyyəmlə bütün dövləti əhatə edən meşə çox çoxbucağı arasında bir kəsişmə et və ya,
  2. Meşə çox poliqonunu bir neçə poliqonla yeni bir təbəqəyə çevirin və sonra kəsişməni edin

Bağırsaq hissim budur ki, çox poliqon xüsusiyyətini təkbucaqlı poliqonlara ayırsam, kəsişmə daha sürətli ola bilər, çünki yalnız bələdiyyəmlə üst-üstə düşən hüdud qutusu olan çoxbucaqlılarda meydana gələ bilər. Çox poliqon xüsusiyyətlərim varsa, kəsişmə yalnız bələdiyyənin içərisinə düşən hissələri müəyyən etmək üçün bütün vəziyyətdən keçməli olacaqdı.

Bu az-çox almağa çalışdığım şeydir. Açıq yaşıl poliqonları istəyirəm.

Meşə çoxbucaqlarının (F) çox poliqon və ya tək poliqon kimi saxlanılmasının əhəmiyyəti varmı?

Çox böyük bir verilənlər bazasını işləyəcəyəm (Amazon)


Çox poliqonları poliqonlara atmağın, göstərdiyiniz səbəbə görə indeksin daha təsirli olmasına haqlısınız.

Beləliklə, verilənlər bazasının ölçüsü bir problem yaratsa, bunları etməlisiniz:

  1. çox poliqonları yeni bir masaya atın.
  2. çoxbucaqlılarda məkan indeksini yaratmaq
  3. kəsişən hissəni əldə edin və sorğunu kəsişən çoxbucaqlılarla məhdudlaşdırın.

Kimi bir şey:

/ * Çox poliqonlardan çoxbucaqlı cədvəl yaradın * / Cədvəl Forest_polygons seçin (st_dump (geom)). Geom geom from forest_table; / * məkan indeksini yaratmaq * / gist (geom) istifadə edərək Forest_polygons-da idx_forest_geom indeksini yaratmaq; / * İndeks haqqında planlayıcıya məlumat verin * / meşəpoliqonlarını təhlil edin; / * Bələdiyyədə bir meşə seçimi edin və ya daha doğrusu: Meşələrə bələdiyyənin kimliyini təyin edin * / St_intersects (forest_polygons.geom, bələdiyyələr.geom) üzərindəki meşə poligonları içərisindəki bələdiyyələrdən st_intersection (gem), bələdiyyələr_id meşə_in_mədəniyyəti olaraq seçin;

Təsvirinizdən bələdiyyənizlə kəsişən landuse = "meşə" sorğusu torpaq cədvəlinizdəki bir qeydi qaytaracaq. Və bu olduqca səmərəli olmalıdır. Ancaq görünən odur ki, meşə çox poliqonunun hansı hissəsindən bələdiyyə çoxbucağı ilə kəsişdiyini axtarırsınız, buna görə də bunu ayrı-ayrı hissələrə ayırmaq lazımdır. Buna baxmayaraq yeni bir cədvəl yaratmağa ehtiyac yoxdur - bunu dərhal yerinə yetirmək üçün sorğunuzda ST_Dump () istifadə edin və olduqca sürətli olmalıdır. Kimi:

SELECT * FROM bələdiyyələrdən m, (SELECT gid, ST_Dump (geom) .geom the_geom from landuse WHERE class = 'forest') foo WHERE ST_Intersects (m.the_geom, foo.the_geom) AND m.name = 'Denver';


Videoya baxın: تقطيع اللحم في 05 دقائق (Oktyabr 2021).