Created
May 12, 2014 22:13
-
-
Save drmalex07/5a54fc4f1db06a66679e to your computer and use it in GitHub Desktop.
Convert GeoJSON to/from WKT in Python. #python #geojson #geometry
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import json | |
import geojson | |
from shapely.geometry import shape | |
o = { | |
"coordinates": [[[23.314208, 37.768469], [24.039306, 37.768469], [24.039306, 38.214372], [23.314208, 38.214372], [23.314208, 37.768469]]], | |
"type": "Polygon" | |
} | |
s = json.dumps(o) | |
# Convert to geojson.geometry.Polygon | |
g1 = geojson.loads(s) | |
# Feed to shape() to convert to shapely.geometry.polygon.Polygon | |
# This will invoke its __geo_interface__ (https://gist.github.com/sgillies/2217756) | |
g2 = shape(g1) | |
# Now it's very easy to get a WKT/WKB representation | |
g2.wkt | |
g2.wkb | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import geojson | |
import shapely.wkt | |
s = '''POLYGON ((23.314208 37.768469, 24.039306 37.768469, 24.039306 38.214372, 23.314208 38.214372, 23.314208 37.768469))''' | |
# Convert to a shapely.geometry.polygon.Polygon object | |
g1 = shapely.wkt.loads(s) | |
g2 = geojson.Feature(geometry=g1, properties={}) | |
g2.geometry |
Is there a way to read in CURVEPOLYGON
as well? Some of my strings start with CURVEPOLYGON(COMPOUNDCURVE((
instead of POLYGON ((
. I get the error ParseException: Unknown type: 'CURVEPOLYGON' from wkt.loads
. I see it can be done using GDAL, but installation of that package is a pain.
@anottrott Instead of using ast.literal_eval(geojson_string)
, better use json.loads(geojson_string)
when converting a JSON string to a Python dictionary.
import json
from shapely.wkt import loads
from shapely.geometry import mapping
import geojson
wkt_string = "POLYGON ((23.314208 37.768469, 24.039306 37.768469, 24.039306 38.214372, 23.314208 38.214372, 23.314208 37.768469))"
geojson_string = geojson.dumps(mapping(loads(wkt_string)))
geojson_dict = json.loads(geojson_string)
print(geojson_dict)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Helpful, thank you. This can be further simplified to one line. Also note that you will have a geojson string, which can then be reinterpreted to a python dictionary
from shapely.wkt import loads
from shapely.geometry import mapping
import geojson
import ast
wkt_string = '''POLYGON ((23.314208 37.768469, 24.039306 37.768469, 24.039306 38.214372, 23.314208 38.214372, 23.314208 37.768469))'''
geojson_string = geojson.dumps(mapping(loads(wkt_string)))
geojson_dict = ast.literal_eval(geojson_string)