9

Adding a new temporary scratch layer in QGIS, selecting the Geometry type, there are different options, between else MultiSurface.

In the documentation, I could not find any information about this Geometry type. What is the difference from MultiPolygon? As I understand it, a MultiPolygon is used to create features with several non contigent parts - like countries consisting of the mainland + islands (say Italy: the "boot"-shaped mainland + Sicily, Sardinia etc.). So what are MultiSurfaces for?

2
  • 1
    A nice thread about MultiPolygon can be found here : gis.stackexchange.com/questions/225368/…. Information about MultiSurface can be found for instance here : datypic.com/sc/niem21/e-geo_MultiSurface.html. Briefly saying: Italy is your MultiPolygon, but as soon as you add a Surface e.g. a TIN to it using the ST_MultiSurface(), it becomes a MultiSurface. So, basically MultiSurface extends MultiPolygon,
    – Taras
    Jan 17, 2022 at 8:23
  • 1
    Surface extents multipolygon so that while the segments of a polygon are all straight lines in a surface they can also be curves.
    – user30184
    Jan 17, 2022 at 8:35

1 Answer 1

8

The OGC standard about Simple Features describes LineString and LinearRing

A LineString is a Curve with linear interpolation between Points. Each consecutive pair of Points defines a Line segment.

A LinearRing is a LineString that is both closed and simple

Polygons are made of LinearRings so it means that in a polygon all the segments are straight lines.

Curvepolygon is a geometry that allows also curved segments (arcs). Geometry that is combined from several Curvepolygons is called MultiSurface.

An example about the difference using the PostGIS function https://postgis.net/docs/ST_CurveToLine.html

Source geometry is a curvepolygon that could be an element in a multisurface:

'CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))';

Apply the PosGIS function ST_CurveToLine:

    select ST_AsText(
        ST_CurveToLine(ST_GeomFromText(
                      'CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))')));

Resulting output:

"POLYGON((1 3,1.313519436051493 3.228634069139761,1.615442682167029 3.472376408113742,1.905042378801364 3.730639820278051,2.18162085491937 4.00280212645158,2.444511808746663 4.288207663800152,2.693081912948945 4.586168865385723,2.926732340373023 4.895967916575354,3.144900206673873 5.21685848431954,3.347059926352328 5.548067515133887,3.532724478936582 5.888797097452681,3.701446582257166 6.238226383867729,3.852819769988868 6.595513568621666,3.986479370863718 6.959797915591758,4 7,4.153336482273182 6.996235800641164,4.306303563529878 6.984952270850615,4.458532732673006 6.966176593639941,4.609657256300401 6.939954001260095,4.7593130621977 6.90634766623295,4.907139616420195 6.865438549163153,5.052780791850688 6.81732520369694,5.195885726140906 6.762123539097772,5.336109666969632 6.69996654101076,5.473114802581243 6.631003951088609,5.606571075603817 6.55540190625085,5.736156978186257 6.473342538445454,5.861560326538854 6.385023535877015,5.982479013011392 6.290657666758554,6.098621733896932 6.190472266734247,6.209708691207961 6.084708691207961,6.315472266734247 5.973621733896932,6.415657666758554 5.857479013011392,6.510023535877016 5.736560326538854,6.598342538445454 5.611156978186257,6.68040190625085 5.481571075603817,6.756003951088609 5.348114802581243,6.82496654101076 5.211109666969632,6.887123539097772 5.070885726140905,6.94232520369694 4.927780791850688,6.990438549163153 4.782139616420195,7.03134766623295 4.6343130621977,7.064954001260095 4.484657256300401,7.091176593639941 4.333532732673005,7.109952270850616 4.181303563529878,7.121235800641164 4.028336482273182,7.125 3.875,7.121235800641164 3.721663517726819,7.109952270850616 3.568696436470123,7.091176593639941 3.416467267326995,7.064954001260095 3.265342743699599,7.03134766623295 3.1156869378023,6.990438549163153 2.967860383579805,6.94232520369694 2.822219208149312,6.887123539097772 2.679114273859095,6.824966541010761 2.538890333030369,6.756003951088609 2.401885197418757,6.68040190625085 2.268428924396182,6.598342538445454 2.138843021813743,6.510023535877016 2.013439673461146,6.415657666758554 1.892520986988608,6.315472266734247 1.776378266103067,6.209708691207961 1.665291308792039,6.098621733896933 1.559527733265753,5.982479013011392 1.459342333241447,5.861560326538854 1.364976464122985,5.736156978186257 1.276657461554546,5.606571075603817 1.19459809374915,5.473114802581243 1.118996048911391,5.336109666969631 1.05003345898924,5.195885726140906 0.987876460902229,5.052780791850688 0.93267479630306,4.907139616420195 0.884561450836847,4.7593130621977 0.84365233376705,4.609657256300402 0.810045998739905,4.458532732673006 0.783823406360059,4.306303563529878 0.765047729149385,4.153336482273181 0.753764199358836,4 0.75,3.84666351772682 0.753764199358836,3.693696436470123 0.765047729149384,3.541467267326995 0.783823406360059,3.390342743699599 0.810045998739905,3.2406869378023 0.84365233376705,3.092860383579806 0.884561450836847,2.947219208149312 0.93267479630306,2.804114273859095 0.987876460902229,2.663890333030369 1.050033458989239,2.526885197418757 1.118996048911391,2.393428924396182 1.19459809374915,2.263843021813744 1.276657461554545,2.138439673461146 1.364976464122984,2.017520986988608 1.459342333241446,1.901378266103067 1.559527733265753,1.790291308792039 1.665291308792039,1.684527733265754 1.776378266103067,1.584342333241448 1.892520986988607,1.489976464122984 2.013439673461146,1.401657461554546 2.138843021813743,1.31959809374915 2.268428924396182,1.243996048911391 2.401885197418757,1.17503345898924 2.538890333030367,1.11287646090223 2.679114273859093,1.05767479630306 2.822219208149313,1.009561450836848 2.967860383579805,1 3))"
2
  • OK, to make it short: did I understand correctly that MultiSurface is related in the same way to Curvepolygons as Multipolgons to Polygons or MultiLines to Lines? So then the terminology is somewhat confusing - so MultiSurface is in fact a MultiCurvepolygon?
    – Babel
    Jan 17, 2022 at 10:48
  • 1
    There is actually also Surface but I do not know its relation with CurvePolygon. See github.com/opengeospatial/geopackage/issues/178 and the simple features standards ogc.org/standards/sfs, Part 2.
    – user30184
    Jan 17, 2022 at 11:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.