[PostGIS] #6101: ST_CollectionExtract is rouding 2 decimals
PostGIS
trac at osgeo.org
Thu Jul 16 21:20:19 PDT 2026
#6101: ST_CollectionExtract is rouding 2 decimals
-------------------------------+---------------------
Reporter: Lars Aksel Opsahl | Owner: pramsey
Type: defect | Status: new
Priority: medium | Milestone:
Component: postgis | Version: master
Keywords: |
-------------------------------+---------------------
From running
{{{
SELECT ST_AsText(
ST_Split(
-- big line
'0102000020A21000003A00000084B691128CD516408C40EC55D8774D40D5A3CAAC11D61640A26D12ADD9774D40102D01246FD61640D7E9219DDA774D40DCD3A31869D61640C0BE38C7DF774D4056245C8A86D6164079B4A1A2E3774D403965A07870D61640A68A2452E9774D4059B1A77A74D61640EC48C02BEB774D40B0D8938B95D616401630AA5BED774D40D469FC87E0D616404168C47FEF774D400B9F64EFFED61640834B3954F1774D401CD9FBC009D7164029DC85C1F8774D4066B0D0342CD716403A69A73A02784D4086E6308FBED71640762E9E5E02784D405BDB3F98C0D716400B30B82701784D400E9571C9B6D71640F54ED078F9774D40F8735C97BED71640A50AC79DF8774D40B2C70DF5CFD7164026251EFDF7774D4020BBC0C7D1D71640B7C1A5E6F6774D400E65CEAFB5D71640D06F187AF5774D409D0A05A4B0D71640476AAC38F5774D40079DC9A3B0D716404CBB9A38F5774D405E46EDA9A0D716406E7A9E77F0774D4089B6A8C396D716405EA3BEA8E9774D40925CC1E889D716401CF00B4BE5774D4015E2D34A81D71640007FD75DE2774D403D0B284A81D716407B148B5DE2774D407C8AC24981D7164030F15D5DE2774D402B1470CF6FD71640C543A897DA774D40AECC3CB466D71640D1CFFB8AD6774D405EC8749967D71640D19C7952D6774D409B45A8CB52D7164054D7CEC0D5774D40AEEBF3A03FD7164049D66506D4774D4004A0262E33D71640C2F1EFDBCF774D40F90EC53D32D71640E8398E1ECA774D4062A7C6862BD71640E033B395C9774D408B0296B320D716400CB11358C0774D40422620C80BD7164013B30FC6B6774D40A398A2E00AD71640FAEC8AA5AF774D40767C04140DD7164009093C79AE774D40D353AA697FD6164094953190B1774D408B0167C144D61640D96EC740B3774D40C89EE71C38D61640D8C75E10B4774D40FE95AE5B39D6164015071B13B5774D4060AC3EC82FD616408C3F0A52B6774D408C8872C312D616400F41914CB8774D40D5A3CAAC11D616409AF8366FB8774D40A3FF66A10ED61640FB361FD0B8774D40609E3EA00ED616404C594AD0B8774D4059450B23F8D51640A24078B7BC774D40D86A00B1EFD5164058A59353C0774D4059185A02D3D516401B48DF27C6774D40453F113E91D51640A39CFE7FCD774D40BDDB48F956D516405A46A20AD1774D408B98EB664FD516400AACF3C5D1774D40A916A38B42D5164043EADE85D5774D40F77BB4D65DD51640E2F491E1D5774D4005288D5467D51640A5029C72D7774D4084B691128CD516408C40EC55D8774D40',
--small cirle
'0103000020A210000001000000210000001E79BA1A0DD7164009093C79AE774D406576991A0DD71640D5231279AE774D40FBB2371A0DD71640CADAE978AE774D40ABF098190DD716403DBAC478AE774D405149C3180DD716406E2FA478AE774D40D6F2BE170DD71640837A8978AE774D406BEE95160DD7164039A27578AE774D4019A653150DD71640CB696978AE774D40777C04140DD7164074496578AE774D40D552B5120DD71640CB696978AE774D40830A73110DD7164039A27578AE774D4018064A100DD71640837A8978AE774D409DAF450F0DD716406E2FA478AE774D404308700E0DD716403DBAC478AE774D40F345D10D0DD71640CADAE978AE774D4089826F0D0DD71640D5231279AE774D40D07F4E0D0DD7164009093C79AE774D4089826F0D0DD716403DEE6579AE774D40F345D10D0DD7164048378E79AE774D404308700E0DD71640D557B379AE774D409DAF450F0DD71640A4E2D379AE774D4018064A100DD716408F97EE79AE774D40830A73110DD71640D96F027AAE774D40D552B5120DD7164047A80E7AAE774D40777C04140DD716409EC8127AAE774D4019A653150DD7164047A80E7AAE774D406BEE95160DD71640D96F027AAE774D40D6F2BE170DD716408F97EE79AE774D405149C3180DD71640A4E2D379AE774D40ABF098190DD71640D557B379AE774D40FBB2371A0DD7164048378E79AE774D406576991A0DD716403DEE6579AE774D401E79BA1A0DD7164009093C79AE774D40'
)
);
}}}
I get this
{{{
GEOMETRYCOLLECTION(LINESTRING(5.708542146819699
58.936289539678086,5.70905179964844 58.93633044624154,5.709408342906741
58.936359063681884,5.709385285376779 58.9365166689945,5.709497606157205
58.93663437743903,5.709413418569334 58.936807887880875,5.709428707585482
58.93686434639844,5.709554844759779 58.93693109331086,5.709840893536654
58.9369964322109,5.709956875339922 58.937052276588496,5.709998145457828
58.9372789291013,5.710129571187371 58.937568027251885,5.710687863692902
58.93757231448846,5.71069562806846 58.937535252509484,5.7106582141471
58.93730077906904,5.710687985437282 58.93727466791942,5.710754231420582
58.93725551578454,5.710761185778011 58.937222319541824,5.710654017422042
58.93717886155321,5.710634768302637 58.9371710626479,5.710634764843468
58.93717105441337,5.710573821169957 58.93702597845264,5.710536057636667
58.93681821163658,5.710487019349914 58.93668497164637,5.710454148466416
58.93659565946837,5.710454138464056 58.93659562388435,5.710454132555807
58.936595602865395,5.710387459960695 58.93635841098834,5.710352722369107
58.93623482985971,5.710356137993669 58.936228093510756,5.710276777406217
58.93621072864212,5.710203661811574 58.93615798923981,5.710156174762236
58.93603085723909,5.710152592804428 58.93585569328917,5.710126977801197
58.935839378835,5.710085683852081 58.93555737458709,5.710005881273505
58.935265309968734,5.71000243179711 58.935047810396966,5.71001080408103
58.9350121079639),LINESTRING(5.71001080408103
58.9350121079639,5.710010826848807 58.9350120108739,5.710010728538232
58.93501202802691),LINESTRING(5.710010728538232
58.93501202802691,5.709470416089022 58.935106300555304,5.709246656333913
58.93515786874713,5.709198428761461 58.93518261554681,5.709203178912046
58.93521345920286,5.709166649651792 58.9352514791527,5.709055951943935
58.93531186192023,5.70905179964844 58.93531599220405,5.709040185843977
58.935327544442735,5.709040168592395 58.93532756452859,5.708954379618569
58.93544667598441,5.708922162676309 58.935556838124,5.708812748669595
58.93573473360467,5.708561868479426 58.935958861658285,5.708339591094895
58.93606694148612,5.708310707215911 58.9360892715268,5.708261663273938
58.93620370277906,5.708365778699764 58.9362146341971,5.708401986232279
58.936262441803855,5.708542146819699 58.936289539678086))
}}}
Then I run this to get all linestrings
{{{
SELECT ST_AsText(ST_CollectionExtract(
ST_Split(
-- big line
'0102000020A21000003A00000084B691128CD516408C40EC55D8774D40D5A3CAAC11D61640A26D12ADD9774D40102D01246FD61640D7E9219DDA774D40DCD3A31869D61640C0BE38C7DF774D4056245C8A86D6164079B4A1A2E3774D403965A07870D61640A68A2452E9774D4059B1A77A74D61640EC48C02BEB774D40B0D8938B95D616401630AA5BED774D40D469FC87E0D616404168C47FEF774D400B9F64EFFED61640834B3954F1774D401CD9FBC009D7164029DC85C1F8774D4066B0D0342CD716403A69A73A02784D4086E6308FBED71640762E9E5E02784D405BDB3F98C0D716400B30B82701784D400E9571C9B6D71640F54ED078F9774D40F8735C97BED71640A50AC79DF8774D40B2C70DF5CFD7164026251EFDF7774D4020BBC0C7D1D71640B7C1A5E6F6774D400E65CEAFB5D71640D06F187AF5774D409D0A05A4B0D71640476AAC38F5774D40079DC9A3B0D716404CBB9A38F5774D405E46EDA9A0D716406E7A9E77F0774D4089B6A8C396D716405EA3BEA8E9774D40925CC1E889D716401CF00B4BE5774D4015E2D34A81D71640007FD75DE2774D403D0B284A81D716407B148B5DE2774D407C8AC24981D7164030F15D5DE2774D402B1470CF6FD71640C543A897DA774D40AECC3CB466D71640D1CFFB8AD6774D405EC8749967D71640D19C7952D6774D409B45A8CB52D7164054D7CEC0D5774D40AEEBF3A03FD7164049D66506D4774D4004A0262E33D71640C2F1EFDBCF774D40F90EC53D32D71640E8398E1ECA774D4062A7C6862BD71640E033B395C9774D408B0296B320D716400CB11358C0774D40422620C80BD7164013B30FC6B6774D40A398A2E00AD71640FAEC8AA5AF774D40767C04140DD7164009093C79AE774D40D353AA697FD6164094953190B1774D408B0167C144D61640D96EC740B3774D40C89EE71C38D61640D8C75E10B4774D40FE95AE5B39D6164015071B13B5774D4060AC3EC82FD616408C3F0A52B6774D408C8872C312D616400F41914CB8774D40D5A3CAAC11D616409AF8366FB8774D40A3FF66A10ED61640FB361FD0B8774D40609E3EA00ED616404C594AD0B8774D4059450B23F8D51640A24078B7BC774D40D86A00B1EFD5164058A59353C0774D4059185A02D3D516401B48DF27C6774D40453F113E91D51640A39CFE7FCD774D40BDDB48F956D516405A46A20AD1774D408B98EB664FD516400AACF3C5D1774D40A916A38B42D5164043EADE85D5774D40F77BB4D65DD51640E2F491E1D5774D4005288D5467D51640A5029C72D7774D4084B691128CD516408C40EC55D8774D40',
--small cirle
'0103000020A210000001000000210000001E79BA1A0DD7164009093C79AE774D406576991A0DD71640D5231279AE774D40FBB2371A0DD71640CADAE978AE774D40ABF098190DD716403DBAC478AE774D405149C3180DD716406E2FA478AE774D40D6F2BE170DD71640837A8978AE774D406BEE95160DD7164039A27578AE774D4019A653150DD71640CB696978AE774D40777C04140DD7164074496578AE774D40D552B5120DD71640CB696978AE774D40830A73110DD7164039A27578AE774D4018064A100DD71640837A8978AE774D409DAF450F0DD716406E2FA478AE774D404308700E0DD716403DBAC478AE774D40F345D10D0DD71640CADAE978AE774D4089826F0D0DD71640D5231279AE774D40D07F4E0D0DD7164009093C79AE774D4089826F0D0DD716403DEE6579AE774D40F345D10D0DD7164048378E79AE774D404308700E0DD71640D557B379AE774D409DAF450F0DD71640A4E2D379AE774D4018064A100DD716408F97EE79AE774D40830A73110DD71640D96F027AAE774D40D552B5120DD7164047A80E7AAE774D40777C04140DD716409EC8127AAE774D4019A653150DD7164047A80E7AAE774D406BEE95160DD71640D96F027AAE774D40D6F2BE170DD716408F97EE79AE774D405149C3180DD71640A4E2D379AE774D40ABF098190DD71640D557B379AE774D40FBB2371A0DD7164048378E79AE774D406576991A0DD716403DEE6579AE774D401E79BA1A0DD7164009093C79AE774D40'
)
)
,2);
}}}
we se that we end with two decimals 5.708542146819699 is changed to 5.71
{{{
MULTILINESTRING((5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71
58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71
58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71
58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71
58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71
58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71
58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94),(5.71 58.94,5.71
58.94,5.71 58.94),(5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71
58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71
58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71 58.94,5.71
58.94,5.71 58.94,5.71 58.94,5.71 58.94))
}}}
This is tested on
{{{
POSTGIS="3.7.0dev 3.6.0rc2-620-gb8c7b0142" [EXTENSION] PGSQL="170"
GEOS="3.15.0dev-CAPI-1.21.0" PROJ="9.9.0 NETWORK_ENABLED=OFF
URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/tmp/proj
DATABASE_PATH=/usr/local/share/proj/proj.db" (compiled against PROJ 9.9.0)
LIBXML="2.9.14" LIBJSON="0.18" LIBPROTOBUF="1.5.1" WAGYU="0.5.0
(Internal)" TOPOLOGY
}}}
--
Ticket URL: <https://trac.osgeo.org/postgis/ticket/6101>
PostGIS <http://trac.osgeo.org/postgis/>
The PostGIS Trac is used for bug, enhancement & task tracking, a user and developer wiki, and a view into the subversion code repository of PostGIS project.
More information about the postgis-tickets
mailing list