ST_GeohashBin

ST_GeohashBin takes a geometry column and a numeric precision and returns a bin column. The output column contains a single Geohash bin for each record in the input column. Geohash encodes a geographic location into a short string of letters and digits. It is a hierarchical spatial data structure which subdivides space into buckets of grid shape. The specified precision determines the size of each Geohash bin.

When the input is a multipoint, linestring, or polygon geometry, ST_GeohashBin may choose a different bin than the bin chosen by other Geohash implementations.

ST_GeohashBin requires the spatial reference to be set to World Geodetic System 1984 (EPSG:4326). If the input geometry is in a different spatial reference, the function automatically transforms the geometry into World Geodetic System 1984. To learn more about spatial references, see Coordinate systems and transformations.

ST_BinGeometry can be used to obtain the geometry of the result bin. You can also use the function ST_BinId to get the id of the result bin.

This function can also be called with a string column representing the ID of the bin (see ST_BinId). The bin ID will be cast to a bin column.

FunctionSyntax
Pythongeohash_bin(geometry, precision)
SQLST_GeohashBin(geometry, precision)
PythongeohashBin(geometry, precision)

For more details, go to the GeoAnalytics Engine API reference for geohash_bin.

Python and SQL Examples

PythonPythonSQL
Use dark colors for code blocksCopy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from geoanalytics.sql import functions as ST

data = [
    ('POINT (1 1)',),
    ('LINESTRING (0 0, 0 0.4, 0 0.8, 0 1)',),
    ("POLYGON ((0.5 0.5, 0.5 0.8, 0.8 0.8, 0.8 0.5, 0.5 0.5))", )
]

df = spark.createDataFrame(data, ["wkt"])\
          .withColumn("geometry", ST.geom_from_text("wkt", srid=4326))\
          .withColumn("geohash_bin", ST.geohash_bin("geometry", 5)) \
          .withColumn("bin_geometry", ST.bin_geometry("geohash_bin")) \
          .withColumn("bin_id", ST.bin_id("geohash_bin"))
df.select("bin_id").show()

ax = df.st.plot("geometry", facecolor="none", edgecolor="red")
df.st.plot("bin_geometry", ax=ax, facecolor="none", edgecolor="blue")
Result
Use dark colors for code blocksCopy
1
2
3
4
5
6
7
+------+
|bin_id|
+------+
| s00tw|
| s004b|
| s007w|
+------+
Plotting example for ST_GeohashBin
Plotted result for ST_GeohashBin with a geometry column.
PythonPythonSQL
Use dark colors for code blocksCopy
1
2
3
4
5
6
7
8
9
10
from geoanalytics.sql import functions as ST

data = [('s00wq',), ('s004b',), ('s007w',)]
df = spark.createDataFrame(data, ["bin_id"]) \
          .withColumn("geohash_bin", ST.geohash_bin("bin_id", 5)) \
          .withColumn("bin_geometry", ST.bin_geometry("geohash_bin"))

ax = df.st.plot("bin_geometry", facecolor="none", edgecolor="blue")
Plotting example for ST_GeohashBin
Plotted result for ST_GeohashBin with a string column as input.

Scala Examples

Scala
Use dark colors for code blocksCopy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import com.esri.geoanalytics.sql.{functions => ST}
import org.apache.spark.sql.{functions => F}

case class GeometryRow(wkt: String)
val data = Seq(GeometryRow("POINT (1 1)"),
               GeometryRow("LINESTRING (0 0, 0 0.4, 0 0.8, 0 1)"),
               GeometryRow("POLYGON ((0.5 0.5, 0.5 0.8, 0.8 0.8, 0.8 0.5, 0.5 0.5))"))

val df = spark.createDataFrame(data)
              .withColumn("geometry", ST.geomFromText($"wkt", F.lit(4326)))
              .withColumn("geohash_bin", ST.geohashBin($"geometry", F.lit(5)))
              .withColumn("bin_id", ST.binId($"geohash_bin"))

df.select("geohash_bin", "bin_id").show()
Result
Use dark colors for code blocksCopy
1
2
3
4
5
6
7
+------------------+------+
|       geohash_bin|bin_id|
+------------------+------+
|bin#70746701332837| s00tw|
|bin#70368744210613| s004b|
|bin#70609262379237| s007w|
+------------------+------+
Scala
Use dark colors for code blocksCopy
1
2
3
4
5
6
7
8
9
10
11
12
13
import com.esri.geoanalytics.sql.{functions => ST}

case class BinID(binID: String)
val data = Seq(BinID("s00wq"),
               BinID("s004b"),
               BinID("s007w"))

val df = spark.createDataFrame(data)
              .withColumn("geohash_bin", ST.geohashBin($"binID", F.lit(5)))

df.select("geohash_bin").show()
Result
Use dark colors for code blocksCopy
1
2
3
4
5
6
7
+------------------+
|       geohash_bin|
+------------------+
|bin#70746701332885|
|bin#70368744210613|
|bin#70609262379237|
+------------------+

Version table

ReleaseNotes

1.5.0

Python, SQL, and Scala functions introduced

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.