You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于CSV坐标的空间映射报错及边界坐标过滤求助

地图轨迹绘制报错修复与坐标过滤方案

错误根源分析

报错TypeError: 'bool' object is not subscriptable的直接原因是BBox变量被错误赋值为布尔值:
你原代码中用>运算符把数据经纬度极值和预设边界做了比较,导致BBox变成了一个判断结果(True/False),而非预期的边界元组,自然无法通过下标[0]访问元素。

修复步骤

1. 修正BBox定义

直接用你预设的地图边界定义BBox,不要加比较运算符:

# 格式:(最小经度, 最大经度, 最小纬度, 最大纬度)
BBox = (-74.5514, -74.5040, 40.9036, 40.9228)

2. 过滤边界外的坐标

用pandas布尔索引筛选出在预设范围内的数据,避免无效点干扰绘图:

# 拆分边界变量,更清晰
lon_min, lon_max = BBox[0], BBox[1]
lat_min, lat_max = BBox[2], BBox[3]

# 过滤数据:仅保留经纬度在边界内的记录
df_filtered = df[
    (df["longitude"].between(lon_min, lon_max)) & 
    (df["latitude"].between(lat_min, lat_max))
]

3. 修正绘图轴范围

原代码中set_ylim误用了经度范围,matplotlib里y轴对应纬度,x轴对应经度,需调整:

ax.set_xlim(lon_min, lon_max)  # x轴:经度范围
ax.set_ylim(lat_min, lat_max)  # y轴:纬度范围

完整修复后代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv("/home/hk385/Research_Practice_2023/test_movement.csv")
df = pd.DataFrame(data, columns=["longitude", "latitude"])

# 定义地图边界
BBox = (-74.5514, -74.5040, 40.9036, 40.9228)
lon_min, lon_max = BBox[0], BBox[1]
lat_min, lat_max = BBox[2], BBox[3]

# 过滤边界外数据
df_filtered = df[
    (df["longitude"].between(lon_min, lon_max)) & 
    (df["latitude"].between(lat_min, lat_max))
]

ruh_m = plt.imread("/home/hk385/Research_Practice_2023/map.png")

fig, ax = plt.subplots(figsize=(8,7))
# 使用过滤后的数据绘图
ax.scatter(df_filtered.longitude, df_filtered.latitude, zorder=1, alpha=0.2, c='b', s=10)
ax.set_title('Plotting Spatial Data on I-80')
ax.set_xlim(lon_min, lon_max)
ax.set_ylim(lat_min, lat_max)
ax.imshow(ruh_m, zorder=0, extent=BBox, aspect='equal')
plt.show()

错误排查技巧

  • 打印变量类型:执行print(type(BBox)),快速确认是否因赋值错误导致类型异常
  • 检查数据极值:用print(df.longitude.describe(), df.latitude.describe())查看数据范围,对比预设边界确认是否存在越界点
  • 核对轴对应关系:始终牢记matplotlib中x轴对应经度(东西方向),y轴对应纬度(南北方向)

内容的提问来源于stack exchange,提问作者Hyun Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:17:48