Bir PL/R
işlev kullanıyorum ve PostGIS
bir dizi nokta etrafında voronoi çokgenleri oluşturmak için. Kullandığım fonksiyon burada tanımlanmıştır . Bu işlevi belirli bir veri kümesinde kullandığımda aşağıdaki hata iletisini alıyorum:
Error : ERROR: R interpreter expression evaluation error
DETAIL: Error in pg.spi.exec(sprintf("SELECT %3$s AS id,
st_intersection('SRID='||st_srid(%2$s)||';%4$s'::text,'%5$s')
AS polygon FROM %1$s WHERE st_intersects(%2$s::text,'SRID='||st_srid(%2$s)||';%4$s');",
:error in SQL statement : Error performing intersection: TopologyException: found non-noded
intersection between LINESTRING (571304 310990, 568465 264611) and LINESTRING (568465
264611, 594406 286813) at 568465.05533706467 264610.82749605528
CONTEXT: In R support function pg.spi.exec In PL/R function r_voronoi
Hata mesajının bu bölümünü incelemeden:
Error performing intersection: TopologyException: found non-noded intersection between
LINESTRING (571304 310990, 568465 264611) and LINESTRING (568465 264611, 594406 286813)
at 568465.05533706467 264610.82749605528
Yukarıda listelenen sorunun neye benzediği:
Başlangıçta bu mesajın aynı noktaların varlığından kaynaklanabileceğini düşündüm ve bunu st_translate()
şu şekilde kullanılan işlevi kullanarak çözmeye çalıştım :
ST_Translate(geom, random()*20, random()*20) as geom
Bu sorunu çözdü, ama benim endişem şu anda x / y yönünde tüm noktaları ~ 20m'ye çeviriyorum. Ayrıca uygun bir çeviri miktarının gerekli olduğunu da söyleyemem. Örneğin, bu veri setinde deneme yanılma yoluyla a 20m * random number
tamam, ama bunun daha büyük olması gerektiğini nasıl anlayabilirim?
Yukarıdaki resme dayanarak problemin, algoritma noktayı bir poligonla kesmeye çalışırken, noktanın çizgiyle kesiştiğini düşünüyorum. Noktanın bir çizgiyle kesişmek yerine çokgen içinde olmasını sağlamak için ne yapmam gerektiğinden emin değilim. Hata bu satırda meydana geliyor:
"SELECT
%3$s AS id,
st_intersection(''SRID=''||st_srid(%2$s)||'';%4$s''::text,''%5$s'') AS polygon
FROM
%1$s
WHERE
st_intersects(%2$s::text,''SRID=''||st_srid(%2$s)||'';%4$s'');"
Bu önceki soruyu okudum, "başını sallamayan bir kavşak" nedir? Bu sorunu daha iyi anlamaya çalışmak ve bu sorunun en iyi nasıl çözülebileceğine dair tavsiyelerde bulunmaktan memnuniyet duyarız.
WHERE ST_IsValid(p.geom)
başlangıçta noktaları filtrelemek için kullanıyorum .