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

如何使用Mapping Toolbox获取全球各国的多边形数据?

全球按区域划分陆地多边形元胞数组获取方案

你安装了Mapping Toolbox的前提下,全程不需要调用worldmap、geoshow这类自带绘图函数,直接读取工具箱内置的标准化行政边界数据集,即可得到按国家、南极洲等特殊陆地区域划分的多边形数据,可直接用于坐标点归属判定场景。

1. 读取内置边界数据

Mapping Toolbox自带3个精度等级的全球陆地区界矢量数据,覆盖所有主权国家、南极洲、争议区域等标注类别,直接用readgeotable读取即可,不需要额外下载外部数据:

  • 1:110m精度(适合全球尺度快速计算,文件最小):对应数据名worldboundaries.shp
  • 1:50m精度(平衡精度和速度,常规场景推荐):对应数据名worldboundaries50m.shp
  • 1:10m精度(最高精度,适合小范围精细判断,文件最大):对应数据名worldboundaries10m.shp

读取示例代码:

% 这里以常规场景用的50m精度为例
geoTable = readgeotable("worldboundaries50m.shp");

读取得到的地理表中,Shape字段存储每个区域的多边形地理对象,Name字段存储对应区域的名称(如国家名、南极洲等特殊区域标注),其余字段附带ISO编码、所属大洲等辅助属性。

2. 转换为多边形cell array格式

遍历地理表提取每个多边形的经纬度坐标,组装成你需要的元胞数组,同时可以同步生成区域名称元胞数组,方便后续判定结果映射:

regionCount = height(geoTable);
% 预分配元胞数组
polyCell = cell(regionCount, 1);
regionNameCell = cell(regionCount, 1);

for idx = 1:regionCount
    % 提取单个多边形的经纬度坐标点序列
    polyLon = geoTable.Shape(idx).Longitude;
    polyLat = geoTable.Shape(idx).Latitude;
    polyCell{idx} = [polyLon, polyLat];
    regionNameCell{idx} = geoTable.Name(idx);
end

运行完成后polyCell就是按区域划分的全球陆地多边形元胞数组,每个元胞内是N×2的矩阵,第一列为经度、第二列为纬度,对应单个区域的多边形边界顶点序列。

3. 坐标点所属区域判定

拿到元胞数组后,直接用Matlab内置的inpolygon函数即可判断坐标点落在哪个多边形范围内,自带数据集已经完成跨180度经线、南极洲边界的拓扑修正,不需要额外做坐标转换处理:

% 示例:判断经纬度(116.4074, 39.9042)(北京)所属区域
testLon = 116.4074;
testLat = 39.9042;
matchRegionIdx = 0;

for idx = 1:regionCount
    currentPoly = polyCell{idx};
    if inpolygon(testLon, testLat, currentPoly(:,1), currentPoly(:,2))
        matchRegionIdx = idx;
        break;
    end
end

if matchRegionIdx > 0
    disp("坐标点所属区域:" + regionNameCell{matchRegionIdx});
else
    disp("坐标点位于海洋或未收录陆地区域");
end

优化提示:如果需要批量判定上万级以上的坐标点,不要逐点逐多边形循环,可使用geospatialindex构建空间索引加速查询,判定速度能提升1~2个数量级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:19:07