<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Aptos;}
/* Style Definitions */
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
{mso-style-priority:99;
mso-style-link:"Plain Text Char";
margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ligatures:standardcontextual;}
span.PlainTextChar
{mso-style-name:"Plain Text Char";
mso-style-priority:99;
mso-style-link:"Plain Text";
font-family:"Calibri",sans-serif;}
.MsoChpDefault
{mso-style-type:export-only;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 129.75pt 1.0in 129.7pt;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#467886" vlink="#96607D" style='word-wrap:break-word'><div class=WordSection1><p class=MsoPlainText>Your smaller polygon is not within the larger one. If it was then this would return true<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>SELECT ST_Intersects(ST_GeomFromText('POLYGON((-77.933927810506 48.584377886263184,-77.74471476703403 48.69534746901027,-77.69284285304693 48.71525447165988,-77.99039086603969 48.53485501013662,-77.933927810506 48.584377886263184))', 4326)::geography, ST_GeomFromText('POLYGON((-81.1755551313531 46.64525933571578,-81.50518756520556 47.21802525065504,-81.6706742747649 47.82323694299835,-81.6602226284047 48.438637358868554,-81.46784223247613 49.04081439308046,-81.09452004412593 49.60598066574395,-80.54928811996326 50.110912115887594,-79.84994871352842 50.53403375725974,-79.02318022750863 50.85659915226637,-78.10377843647761 51.06386274945413,-77.13291403765557 51.14610652092342,-76.15549659681517 51.09937193283258,-75.21696581007667 50.925776760111056,-74.42324583717638 50.655006343959805,-81.12758032107652 46.593233077736336,-81.1755551313531 46.64525933571578))',4326)::geography);<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>And it returns false. Your ST_Within compare in planar space is invalid as it's treating the surfaces as planar.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>If you segmentize your geographies you will see the smaller is not within the larger.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Here is what you get segmentizing in spheroidal space<o:p></o:p></p><p class=MsoPlainText>SELECT ST_Segmentize(ST_GeomFromText('POLYGON((-77.933927810506 48.584377886263184,-77.74471476703403 48.69534746901027,-77.69284285304693 48.71525447165988,-77.99039086603969 48.53485501013662,-77.933927810506 48.584377886263184))', 4326)::geography, 1000)<o:p></o:p></p><p class=MsoPlainText>UNION ALL<o:p></o:p></p><p class=MsoPlainText>SELECT ST_Segmentize(ST_GeomFromText('POLYGON((-81.1755551313531 46.64525933571578,-81.50518756520556 47.21802525065504,-81.6706742747649 47.82323694299835,-81.6602226284047 48.438637358868554,-81.46784223247613 49.04081439308046,-81.09452004412593 49.60598066574395,-80.54928811996326 50.110912115887594,-79.84994871352842 50.53403375725974,-79.02318022750863 50.85659915226637,-78.10377843647761 51.06386274945413,-77.13291403765557 51.14610652092342,-76.15549659681517 51.09937193283258,-75.21696581007667 50.925776760111056,-74.42324583717638 50.655006343959805,-81.12758032107652 46.593233077736336,-81.1755551313531 46.64525933571578))',4326)::geography, 1000);<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><img width=394 height=338 style='width:4.1041in;height:3.5208in' id="_x0000_i1026" src="cid:image001.png@01DC218A.71C67FF0"><o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Here is your planar:<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>SELECT ST_GeomFromText('POLYGON((-77.933927810506 48.584377886263184,-77.74471476703403 48.69534746901027,-77.69284285304693 48.71525447165988,-77.99039086603969 48.53485501013662,-77.933927810506 48.584377886263184))', 4326)::geography<o:p></o:p></p><p class=MsoPlainText>UNION ALL<o:p></o:p></p><p class=MsoPlainText>SELECT ST_GeomFromText('POLYGON((-81.1755551313531 46.64525933571578,-81.50518756520556 47.21802525065504,-81.6706742747649 47.82323694299835,-81.6602226284047 48.438637358868554,-81.46784223247613 49.04081439308046,-81.09452004412593 49.60598066574395,-80.54928811996326 50.110912115887594,-79.84994871352842 50.53403375725974,-79.02318022750863 50.85659915226637,-78.10377843647761 51.06386274945413,-77.13291403765557 51.14610652092342,-76.15549659681517 51.09937193283258,-75.21696581007667 50.925776760111056,-74.42324583717638 50.655006343959805,-81.12758032107652 46.593233077736336,-81.1755551313531 46.64525933571578))',4326)::geography;<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><img width=431 height=306 style='width:4.4895in;height:3.1875in' id="Picture_x0020_1" src="cid:image002.png@01DC218A.71C67FF0"><o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>> -----Original Message-----</p><p class=MsoPlainText>> From: nikolai.berkoff via postgis-users <postgis-users@lists.osgeo.org></p><p class=MsoPlainText>> Sent: Tuesday, September 9, 2025 7:36 AM</p><p class=MsoPlainText>> To: postgis-users@lists.osgeo.org</p><p class=MsoPlainText>> Subject: Geometry / geography woes</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> Hi,</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> I work for a conservation NGO and we deal with lots of species ranges.</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> We have a complicated full geometry (SRID 4326)</p><p class=MsoPlainText>> <a href="https://www.iucnredlist.org/species/22733619/139214707"><span style='color:windowtext;text-decoration:none'>https://www.iucnredlist.org/species/22733619/139214707</span></a> that we have</p><p class=MsoPlainText>> ST_Subdivided. We notice a large difference between the geographical</p><p class=MsoPlainText>> distance from a point (-77 48) to the full geometry and to nearest subdiveded</p><p class=MsoPlainText>> geometry.</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> Here is a toy example with two polygon geometries, one large and the other</p><p class=MsoPlainText>> small and a point <a href="https://wktmap.com/?771d2fc9"><span style='color:windowtext;text-decoration:none'>https://wktmap.com/?771d2fc9</span></a> . First the geographical</p><p class=MsoPlainText>> distance from the point to the large geometry:</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> SELECT ST_Distance(ST_SetSRID(ST_MakePoint(-77, 48),4326)::geography,</p><p class=MsoPlainText>> ST_GeomFromText('POLYGON((-81.1755551313531 46.64525933571578,-</p><p class=MsoPlainText>> 81.50518756520556 47.21802525065504,-81.6706742747649</p><p class=MsoPlainText>> 47.82323694299835,-81.6602226284047 48.438637358868554,-</p><p class=MsoPlainText>> 81.46784223247613 49.04081439308046,-81.09452004412593</p><p class=MsoPlainText>> 49.60598066574395,-80.54928811996326 50.110912115887594,-</p><p class=MsoPlainText>> 79.84994871352842 50.53403375725974,-79.02318022750863</p><p class=MsoPlainText>> 50.85659915226637,-78.10377843647761 51.06386274945413,-</p><p class=MsoPlainText>> 77.13291403765557 51.14610652092342,-76.15549659681517</p><p class=MsoPlainText>> 51.09937193283258,-75.21696581007667 50.925776760111056,-</p><p class=MsoPlainText>> 74.42324583717638 50.655006343959805,-81.12758032107652</p><p class=MsoPlainText>> 46.593233077736336,-81.1755551313531</p><p class=MsoPlainText>> 46.64525933571578))',4326)::geography);</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> st_distance</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> -----------------</p><p class=MsoPlainText>> 100757.06933552</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> </p><p class=MsoPlainText>> next the geographical distance from the point to the small geometry</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> SELECT ST_Distance(ST_SetSRID(ST_MakePoint(-77, 48),4326)::geography,</p><p class=MsoPlainText>> ST_GeomFromText('POLYGON((-77.933927810506 48.584377886263184,-</p><p class=MsoPlainText>> 77.74471476703403 48.69534746901027,-77.69284285304693</p><p class=MsoPlainText>> 48.71525447165988,-77.99039086603969 48.53485501013662,-</p><p class=MsoPlainText>> 77.933927810506 48.584377886263184))', 4326)::geography);</p><p class=MsoPlainText>> st_distance</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> ----------------</p><p class=MsoPlainText>> 93442.14463111</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> </p><p class=MsoPlainText>> finally, showing the the small geometry is fully within the large geometry</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> SELECT ST_Within(ST_GeomFromText('POLYGON((-77.933927810506</p><p class=MsoPlainText>> 48.584377886263184,-77.74471476703403 48.69534746901027,-</p><p class=MsoPlainText>> 77.69284285304693 48.71525447165988,-77.99039086603969</p><p class=MsoPlainText>> 48.53485501013662,-77.933927810506 48.584377886263184))', 4326),</p><p class=MsoPlainText>> ST_GeomFromText('POLYGON((-81.1755551313531 46.64525933571578,-</p><p class=MsoPlainText>> 81.50518756520556 47.21802525065504,-81.6706742747649</p><p class=MsoPlainText>> 47.82323694299835,-81.6602226284047 48.438637358868554,-</p><p class=MsoPlainText>> 81.46784223247613 49.04081439308046,-81.09452004412593</p><p class=MsoPlainText>> 49.60598066574395,-80.54928811996326 50.110912115887594,-</p><p class=MsoPlainText>> 79.84994871352842 50.53403375725974,-79.02318022750863</p><p class=MsoPlainText>> 50.85659915226637,-78.10377843647761 51.06386274945413,-</p><p class=MsoPlainText>> 77.13291403765557 51.14610652092342,-76.15549659681517</p><p class=MsoPlainText>> 51.09937193283258,-75.21696581007667 50.925776760111056,-</p><p class=MsoPlainText>> 74.42324583717638 50.655006343959805,-81.12758032107652</p><p class=MsoPlainText>> 46.593233077736336,-81.1755551313531 46.64525933571578))',4326));</p><p class=MsoPlainText>> st_within</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> -----------</p><p class=MsoPlainText>> t</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> </p><p class=MsoPlainText>> Why is the geographical distance to the point and the geometry increasing</p><p class=MsoPlainText>> when we are only making the geometry bigger? Surely as the geometry gets</p><p class=MsoPlainText>> bigger it should get nearer to the point?</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> Thank you very much!</p></div></body></html>