相关疑难解决方法(0)

在地图投影后不连续时修复匀称的多边形对象

这个演示程序(打算在IPython的笔记本电脑上运行,你需要matplotlibmpl_toolkits.basemappyproj,和shapely)应该绘制地球表面上越来越大的圆圈。只要圆圈不越过其中一个极点,它就可以正常工作。如果发生这种情况,在地图上绘制时结果完全是无稽之谈(见下面的单元格 2)

如果我将它们绘制在“空白”而不是地图上(见下面的单元格 3),结果是正确的,因为如果你删除了从 +180 到 -180 经度的水平线,曲线的其余部分将确实划定了所需圆的内部和外部之间的边界。然而,他们的错误在于多边形是无效的(.is_valid是假的),更重要的是,多边形的非零缠绕数内部没有包围地图的正确区域。

我相信这是因为shapely.ops.transform对 +180==-180 经度的坐标奇点视而不见。该问题是,我怎么发现问题和维修的多边形,所以它的封装做地图的正确的区域?在这种情况下,适当的修正是将 (X,+180) -- (X,-180) 的水平线段替换为三行, (X,+180) -- (+90,+180) -- (+90,-180) -- (X,-180); 但要注意的是,如果圈走了在磁极,该修正线需要,而不是去南方。如果这个圆圈已经超过了两者极点,我们将再次有一个有效的多边形,但它的内部将是它应该是什么的补充。我需要检测所有这些情况并正确处理它们。另外,我不知道如何“编辑”匀称的几何对象。

可下载的笔记本:https : //gist.github.com/zackw/e48cb1580ff37acfee4d0a7b1d43a037

## cell 1
%matplotlib inline

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

import pyproj
from shapely.geometry import Point, Polygon, MultiPolygon
from shapely.ops import transform as sh_transform …
Run Code Online (Sandbox Code Playgroud)

python maps geospatial shapely

4
推荐指数
1
解决办法
1627
查看次数

标签 统计

geospatial ×1

maps ×1

python ×1

shapely ×1