Daha çox

Çini döşənmiş rasterdən ST_Clip və ST_Union istifadə edərək PostGIS çoxbucaqlı klipi səhvdir


PostGIS effektiv verilənlər bazasında 128x128 ölçülü bir RGB raster var. Bir poliqondan istifadə edərək rastrdan aşağıdakı kimi klip çəkməyə çalışıram:

SELECT ST_AsGDALRaster (rast, 'GTiff) FROM (SELECT ST_Union (ST_Clip (rast, Geom)) scenes.rgb CROSS FROM Rast AS OL ST_Transform (ST_GeomFromText (POLYGON ((148.296964462160986 -28.914219626449281, 148,300054703309883 -28,892809637280056, 148,288369276810897 -28,891374636835419, 148,290750573935583 HARADA st_intersects Geom (Rast AS -28,87714520356819, 148,305307129311188 -28,878270936973706, 148,305323220779684 -28,892336715938328, 148,307563219233941 -28,892525982844003, 148,30733671875592 -28,893583124483161, 148,323105875277065 -28,895609384106994, 148,319860482823429 -28,917021311138011, 148,319860482823429 -28,917021311138011, 148.296964462160986 -28.914219626449281)), 4326), 32655) geom)) AS rast;

Qrafikə baxın, padok hüdudları qara konturdur - şəkil bu sahəyə çəkmək üçündür.

Sualım, sorğumu necə dəyişə bilərəm ki, kəsilmiş raster çoxbucaqlıya uyğun gəlsin?


Çoxbucağınızı raster proyeksiyanıza görə yenidən qiymətləndirməlisiniz, sonra rasteri klip edə bilərsiniz.

Bunu necə edə bilərsiniz:

R = raster

u_R = raster birləşməsi

P = Çoxbucaqlı

1-Çoxbucağınızla kəsişən plitələr seçin

ST_Intersects (u_R.raster, st_transform (P.geom, st_srid (iles_R.raster))) olduğu yerdə R-dən SELECT * olaraq masa plitələri_R yaradın.

2-Rasterinizin birləşməsini aşağıdakı kimi həyata keçirin:

U_R cədvəlini plitələr_R-dən raster olaraq SEÇİN st_union (rast) olaraq yaradın

3-Sonra rasterinizi kəsin

ST_Clipləri seçin (u_R.raster, 1, st_transform (P.geom, st_srid (u_R.raster)), false). ))

Postgisin yeni versiyalarında belə bir səhv olduğu görünür. Bileti @ https://trac.osgeo.org/postgis/ticket/3457 yoxlayın


Mən də oxşar problemlərlə üzləşirəm. @Koshy Thomas / a / 188515/75756-da təklif etdiyi inkişafdan irəli gələn bir səhv kimi görünür. ST_Clip-in fərqli zənglərinin necə davrandığını öz-özünə izah edən ekran görüntüləri göndərirəm:

  • klip üçün sahə (gisdata.f_a_sampling_stratum_testing)

Əvvəlcə plitələrin birləşməsi ilə doğru nəticələr

plitələrin birləşməsi çox böyük olduqda mümkün deyil (yaddaşa uyğun deyil)

- varsa gisdata.f_a_sampling_stratum_testing_clip birliyi_variant açılan cədvəl; gisdata.fty_2012_020m_eu_03035_d01_full, gisdata.f_a_sampling_stratum_stratum_stratum_tratom_testum

Plitələr kəsərkən səhv nəticə

kafel ölçüsü geom ilə kəsişməyəndə ST_Clip yerinə yetirilmir

- gisdata.f_a_sampling_stratum_testing_clip varsa döşənmiş_variant_I cədvəl; gisdata.fty_2012_020m_eu_03035_d01_full, gisdata.f_a_sampling_stratum_testects rast olaraq st_clip (rast, geom, false) kimi rast seçilmiş olaraq cədvəl gisdata.f_a_sampling_stratum_testing_clip yaradın;

Raster plitələrin kəsişmələri ilə kəsildiyi zaman səhv nəticə

- gisdata.f_a_sampling_stratum_testing_clip varsa döşənmiş_variant_II açılan cədvəl; seçin stol kimi gisdata.f_a_sampling_stratum_testing_clip seçin, vəziyyət st_within (st_convexhull (rast), geom) sonra rast else st_clip (rast, st_intersection (st_convexhull (rast), geom), false) son rast, st_withh (rastcon), geom) is_within, st_intersection (st_convexhull (rast), geom) :: həndəsə (çoxbucaqlı, 3035) geom kimi gisdata.fty_2012_020m_eu_03035_d01_full, gisdata.f_a_sampling_stratum_testing where st_;


Yuxarıdakı sualımdakı kod bəzi sorğular üçün işləyir, lakin etibarsızdır. Elmo prosesini davam etdirən, lakin heç bir yeni cədvəl yaratmadan bu sorğu ilə hələlik qərarlaşdım. İstədiyimdən çox iş tələb etdiyi üçün satılmıram - qayıtmaq üçün yarım saniyə əlavə.

SELECT ST_AsGDALRaster (rast, 'GTiff) FROM (SELECT ST_Clip (rast, ST_Transform (ST_GeomFromText (POLYGON ((148.296964462160986 -28.914219626449281, 148,300054703309883 -28,892809637280056, 148,288369276810897 -28,891374636835419, 148,290750573935583 -28,87714520356819, 148,305307129311188 -28,878270936973706, 148,305323220779684 -28,892336715938328, 148,307563219233941 - FROM Rast AS 28,892525982844003, 148,30733671875592 -28,893583124483161, 148,323105875277065 -28,895609384106994, 148,319860482823429 -28,917021311138011, 148,319860482823429 -28,917021311138011, 148.296964462160986 -28.914219626449281)), 4326), 32655)) (SELECT ST_Union scenes.rgb FROM (SELECT Rast olan Rast kimi (rast) HARADA ST_Intersects (scenes.rgb.rast, ST_Transform (ST_GeomFromText (POLYGON ((148.296964462160986 -28.914219626449281, 148,300054703309883 -28,892809637280056, 148,288369276810897 -28,891374636835419, 148,290750573935583 -28,87714520356819, 148,305307129311188 -28,878270936973706, 148,305323220779684 -28,8923 Rast AS Rast AS Rast AS 36715938328, 148,307563219233941 -28,892525982844003, 148,30733671875592 -28,893583124483161, 148,323105875277065 -28,895609384106994, 148,319860482823429 -28,917021311138011, 148,319860482823429 -28,917021311138011, 148.296964462160986 -28.914219626449281)), 4326), 32655)))));


Videoya baxın: Dördbucaqlılar,coxbucaqlılar. 1-68 izahlı toplu 1994-2015 (Oktyabr 2021).