mplleaflet在与预期位置不同的位置绘制有形多边形

时间:2020-09-19 07:31:13

标签: python polygon shapely

我有一个熊猫数据框,其中包含一个Shapely几何对象。形状对象(圆形)是根据以下SO Find the intersection between two geographical data points计算的,其中我输入了lat,long和radius。

import pandas as pd
from shapely.geometry import Point
from shapely.ops import transform
import pyproj
from functools import partial

WGS84 = pyproj.Proj('epsg:4326')

def latlonbuffer(lat, lon, radius_m):
    proj4str = '+proj=aeqd +lat_0=%s +lon_0=%s +x_0=0 +y_0=0' % (lat, lon)
    AEQD = pyproj.Proj(proj4str) # azimuthal equidistant
    project = partial(pyproj.transform, AEQD, WGS84)
    return transform(project, Point(0, 0).buffer(radius_m))

在演示中,我使用了Shapely的质心函数将centroid列包括在内。

geometry, centroid
POLYGON((26.48306 50.09625, 26.47916 50.09604..), ((26.48307336330026, 50.052005610561245))

但是当我将此表转换为geopandas并将其绘制在mplleaflet上

import geopandas as gpd
import mplleaflet
import matplotlib.pyplot as plt

df_gpd = gpd.GeoDataFrame(df)
ax = df_gpd.plot(figsize=(20,20), color='r')

mplleaflet.display(fig=ax.figure)

它将多边形显示在与预期位置不同的位置。

下面是mplleaflet结果: mplleaflet result

和Google结果:

enter image description here

是由于投影类型的差异造成的问题吗?

编辑:我注意到问题是即使POLYGON对象似乎具有经/纬度坐标,在绘图过程中它也会翻转为经/纬度。所以解决方法是制作一个像这样的函数

def flip_xy(geo):
    return transform(lambda x, y: (y,x), geo)

并将其应用于几何列。但是问题是,intersects()之类的Shape函数是否假定经/纬度的顺序正确?

0 个答案:

没有答案