[postgis-users] error with buffer()

Kevin Neufeld kneufeld at refractions.net
Fri Apr 25 09:18:53 PDT 2008


Instead of using buffer(geom, 0) you could rebuild the polygon manually.

This works...

SELECT
ST_BuildArea(
ST_Union(
ST_Boundary(the_geom),
ST_PointN(ST_Boundary(the_geom),1)
)
)
FROM
(SELECT 'MULTIPOLYGON...'::geometry);

-- Kevin


Stefan Zweig wrote:
> Hi paul,
>
> here we go, there is the new animal for your "zoo":
>
> select buffer(st_geomFromText('MULTIPOLYGON(((12.098789 50.905962,12.020813 50.947952,12.017285 50.967973,12.090563 50.976663,12.163175 50.959211,12.133071 50.932547,12.154221 50.884623,12.098789 50.905962),(12.1286244 50.8950136,12.1287442 50.8951404,12.1278504 50.8950303,12.1278598 50.8948964,12.1286244 50.8950136),(12.0922723 50.9546386,12.0926358 50.9541698,12.092428 50.955268,12.0922918 50.9551482,12.0922723 50.9546386),(12.1087437 50.8989343,12.1078831 50.8989326,12.107387 50.898063,12.1079471 50.8986231,12.1087437 50.8989343),(12.1228954 50.9164961,12.1233835 50.9177103,12.1224951 50.918326,12.1212225 50.9188562,12.1228954 50.9164961),(12.142612 50.884225,12.1490617 50.8856118,12.149222 50.885687,12.1437629 50.8846708,12.142612 50.884225),(12.090005 50.955723,12.0901606 50.9556077,12.0940001 50.9560483,12.0920097 50.9573598,12.090005 50.955723),(12.1515115 50.9369131,12.1504699 50.9391583,12.148134 50.93827,12.1503487 50.938083,12.1515115 50.9369131),(12.1360606 50.8892593,12.1344196 50.8892146,12.1357368 50.8858406,12.1399245 50.8865412,12.1360606 50.8892593),(12.087163 50.927347,12.0851166 50.9255544,12.084949 50.924396,12.08763 50.9271838,12.0894109 50.9306506,12.088262 50.932468,12.087163 50.927347),(12.0873679 50.9640895,12.0886015 50.9574848,12.069322 50.955508,12.094624 50.954051,12.1028119 50.9615,12.0873679 50.9640895)),((12.0832251 50.8628502,12.072535 50.8760369,12.0803652 50.8942363,12.0954397 50.8841184,12.0832251 50.8628502)),((12.089448 50.957301,12.089702 50.959116,12.0927875 50.9596698,12.0938183 50.9579664,12.089448 50.957301)),((12.0964798 50.9605757,12.0969206 50.9605509,12.0939251 50.9599157,12.0952655 50.960698,12.0964798 50.9605757)),((12.089702 50.959116,12.0901026 50.9596047,12.0926431 50.9598645,12.0907201 50.9594751,12.089702 50.959116)))'),0);
>
> the select crashes with
>
> select postgis_full_version()
> "POSTGIS="1.3.3" GEOS="3.0.0-CAPI-1.4.1" PROJ="Rel. 4.6.0, 21 Dec 2007" USE_STATS"
>
> regards,
>
> stefan
>
>
>   
>> -----Ursprüngliche Nachricht-----
>> Von: PostGIS Users Discussion <postgis-users at postgis.refractions.net>
>> Gesendet: 22.04.08 17:05:32
>> An: "PostGIS Users Discussion" <postgis-users at postgis.refractions.net>
>> Betreff: Re: [postgis-users] error with buffer()
>>     
>
>
>   
>> Send in your geometry! Some geometry/parameter combinations break
>> ST_Buffer() and we like to add those to our zoo of unusual and
>> interesting cases for future improvement.
>>
>> P
>>
>> In the meantime, try slightly simplifying your geometry first, or
>> doing your buffer in 2 or more steps of smaller tolerances, or
>> sacrificing a goat before starting the function call... :)
>>
>> On Tue, Apr 22, 2008 at 2:52 AM, Stefan Zweig <stefanzweig1881 at web.de> wrote:
>>     
>>>  hi list,
>>>
>>>  there seems to be an error within the buffer(geometry, precision) function.
>>>
>>>  i just tried to the following statement:
>>>  UPDATE _g2870 SET the_geom_3_b = buffer(the_geom_3, 0) WHERE isValid(the_geom_3) = false;
>>>  and it resulted into a broken connection to the postmaster. postgis seems to have problems with the buffer function and invalid geometries. the server.log says the following:
>>>
>>>  bufferOriginalPrecision failed (TopologyException: unable to assign hole to a shell), trying with reduced precision
>>>  recomputing with precision scale factor = 1e+12
>>>  Scaler: offsetX,Y: 0,0 scaleFactor: 1e+12
>>>  ReScaler: offsetX,Y: 0,0 scaleFactor: 1e+12
>>>  recomputing with precision scale factor = 1e+11
>>>  Scaler: offsetX,Y: 0,0 scaleFactor: 1e+11
>>>  ReScaler: offsetX,Y: 0,0 scaleFactor: 1e+11
>>>  recomputing with precision scale factor = 1e+10
>>>  Scaler: offsetX,Y: 0,0 scaleFactor: 1e+10
>>>  ReScaler: offsetX,Y: 0,0 scaleFactor: 1e+10
>>>  recomputing with precision scale factor = 1e+09
>>>  Scaler: offsetX,Y: 0,0 scaleFactor: 1e+09
>>>  ReScaler: offsetX,Y: 0,0 scaleFactor: 1e+09
>>>  recomputing with precision scale factor = 1e+08
>>>  Scaler: offsetX,Y: 0,0 scaleFactor: 1e+08
>>>  ReScaler: offsetX,Y: 0,0 scaleFactor: 1e+08
>>>  recomputing with precision scale factor = 1e+07
>>>  Scaler: offsetX,Y: 0,0 scaleFactor: 1e+07
>>>  ReScaler: offsetX,Y: 0,0 scaleFactor: 1e+07
>>>  recomputing with precision scale factor = 1e+06
>>>  Scaler: offsetX,Y: 0,0 scaleFactor: 1e+06
>>>  ReScaler: offsetX,Y: 0,0 scaleFactor: 1e+06
>>>  recomputing with precision scale factor = 100000
>>>  Scaler: offsetX,Y: 0,0 scaleFactor: 100000
>>>  ReScaler: offsetX,Y: 0,0 scaleFactor: 100000
>>>  recomputing with precision scale factor = 10000
>>>  Scaler: offsetX,Y: 0,0 scaleFactor: 10000
>>>  ReScaler: offsetX,Y: 0,0 scaleFactor: 10000
>>>  recomputing with precision scale factor = 1000
>>>  Scaler: offsetX,Y: 0,0 scaleFactor: 1000
>>>  pdata 10.100.6.140(1782) UPDATE: ../../source/headers/geos/noding/SegmentString.h:175: void geos::noding::SegmentString::testInvariant() const: Zusicherung »pts->size() > 1« nicht erf�llt.
>>>  LOG: server process (PID 7510) was terminated by signal 6
>>>  LOG: terminating any other active server processes
>>>  WARNING: terminating connection because of crash of another server process
>>>  DETAIL: The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.
>>>  HINT: In a moment you should be able to reconnect to the database and repeat your command.
>>>  WARNING: terminating connection because of crash of another server process
>>>  DETAIL: The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.
>>>  HINT: In a moment you should be able to reconnect to the database and repeat your command.
>>>  LOG: all server processes terminated; reinitializing
>>>  LOG: database system was interrupted at 2008-04-22 11:18:52 CEST
>>>  LOG: checkpoint record is at 0/9A4F7BC8
>>>  LOG: redo record is at 0/9A4F7BC8; undo record is at 0/0; shutdown TRUE
>>>  LOG: next transaction ID: 0/51508; next OID: 322761
>>>  LOG: next MultiXactId: 1; next MultiXactOffset: 0
>>>  LOG: database system was not properly shut down; automatic recovery in progress
>>>  LOG: redo starts at 0/9A4F7C18
>>>  LOG: unexpected pageaddr 0/9161E000 in log file 0, segment 154, offset 6414336
>>>  LOG: redo done at 0/9A61D790
>>>  LOG: database system is ready
>>>
>>>
>>>  my postgis_version is:
>>>  select postgis_full_version()
>>>  "POSTGIS="1.3.3" GEOS="3.0.0-CAPI-1.4.1" PROJ="Rel. 4.6.0, 21 Dec 2007" USE_STATS"
>>>
>>>  any ideas?
>>>
>>>  regards,
>>>  stefan
>>>  _______________________________________________________________________
>>>  Jetzt neu! Schützen Sie Ihren PC mit McAfee und WEB.DE. 30 Tage
>>>  kostenlos testen. http://www.pc-sicherheit.web.de/startseite/?mc=022220
>>>
>>>  _______________________________________________
>>>  postgis-users mailing list
>>>  postgis-users at postgis.refractions.net
>>>  http://postgis.refractions.net/mailman/listinfo/postgis-users
>>>
>>>       
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at postgis.refractions.net
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>>
>>     
>
>
> ______________________________________________________
> Bis 50 MB Dateianhänge? Kein Problem!
> http://freemail.web.de/club/landingpage.htm/?mc=025556
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>   




More information about the postgis-users mailing list