【发布时间】:2018-07-27 09:11:17
【问题描述】:
我有 GeoJSON
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Polygon",
"coordinates": [
[[13.65374516425911, 52.38533382814119], [13.65239769133293, 52.38675829106993], [13.64970274383571, 52.38675829106993], [13.64835527090953, 52.38533382814119], [13.64970274383571, 52.38390931824483], [13.65239769133293, 52.38390931824483], [13.65374516425911, 52.38533382814119]]
]
}
}
]
}
我想用 Python 计算它的面积(87106.33m^2)。我该怎么做?
我尝试了什么
# core modules
from functools import partial
# 3rd pary modules
from shapely.geometry import Polygon
from shapely.ops import transform
import pyproj
l = [[13.65374516425911, 52.38533382814119, 0.0], [13.65239769133293, 52.38675829106993, 0.0], [13.64970274383571, 52.38675829106993, 0.0], [13.64835527090953, 52.38533382814119, 0.0], [13.64970274383571, 52.38390931824483, 0.0], [13.65239769133293, 52.38390931824483, 0.0], [13.65374516425911, 52.38533382814119, 0.0]]
polygon = Polygon(l)
print(polygon.area)
proj = partial(pyproj.transform, pyproj.Proj(init='epsg:4326'),
pyproj.Proj(init='epsg:3857'))
print(transform(proj, polygon).area)
它给出了1.1516745933889345e-05 和233827.03300877335 - 第一个没有任何意义是意料之中的,但是我该如何修复第二个呢? (我不知道如何设置pyproj.Proj init 参数)
我猜epsg:4326 是 WGS84 (source) 是有道理的,但对于 epsg:3857 我不确定。
更好的结果
以下更接近:
# core modules
from functools import partial
# 3rd pary modules
import pyproj
from shapely.geometry import Polygon
import shapely.ops as ops
l = [[13.65374516425911, 52.38533382814119, 0],
[13.65239769133293, 52.38675829106993, 0],
[13.64970274383571, 52.38675829106993, 0],
[13.64835527090953, 52.38533382814119, 0],
[13.64970274383571, 52.38390931824483, 0],
[13.65239769133293, 52.38390931824483, 0],
[13.65374516425911, 52.38533382814119, 0]]
polygon = Polygon(l)
print(polygon.area)
geom_area = ops.transform(
partial(
pyproj.transform,
pyproj.Proj(init='EPSG:4326'),
pyproj.Proj(
proj='aea',
lat1=polygon.bounds[1],
lat2=polygon.bounds[3])),
polygon)
print(geom_area.area)
它给出了 87254.7m^2 - 这与 geojson.io 所说的仍然有 148m^2 不同。为什么会这样?
【问题讨论】:
-
因为 Web Mercator 不保留区域:geography.hunter.cuny.edu/~jochen/GTECH361/lectures/lecture04/…。欢迎来到地图投影。您的问题对Geographic Information Systems 更好(您的代码 没有任何问题,只是您选择的投影。)并且最好具体说明该区域的错误值。而here 是实际 3857 投影的链接;你链接的那个是别的东西。
-
对于尝试我们附加的python代码并收到错误的任何人,它应该是
lat_1和lat_2而不是lat1和lat2