Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Daniel Scheffler
py_tools_ds
Commits
d9c1dc93
Commit
d9c1dc93
authored
Sep 13, 2017
by
Daniel Scheffler
Browse files
Merge branch 'enhancement/add_auto_setter_GDAL_DATA' into bugfix/fix_get_overlap_polygon
parents
ad3f4d04
27a6cc05
Pipeline
#1140
passed with stages
in 5 minutes and 31 seconds
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
py_tools_ds/environment/__init__.py
0 → 100644
View file @
d9c1dc93
py_tools_ds/environment/gdal_env.py
0 → 100644
View file @
d9c1dc93
# -*- coding: utf-8 -*-
import
os
import
sys
import
re
__author__
=
"Daniel Scheffler"
def
find_epsgfile
():
"""Locate the proj.4 epsg file (defaults to '/usr/local/share/proj/epsg')."""
try
:
epsgfile
=
os
.
environ
[
'GDAL_DATA'
].
replace
(
'/gdal'
,
'/proj/epsg'
)
assert
os
.
path
.
exists
(
epsgfile
)
except
(
KeyError
,
AssertionError
):
try
:
from
pyproj
import
__file__
as
pyprojpath
epsgfile
=
os
.
path
.
join
(
os
.
path
.
dirname
(
pyprojpath
),
'data/epsg'
)
assert
os
.
path
.
exists
(
epsgfile
)
except
(
ImportError
,
AssertionError
):
epsgfile
=
'/usr/local/share/proj/epsg'
if
not
os
.
path
.
exists
(
epsgfile
):
raise
RuntimeError
(
'Could not locate epsg file for converting WKT to EPSG code. '
'Please make sure that your GDAL_DATA environment variable is properly set and the '
'pyproj library is installed.'
)
return
epsgfile
def
try2set_GDAL_DATA
():
"""Try to set the 'GDAL_DATA' environment variable in case it is unset or invalid."""
if
'GDAL_DATA'
not
in
os
.
environ
or
not
os
.
path
.
isdir
(
os
.
environ
[
'GDAL_DATA'
]):
is_anaconda
=
'conda'
in
sys
.
version
or
'Continuum'
in
sys
.
version
or
\
re
.
search
(
'conda'
,
sys
.
executable
,
re
.
I
)
if
is_anaconda
:
if
sys
.
platform
in
[
'linux'
,
'linux2'
]:
GDAL_DATA
=
os
.
path
.
join
(
os
.
path
.
dirname
(
sys
.
executable
),
".."
,
"share"
,
"gdal"
)
else
:
GDAL_DATA
=
os
.
path
.
join
(
os
.
path
.
dirname
(
sys
.
executable
),
"Library"
,
"share"
,
"gdal"
)
else
:
GDAL_DATA
=
os
.
path
.
join
(
"usr"
,
"local"
,
"share"
,
"gdal"
)
if
sys
.
platform
in
[
'linux'
,
'linux2'
]
else
''
if
os
.
path
.
isdir
(
GDAL_DATA
):
os
.
environ
[
'GDAL_DATA'
]
=
GDAL_DATA
py_tools_ds/geo/projection.py
View file @
d9c1dc93
# -*- coding: utf-8 -*-
__author__
=
"Daniel Scheffler"
import
re
import
os
import
pyproj
from
typing
import
Union
...
...
@@ -20,6 +18,13 @@ except ImportError:
import
gdalnumeric
from
gdalconst
import
*
from
..environment
import
gdal_env
__author__
=
"Daniel Scheffler"
# try to set GDAL_DATA if unnot set or invalid
gdal_env
.
try2set_GDAL_DATA
()
def
get_proj4info
(
ds
=
None
,
proj
=
None
):
# type: (gdal.Dataset,str) -> str
...
...
@@ -106,7 +111,12 @@ def EPSG2Proj4(EPSG_code):
if
EPSG_code
is
not
None
:
srs
=
osr
.
SpatialReference
()
srs
.
ImportFromEPSG
(
EPSG_code
)
return
srs
.
ExportToProj4
()
proj4
=
srs
.
ExportToProj4
()
if
not
proj4
:
raise
EnvironmentError
(
gdal
.
GetLastErrorMsg
())
return
proj4
else
:
return
''
...
...
@@ -114,15 +124,10 @@ def EPSG2Proj4(EPSG_code):
def
EPSG2WKT
(
EPSG_code
):
# type: (int) -> str
if
EPSG_code
is
not
None
:
# GDAL_DATA_tmp = None
# if 'GDAL_DATA' in os.environ:
# GDAL_DATA_tmp = os.environ['GDAL_DATA']
# del os.environ['GDAL_DATA']
srs
=
osr
.
SpatialReference
()
srs
.
ImportFromEPSG
(
EPSG_code
)
wkt
=
srs
.
ExportToWkt
()
# if GDAL_DATA_tmp:
# os.environ['GDAL_DATA'] = GDAL_DATA_tmp
if
not
wkt
:
raise
EnvironmentError
(
gdal
.
GetLastErrorMsg
())
...
...
@@ -131,25 +136,6 @@ def EPSG2WKT(EPSG_code):
return
''
def
_find_epsgfile
():
"""Locate the proj.4 epsg file (defaults to '/usr/local/share/proj/epsg')."""
try
:
epsgfile
=
os
.
environ
[
'GDAL_DATA'
].
replace
(
'/gdal'
,
'/proj/epsg'
)
assert
os
.
path
.
exists
(
epsgfile
)
except
(
KeyError
,
AssertionError
):
try
:
from
pyproj
import
__file__
as
pyprojpath
epsgfile
=
os
.
path
.
join
(
os
.
path
.
dirname
(
pyprojpath
),
'data/epsg'
)
assert
os
.
path
.
exists
(
epsgfile
)
except
(
ImportError
,
AssertionError
):
epsgfile
=
'/usr/local/share/proj/epsg'
if
not
os
.
path
.
exists
(
epsgfile
):
raise
RuntimeError
(
'Could not locate epsg file for converting WKT to EPSG code. '
'Please make sure that your GDAL_DATA environment variable is properly set and the '
'pyproj library is installed.'
)
return
epsgfile
def
WKT2EPSG
(
wkt
,
epsgfile
=
''
):
# type: (str) -> Union[int, None]
""" Transform a WKT string to an EPSG code
...
...
@@ -184,7 +170,7 @@ def WKT2EPSG(wkt, epsgfile=''):
if
ac
is
None
:
# try brute force approach by grokking proj epsg definition file
p_out
=
p_in
.
ExportToProj4
()
if
p_out
:
epsgfile
=
epsgfile
or
_
find_epsgfile
()
epsgfile
=
epsgfile
or
gdal_env
.
find_epsgfile
()
with
open
(
epsgfile
)
as
f
:
for
line
in
f
:
if
line
.
find
(
p_out
)
!=
-
1
:
...
...
@@ -216,4 +202,9 @@ def get_prjLonLat(fmt='wkt'):
assert
re
.
search
(
'wkt'
,
fmt
,
re
.
I
)
or
re
.
search
(
'Proj4'
,
fmt
,
re
.
I
),
'unsupported output format'
srs
=
osr
.
SpatialReference
()
srs
.
ImportFromEPSG
(
4326
)
return
srs
.
ExportToWkt
()
if
re
.
search
(
'wkt'
,
fmt
,
re
.
I
)
else
srs
.
ExportToProj4
()
out
=
srs
.
ExportToWkt
()
if
re
.
search
(
'wkt'
,
fmt
,
re
.
I
)
else
srs
.
ExportToProj4
()
if
not
out
:
raise
EnvironmentError
(
gdal
.
GetLastErrorMsg
())
return
out
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment