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

如何用SQL或Python批量剔除位于地中海的埃及坐标点

批量剔除地中海区域坐标点的SQL与Python实现

当然可以通过SQL或Python批量处理,核心思路是通过地理范围筛选保留埃及本土的坐标点,剔除地中海区域的点,下面分两种场景给出具体方案:

一、SQL实现

假设你的坐标表名为egypt_coords,包含latitude(纬度)和longitude(经度)字段。

1. 简易经纬度范围筛选(快速上手)

埃及本土大致范围是北纬22°-31°、东经25°-37°,地中海区域多集中在北纬31°以北的埃及北部海域。建议先通过SELECT验证筛选结果,再执行删除:

-- 先验证筛选出的有效埃及本土点
SELECT * FROM egypt_coords
WHERE latitude BETWEEN 22.0 AND 31.0
  AND longitude BETWEEN 25.0 AND 37.0;

-- 确认无误后,删除地中海区域的点
DELETE FROM egypt_coords
WHERE latitude > 31.0
  AND longitude BETWEEN 25.0 AND 35.0;

注意:执行DELETE前务必备份数据,或先用SELECT确认筛选逻辑正确,避免误删有效数据。

2. 空间多边形筛选(更精准)

如果需要更贴合埃及实际边界的筛选(比如排除苏伊士运河附近的海域点),可以用空间SQL扩展(如PostGIS)的多边形判断功能:

-- 使用PostGIS的ST_Within函数筛选多边形内的点
SELECT * FROM egypt_coords
WHERE ST_Within(
  ST_MakePoint(longitude, latitude),
  ST_GeomFromText('POLYGON((25.0 22.0, 37.0 22.0, 37.0 31.0, 25.0 31.0, 25.0 22.0))', 4326)
);

-- 删除不在多边形内的点
DELETE FROM egypt_coords
WHERE NOT ST_Within(
  ST_MakePoint(longitude, latitude),
  ST_GeomFromText('POLYGON((25.0 22.0, 37.0 22.0, 37.0 31.0, 25.0 31.0, 25.0 22.0))', 4326)
);

二、Python实现

用Pandas+Shapely可以快速处理CSV/Excel格式的坐标数据,操作灵活且方便验证结果。

1. 基础经纬度筛选(无需额外依赖)

import pandas as pd

# 读取坐标数据(假设是CSV格式)
df = pd.read_csv('egypt_coords.csv')

# 定义埃及本土经纬度范围
lat_min, lat_max = 22.0, 31.0
lon_min, lon_max = 25.0, 37.0

# 筛选有效点
valid_df = df[
    (df['latitude'] >= lat_min) & (df['latitude'] <= lat_max) &
    (df['longitude'] >= lon_min) & (df['longitude'] <= lon_max)
]

# 保存清洗后的数据
valid_df.to_csv('cleaned_egypt_coords.csv', index=False)

2. 多边形精准筛选(需安装Shapely)

如果需要更精准的边界判断,安装shapely库后用多边形包含关系筛选:

import pandas as pd
from shapely.geometry import Point, Polygon

# 读取数据
df = pd.read_csv('egypt_coords.csv')

# 定义埃及本土简化多边形边界(可根据实际需求调整顶点)
egypt_boundary = Polygon([
    (25.0, 22.0), (37.0, 22.0),
    (37.0, 31.0), (25.0, 31.0),
    (25.0, 22.0)
])

# 定义函数判断点是否在埃及境内
def is_inside_egypt(row):
    point = Point(row['longitude'], row['latitude'])
    return egypt_boundary.contains(point)

# 筛选有效数据
valid_df = df[df.apply(is_inside_egypt, axis=1)]

# 保存结果
valid_df.to_csv('cleaned_egypt_coords.csv', index=False)

提示:如果需要可视化验证筛选结果,可以用folium库把原始点和筛选后的点分别绘在地图上对比。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:18:13