Shapelyオブジェクト(つまり、PolygonとMultiPolygon)をある投影から別の投影に変換する簡単な方法はありますか?
実際、この時点でそれらがShapelyオブジェクトであるかどうかは気にしません。フィーチャと投影を渡し、再投影されたフィーチャセットを取得するだけです。
この種の機能は存在しますか、それとも手作業でコーディングする必要がありますか?
Shapelyオブジェクト(つまり、PolygonとMultiPolygon)をある投影から別の投影に変換する簡単な方法はありますか?
実際、この時点でそれらがShapelyオブジェクトであるかどうかは気にしません。フィーチャと投影を渡し、再投影されたフィーチャセットを取得するだけです。
この種の機能は存在しますか、それとも手作業でコーディングする必要がありますか?
回答:
shapelyは座標系をネイティブに理解しません
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を使用すると、比較的簡単に投影できます。たとえば、シェープファイルを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
必要なものがあるように見えます。