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

问题描述

我有一个熊猫数据框,其中包含一个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函数是否假定经/纬度的顺序正确?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)