ST_PointOnSurface nasıl hesaplanır?


21

PostGIS belgelerinde ST_PointOnSurface"yüzeyde yatma garantisi verilen bir POINT" döndürülür. PostGIS'in önemsiz olmayan bir uygulama sağladığından emin olmakla birlikte, dokümantasyonu sağlayan ancak gerçek dünyaya pek az yarar sağlayan sonuçlar vermek için bu işlev önemsiz bir şekilde uygulanabilir gibi görünüyor.

PostGIS Bu tanıtım güzel bir karşılaştırma ve kontrastını sağlar ST_Centroidile ST_PointOnSurfaceve "[ST_PointOnSurface] esasen sayısal olarak daha pahalı ağırlık merkezi işleminden daha açık olduğunu" söyledi.

Nasıl ST_PointOnSurfacehesaplandığına dair daha ayrıntılı bir açıklama var mı ? Kullanıyorum ST_Centroid, ancak verilerimin merkezinde sentroidin geometrinin dışında olduğu bazı kenar durumlarıyla karşılaştım. Bunun ST_PointOnSurfacedoğru ikame olduğuna inanıyorum , ancak işlev adı ve belgelendirme belirsizliğe yer bırakıyor.

Dahası, ST_PointOnSurfacemerkezde zaten geometri içinde yer alsa bile hesaplamanın masrafı ortaya çıkıyor mu?


Kesin olarak, dışbükey olmayan çokgenlerin centroidinin içerisine her zaman dahil edilmediğinden var olur. Adın kafa karıştırıcı kısmıysa, yükseklik ve DEM'lerle ilgisi yoktur. Uygulama detayları kodda en iyi şekilde kontrol edilir, ancak GIS.se’de daha iyi bir cevap alacağınıza inanıyorum.
lynxlynxlynx 4:13

GIS.se'de iyi nokta. Bu soruyu oraya taşımanın bir yolu var mı? İki fonksiyonun da neden var olduğunu anlıyorum. İsmimi karıştırıcı buluyorum çünkü birlikte çalıştığım poligon mezarlıklarının yüzeyinde sonsuz sayıda nokta var. Bununla birlikte, bu noktaların sadece küçük bir alt grubu hedefime hizmet ediyor. Nasıl kullanmak istediğime dair mantıklı bir noktaya sahip olduğumu bilmek istiyorum.

Yanıtlar:


24

Birkaç deneye dayanarak ST_PointOnSurface(), geometri çokgen ise kabaca bu şekilde çalıştığını düşünüyorum :

  1. Çokgen kuzey ve güney uzantıları arasında yarı yolda yatan bir doğu-batı ışın izini.
  2. Çokgenin kesişen ışınının en uzun bölümünü bulun.
  3. Sözü geçen bölüm boyunca yarım kalan noktayı döndürün.

Bu mantıklı gelmeyebilir, işte kuzey ve güney kısımlara ayıran bir ışın ile çokgen bir kroki:

             _
            / \             <-- northern extent
           /   \
          /     \
         /       \
        /         \      __
       /           \    /  \
      /_ _ _ P _ _ _\  / _ _\  P = point-on-surface
     /               \/      \
    /                         \
   /            C              \   C = centroid
  /                             \
 /                              /
/______________________________/  <-- southern extent

Böylece, ST_PointOnSurface()ve ST_Centroid()genellikle dışbükey çokgenlerde bile farklı noktalardır.

Adındaki "yüzey" in tek nedeni, eğer geometrinin 3B çizgileri varsa, sonucun sadece tepe noktalarından biri olacağıdır.

Daha fazla açıklamanın (ve daha iyi bir isimlendirmenin) faydalı olacağı ve bir GEOS programcısının konuyla ilgili daha fazla ışık tutacağı umuduyla katılıyorum.


3
Libgeos koduna baktığımda , haklı olduğuna inanıyorum. Yatay ayırıcı bulunur, ardından en geniş kavşağın orta noktası kullanılır.
mjobrien
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.