ST_Centerline takes a polygon column and returns a line column that represents the centerline of each input polygon. The purpose of this function is to create centerlines from hydrographic polygons for use at larger scales.
Function | Syntax |
---|---|
Python | centerline(polygon) |
SQL | ST |
Scala | centerline(polygon) |
For more details, go to the GeoAnalytics for Microsoft Fabric API reference for centerline.
Python and SQL Examples
from geoanalytics_fabric.sql import functions as ST
data = [
("POLYGON ((-115.87996315955866 37.493007249483064, -116.20955300330856 36.792410506881424, -115.7481272220587 36.333552263814276, -116.1216623783086 35.550836720474244, -115.66023659705871 34.97673809803499, -115.59431862830874 33.92587561185498, -115.19881081580886 35.0127383040925, -115.59431862830874 35.56871167950533, -115.3086740970588 36.492696164870054, -115.7481272220587 36.880339665745446, -115.87996315955866 37.493007249483064))", ),
("POLYGON ((-113.8804514408092 37.02081593720533, -113.00154519080942 36.9506101853256, -112.36433815955958 36.86276192128377, -111.66121315955978 36.61624917109116, -110.91414284705998 36.73960450810167, -110.87019753456 36.12085373842121, -111.26570534705989 35.586582651595315, -110.18904519081018 34.2170880405633, -110.80427956580999 35.729406796929375, -110.36482644081012 36.12085373842121, -110.67244362831003 37.10848197802594, -111.6172678470598 36.96816769705664, -112.64998269080951 37.21354742555541, -113.8804514408092 37.02081593720533))", )
]
df = spark.createDataFrame(data, ["wkt"])\
.select(ST.geom_from_text("wkt").alias("geometry"))
df = df.withColumn("centerline",ST.centerline("geometry"))
ax = df.st.plot("geometry", facecolor="none", edgecolor="red")
df.st.plot("centerline", ax=ax, facecolor="none", edgecolor="blue")
Scala Example
Scala
import com.esri.geoanalytics.sql.{functions => ST}
import org.apache.spark.sql.{functions => F}
case class PolygonRow(wkt: String)
val data = Seq(PolygonRow("POLYGON ((-115.87996315955866 37.493007249483064, -116.20955300330856 36.792410506881424, -115.7481272220587 36.333552263814276, -116.1216623783086 35.550836720474244, -115.66023659705871 34.97673809803499, -115.59431862830874 33.92587561185498, -115.19881081580886 35.0127383040925, -115.59431862830874 35.56871167950533, -115.3086740970588 36.492696164870054, -115.7481272220587 36.880339665745446, -115.87996315955866 37.493007249483064))"),
PolygonRow("POLYGON ((-113.8804514408092 37.02081593720533, -113.00154519080942 36.9506101853256, -112.36433815955958 36.86276192128377, -111.66121315955978 36.61624917109116, -110.91414284705998 36.73960450810167, -110.87019753456 36.12085373842121, -111.26570534705989 35.586582651595315, -110.18904519081018 34.2170880405633, -110.80427956580999 35.729406796929375, -110.36482644081012 36.12085373842121, -110.67244362831003 37.10848197802594, -111.6172678470598 36.96816769705664, -112.64998269080951 37.21354742555541, -113.8804514408092 37.02081593720533))"))
val df = spark.createDataFrame(data)
.select(ST.geomFromText($"wkt").alias("geometry"))
.withColumn("centerline", ST.centerline($"geometry"))
.withColumn("centerline_length",F.round(ST.length($"centerline"),3))
df.select("centerline", "centerline_length").show()
Result
+--------------------+-----------------+
| centerline|centerline_length|
+--------------------+-----------------+
|{"paths":[[[-115....| 3.374|
|{"paths":[[[-110....| 5.403|
+--------------------+-----------------+
Version table
Release | Notes |
---|---|
1.0.0-beta | Python, SQL, and Scala functions introduced |