| 1234567891011121314151617181920212223242526272829303132333435 |
- from django.contrib.gis import memoryview
- from django.contrib.gis.geos.geometry import GEOSGeometry, wkt_regex, hex_regex
- from django.utils import six
- def fromfile(file_h):
- """
- Given a string file name, returns a GEOSGeometry. The file may contain WKB,
- WKT, or HEX.
- """
- # If given a file name, get a real handle.
- if isinstance(file_h, six.string_types):
- with open(file_h, 'rb') as file_h:
- buf = file_h.read()
- else:
- buf = file_h.read()
- # If we get WKB need to wrap in memoryview(), so run through regexes.
- if isinstance(buf, bytes):
- try:
- decoded = buf.decode()
- if wkt_regex.match(decoded) or hex_regex.match(decoded):
- return GEOSGeometry(decoded)
- except UnicodeDecodeError:
- pass
- else:
- return GEOSGeometry(buf)
- return GEOSGeometry(memoryview(buf))
- def fromstr(string, **kwargs):
- "Given a string value, returns a GEOSGeometry object."
- return GEOSGeometry(string, **kwargs)
|