【问题标题】:How to solve the lack of precision of the coordinates of the centroid points after a buffer?如何解决缓冲后质心点坐标精度不足的问题?
【发布时间】:2021-10-31 18:51:04
【问题描述】:

当通过buffer(此处为正方形)生成多边形时,用于生成的几何点的坐标与在生成后多边形上的.centroid 方法获取的坐标不同。

这是一个只有一点的例子。

from shapely.ops import transform
import geopandas as gpd
import shapely.wkt
import pyproj
from math import sqrt

def edge_size(area): return sqrt(area)*1e3

point = "POINT (4379065.583907348 2872272.254645019)"
point = shapely.wkt.loads(point)

center = gpd.GeoSeries(point)

project = pyproj.Transformer.from_proj(
    pyproj.Proj('epsg:3395'), 
    pyproj.Proj('epsg:4326'),
    always_xy=True) 

center = center.apply(lambda p: transform(project.transform, p))

print(center.iloc[0])

square = point.buffer(
    edge_size(3), cap_style=3) #distance of 3km2

square = gpd.GeoSeries(square)
square = square.apply(lambda p: transform(project.transform, p))
square = square.apply(lambda p: p.centroid)

print(square.iloc[0])

#POINT (39.33781544185747 25.11929860805248)
#POINT (39.33781544185747 25.11929777802279)

这会导致之后的处理错误。
首先,这正常吗?以及如何解决这个问题?

我还报告了我的问题here。感谢您的关注。

【问题讨论】:

    标签: geopandas shapely pyproj fiona


    【解决方案1】:

    从 GitHub 复制我的答案以供后代使用。

    这不是bug,而是对坐标变换的误解。您必须记住,一个投影中的正方形在另一个投影中不是正方形。

    如果您坚持使用相同的 CRS,则缓冲区质心的输出等于初始点。但是重新投影的多边形的质心稍微偏离了一点,特别是因为您进行了重新投影,使几何图形向一个方向倾斜。

    如何解决这个问题?

    在一个 CRS 中完成所有操作,完成后重新投影。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      • 2019-07-09
      • 2023-03-23
      相关资源
      最近更新 更多