导入两个几何列时开普勒地图不起作用

Kepler maps do not work when importing two geometry columns

我可以扩展这个问题来展示一个工作示例,但我认为这是一个错误,而不是编码错误。

我有两个使用 sjoin 连接的独立数据源。 returns 来自 df1 的点位于 df2.

中概述的多边形内

我想使用 Kepler 导入合并数据集并显示点 多边形。

如果我不区分几何列,多边形坐标会在合并后被删除。另一方面,如果我在合并之前从 df2 重命名几何列,它 returns 类型错误。

作为参考,我使用 Kepler (没有 df1) 绘制了 df2 的多边形,它工作正常。

选项 1(删除多边形坐标):

df1 = gpd.read_file('data1.shp')
df2 = gpd.read_file('data2.shp')

df1 = df1(epsg = 4326)
df2 = df1(epsg = 4326)

merge = gpd.sjoin(df1, df2, predicate = 'within', how = 'inner')

map1 = KeplerGl(height = 600)
map1.add_data(merge)
map1

输出:df2 中的几何列丢失。所以不能绘制多边形

选项 2(类型错误):

df1 = gpd.read_file('data1.shp')
df2 = gpd.read_file('data2.shp')

df1 = df1(epsg = 4326)
df2 = df1(epsg = 4326)

df2['geomsaved'] = df2.geometry


merge = gpd.sjoin(df1, df2, predicate = 'within', how = 'inner')

map1 = KeplerGl(height = 600)
map1.add_data(merge)
map1
  • 我正在寻找 kepplergl 一个难以使用的库...
  • 您的错误是预料之中的,不是错误。具体来说 geopandas 只支持一个 geometry column
  • 这是什么意思? kepplergl 将使用 __geo_interface__GeoDataFrame 生成 geojson 然后序列化为要传递给 JavaScript 代码 kepplergl 的字符串。这失败了,因为第二列是未转换为 geojson 的复杂对象的 Series。我在下面复制了这个,在简单的 MWE
  • 中出现了同样的错误
  • 如何管理这个?
    1. kepplergl 中创建两个图层,一个是多边形,另一个是点
    2. 将几何连接到长 GeoDataFrame 并创建一层
import pandas as pd
import geopandas as gpd
import json

world = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")).sample(10)
cities = gpd.read_file(gpd.datasets.get_path("naturalearth_cities"))

# does not fail
json.dumps(cities.sjoin(world).__geo_interface__)
# fails: TypeError: Object of type Polygon is not JSON serializable
json.dumps(cities.sjoin(world.assign(poly=lambda d: d["geometry"])).__geo_interface__)