土地ポリゴンをShapelyMultiPolygon
と指定すると、たとえば、海岸線の周りに12海里のバッファ。Pythonでの測地線のバッファリング
ユークリッド計算を使用しているため、Shapely buffer
メソッドを使用すると機能しません。
Pythonで測地線バッファを計算する方法を教えてもらえますか?
土地ポリゴンをShapelyMultiPolygon
と指定すると、たとえば、海岸線の周りに12海里のバッファ。Pythonでの測地線のバッファリング
ユークリッド計算を使用しているため、Shapely buffer
メソッドを使用すると機能しません。
Pythonで測地線バッファを計算する方法を教えてもらえますか?
これは、ライブラリが平面計算用であることを明示的にドキュメントに明示しているので、滑らかな問題ではありません。それにもかかわらず、あなたの質問に答えるには、マルチポリゴンに使用している座標系を指定する必要があります。 WGS84投影(lat、lon)を使用していると仮定すると、これは別のSO質問(fix-up-shapely-polygon-object-when-discontinuous-after-map-projection)で見つけたレシピです。ライブラリpyproj
が必要です。
import pyproj
from shapely.geometry import MultiPolygon, Polygon
from shapely.ops import transform as sh_transform
from functools import partial
wgs84_globe = pyproj.Proj(proj='latlong', ellps='WGS84')
def pol_buff_on_globe(pol, radius):
_lon, _lat = pol.centroid.coords[0]
aeqd = pyproj.Proj(proj='aeqd', ellps='WGS84', datum='WGS84',
lat_0=_lat, lon_0=_lon)
project_pol = sh_transform(partial(pyproj.transform, wgs84_globe, aeqd), pol)
return sh_transform(partial(pyproj.transform, aeqd, wgs84_globe),
project_pol.buffer(radius))
def multipol_buff_on_globe(multipol, radius):
return MultiPolygon([pol_buff_on_globe(g, radius) for g in multipol])
pol_buff_on_globe
機能は次のとおりです。まず、ポリゴン重心を中心とした方位角の等距離投影を作成します。次に、ポリゴンの座標系をその投影に変更します。その後、そこにバッファを作成し、バッファされたポリゴンの座標系をWGS84座標系に変更します。
いくつかの特別な注意が必要です:
私はこの問題をgis.SEで動かす/尋ねることをお勧めします。 –
@MikeT質問をgis.SEに移動しても問題ありません。先に進んでください。ありがとう。 – ARF
SOの管理者が他のクエリで過負荷になっているので、自分でこの質問をコピー/ペースト/削除する方が早いかもしれません。 –