我有一个熊猫数据框,其中包含一个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)
它将多边形显示在与预期位置不同的位置。
和Google结果:
是由于投影类型的差异造成的问题吗?
编辑:我注意到问题是即使POLYGON对象似乎具有经/纬度坐标,在绘图过程中它也会翻转为经/纬度。所以解决方法是制作一个像这样的函数
def flip_xy(geo):
return transform(lambda x, y: (y,x), geo)
并将其应用于几何列。但是问题是,intersects()
之类的Shape函数是否假定经/纬度的顺序正确?