답변:
shapey는 기본적으로 좌표계를 이해하지 않지만와
shapely.ops.transform()
함께 할 수 있습니다 pyproj
. 경우 pyproj.Proj
이해할 수있는 당신의 좌표계의 모두, 다음은 매끈한로 변환 할 수있는 기능으로 할 수있다.
매끈한 문서에서 :
from functools import partial
import pyproj
from shapely.ops import transform
project = partial(
pyproj.transform,
pyproj.Proj(init='epsg:4326'), # source coordinate system
pyproj.Proj(init='epsg:26913')) # destination coordinate system
g2 = transform(project, g1) # apply projection
itertools
모듈을 당신이 할 수있는 project = lambda x, y: pyproj.transform(pyproj.Proj(init='epsg:4326'), pyproj.Proj(init='epsg:26913'), x, y)
다음과 g2 = transform(project, g1)
.
Transformer
합니다. 여기를 참조하십시오 : pyproj4.github.io/pyproj/stable/gotchas.html
Shapely 솔루션은 아니지만 GeoPandas를 사용하면 비교적 간단한 투영이 가능합니다. 예를 들어, shapefile을 ESPG 4326으로 변환하려는 경우 :
import geopandas as gpd
HabModelEnviro = gpd.GeoDataFrame.from_file('data/HabModelEnviro.shp').replace({-999: None})
HabModelEnviroWGS84 = HabModelEnviro.to_crs({'proj':'longlat', 'ellps':'WGS84', 'datum':'WGS84'})
pyproj2를 사용하는 경우 Transformer를 사용하는 것이 훨씬 쉽습니다. 예를 들면 다음과 같습니다.
import pyproj
from shapely.ops import transform
project = pyproj.Transformer.from_proj(
pyproj.Proj(init='epsg:4326'), # source coordinate system
pyproj.Proj(init='epsg:26913')) # destination coordinate system
# g1 is a shapley Polygon
g2 = transform(project.transform, g1) # apply projection
pyproj가 모든 점에 대한 투영을 다시 만들 필요가 없기 때문에 이것은 훨씬 빠릅니다.
fiona.transform
당신이 필요로하는 것으로 보인다.