forked from s_ranjbar/city_retrofit
56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
"""Load/dump geometries using the well-known binary (WKB) format
|
|
"""
|
|
|
|
from shapely.geos import WKBReader, WKBWriter, lgeos
|
|
from shapely.geometry.base import geom_factory
|
|
|
|
# Pickle-like convenience functions
|
|
|
|
def loads(data, hex=False):
|
|
"""Load a geometry from a WKB byte string, or hex-encoded string if
|
|
``hex=True``.
|
|
"""
|
|
reader = WKBReader(lgeos)
|
|
if hex:
|
|
return reader.read_hex(data)
|
|
else:
|
|
return reader.read(data)
|
|
|
|
def load(fp, hex=False):
|
|
"""Load a geometry from an open file."""
|
|
data = fp.read()
|
|
return loads(data, hex=hex)
|
|
|
|
def dumps(ob, hex=False, srid=None, **kw):
|
|
"""Dump a WKB representation of a geometry to a byte string, or a
|
|
hex-encoded string if ``hex=True``.
|
|
|
|
Parameters
|
|
----------
|
|
ob : geometry
|
|
The geometry to export to well-known binary (WKB) representation
|
|
hex : bool
|
|
If true, export the WKB as a hexidecimal string. The default is to
|
|
return a binary string/bytes object.
|
|
srid : int
|
|
Spatial reference system ID to include in the output. The default value
|
|
means no SRID is included.
|
|
**kw : kwargs
|
|
See available keyword output settings in ``shapely.geos.WKBWriter``."""
|
|
if srid is not None:
|
|
# clone the object and set the SRID before dumping
|
|
geom = lgeos.GEOSGeom_clone(ob._geom)
|
|
lgeos.GEOSSetSRID(geom, srid)
|
|
ob = geom_factory(geom)
|
|
kw["include_srid"] = True
|
|
writer = WKBWriter(lgeos, **kw)
|
|
if hex:
|
|
return writer.write_hex(ob)
|
|
else:
|
|
return writer.write(ob)
|
|
|
|
|
|
def dump(ob, fp, hex=False, **kw):
|
|
"""Dump a geometry to an open file."""
|
|
fp.write(dumps(ob, hex=hex, **kw))
|