2013-11-28 361 views
1

我试图缓冲MULTIPOLYGON这样PostGIS的st_buffer返回多边形

MULTIPOLYGON(((18.601741790771 54.355655947711,18.613586425781 54.356856362498,18.616676330566 54.353855259767,18.601913452148 54.353255012915,18.601741790771 54.355655947711),(18.654441833496 54.360357371971,18.656673431396 54.366558427837,18.667144775391 54.3662583983,18.667659759521 54.36025734727,18.654441833496 54.360357371971),(18.71057510376 54.344750573821,18.719329833984 54.344750573821,18.720188140869 54.341748586892,18.707656860352 54.342449070119,18.71057510376 54.344750573821),(18.590068817139 54.344050129814,18.604831695557 54.344150193975,18.603458404541 54.339146687545,18.585090637207 54.340047363647,18.590068817139 54.344050129814)))

它包含4周分离的多边形。

当我打电话

select st_astext( gis.st_Buffer( gis.ST_GeomFromText( 'MULTIPOLYGON(((18.601741790771 54.355655947711,18.613586425781 54.356856362498,18.616676330566 54.353855259767,18.601913452148 54.353255012915,18.601741790771 54.355655947711),(18.654441833496 54.360357371971,18.656673431396 54.366558427837,18.667144775391 54.3662583983,18.667659759521 54.36025734727,18.654441833496 54.360357371971),(18.71057510376 54.344750573821,18.719329833984 54.344750573821,18.720188140869 54.341748586892,18.707656860352 54.342449070119,18.71057510376 54.344750573821),(18.590068817139 54.344050129814,18.604831695557 54.344150193975,18.603458404541 54.339146687545,18.585090637207 54.340047363647,18.590068817139 54.344050129814)))' ) ,0) ) as buffer

我正在geiitng单个多边形(从多actualy第一个元素):

POLYGON((18.601741790771 54.355655947711,18.613586425781 54.356856362498,18.616676330566 54.353855259767,18.601913452148 54.353255012915,18.601741790771 54.355655947711))

任何想法,它是如何posibble从中获取多边形缓冲多面?

回答

0

multipolygon无效。

SELECT ST_IsValid(geom), ST_IsValidReason(geom) 
FROM (
SELECT 'MULTIPOLYGON(((18.601741790771 54.355655947711,18.613586425781 54.356856' 
     '362498,18.616676330566 54.353855259767,18.601913452148 54.353255012915,' 
     '18.601741790771 54.355655947711),(18.654441833496 54.360357371971,18.656' 
     '673431396 54.366558427837,18.667144775391 54.3662583983,18.667659759521 ' 
     '54.36025734727,18.654441833496 54.360357371971),(18.71057510376 54.34475' 
     '0573821,18.719329833984 54.344750573821,18.720188140869 54.341748586892,' 
     '18.707656860352 54.342449070119,18.71057510376 54.344750573821),(18.5900' 
     '68817139 54.344050129814,18.604831695557 54.344150193975,18.603458404541' 
     ' 54.339146687545,18.585090637207 54.340047363647,18.590068817139 54.3440' 
     '50129814)))'::geometry AS geom 
) AS f; 
NOTICE: Hole lies outside shell at or near point 18.654441833496001 54.360357371970998 

st_isvalid |      st_isvalidreason 
------------+---------------------------------------------------------- 
f   | Hole lies outside shell[18.654441833496 54.360357371971] 
(1 row) 

无效的几何形状有bad implications for calculations, such as buffer。没有必要再将结果分开。

+0

感谢您的回复。 – user3003708

+2

我的问题是icorrect MULTIPOLYGON定义。我用模式'MULTIPOLYGON(((__ POLY __),(__ POLY__),...,(__POLY __)))'而不是'MULTIPOLYGON(((__ POLY __)),((__ POLY__)),..., ((__POLY __)))' – user3003708

相关问题