座標のポリゴンからのKMの面積


13

私は(python shapely)の座標からのポリゴンを持っています

POLYGON ((24.8085317 46.8512821, 24.7986952 46.8574619, 24.8088238 46.8664741, 24.8155239 46.8576335, 24.8085317 46.8512821))

このポリゴンの面積をkm ^ 2で計算したいと思います。Pythonでこれを行う最良の方法は何でしょうか?


1
あなたは見てもよいstackoverflow.com/questions/23697374/...
SIslam

上記の解決策のいずれかを実装しているときに次のエラーが発生する場合は、lat1とlat2がlat_1とlat_2である必要があるためです。 = crs:(内部Projエラー:proj_create:エラー-21:conic lat_1 = -lat_2)
Ramtin Kermani

回答:


19

@sgillies回答の使用方法はすぐにはわかりませんでしたので、ここではより詳細なバージョンを示します。

import pyproj    
import shapely
import shapely.ops as ops
from shapely.geometry.polygon import Polygon
from functools import partial


geom = Polygon([(0, 0), (0, 10), (10, 10), (10, 0), (0, 0)])
geom_area = ops.transform(
    partial(
        pyproj.transform,
        pyproj.Proj(init='EPSG:4326'),
        pyproj.Proj(
            proj='aea',
            lat1=geom.bounds[1],
            lat2=geom.bounds[3])),
    geom)

# Print the area in m^2
print geom_area.area 

1
結果の値は、geojson.ioで取得した値と正確に同じではありません。どうして?
アストロフアンル

15

座標は経度と緯度のように見えますか?Shapelyのshapely.ops.transform関数を使用して、ポリゴンを投影された等面積座標に変換し、面積を取得します。

python
import pyproj
from functools import partial

geom_aea = transform(
partial(
    pyproj.transform,
    pyproj.Proj(init='EPSG:4326'),
    pyproj.Proj(
        proj='aea',
        lat1=geom.bounds[1],
        lat2=geom.bounds[3])),
geom)

print(geom_aea.area)
# Output in m^2: 1083461.9234313113 

1
おそらくpartial組み込みではないことを示す必要があります。pyprojなど、インポートされ、おそらくインストールする必要があります
kingledion

私はpyproj.Proj(proj='aea', lat1=lat1, lat2=lat2)結果に気づいたCRSError: Invalid projection: +proj=aea +lat1=5.0 +lat2=6.0 +type=crsproj4ドキュメントで暗示さlat{1,2}lat_{1,2}ているように変更すると、修正されました。この回答は正確ですか、または更新する必要がありますか?pyproj.Proj(proj='aea', lat1=lat1, lat2=lat2)
ハーバート

1
lat_1andのlat_2代わりにlat1and を使用する必要がありましたlat2。これはPROJ 6.0.0以降に適用されると思われます
oortCloud

2

上記の答えは正しいようですが、最近のある時点で、pyprojコードのlat1およびlat2パラメータの名前がアンダースコア:lat_1およびlat_2に変更されました(/programming//a/55259718/1538758を参照)。コメントするのに十分な担当者がいないため、新しい回答を作成しています(申し訳ありませんが申し訳ありません)

import pyproj    
import shapely
import shapely.ops as ops
from shapely.geometry.polygon import Polygon
from functools import partial


geom = Polygon([(0, 0), (0, 10), (10, 10), (10, 0), (0, 0)])
geom_area = ops.transform(
    partial(
        pyproj.transform,
        pyproj.Proj(init='EPSG:4326'),
        pyproj.Proj(
            proj='aea',
            lat_1=geom.bounds[1],
            lat_2=geom.bounds[3])),
    geom)

# Print the area in m^2
print geom_area.area 

1

私は使いやすいと思われる「エリア」に出くわしました:

https://pypi.org/project/area/

例えば:

from area import area

obj = {'type':'Polygon','coordinates':[[[24.8085317,46.8512821], [24.7986952,46.8574619], [24.8088238,46.8664741], [24.8155239,46.8576335], [24.8085317,46.8512821]]]}

area_m2 = area(obj)

area_km2 = area_m2 / 1e+6
print ('area m2:' + str(area_m2))
print ('area km2:' + str(area_km2))

... 戻り値:

面積m2:1082979.880942425

面積km2:1.082979880942425

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.