1地形图的分幅与编号原理
我国1:1000000地形图的分幅采用国际1:1000000地图分幅标准,而其他比例尺地形图分幅以1:1000000比例尺地形图为基准进行分幅。每幅1:1000000地形图范围是经差6°、纬差4°;纬度60°~ 76°之间经差12°、纬差4°;纬度76°~ 88°之间经差24°、纬差4°。我国经纬度范围为:经度73.33°~135.05°, 纬度3.51°~53.33°,纬度60°以上没有需要合幅的图幅。
我国1:1000000地形图分幅如下:
1:1000000地形图编号:从赤道起算,每纬差4°为一行至南、北纬88°各分为22行依次用大写字母(字符码)ABC……V表示其行号:从180°经线起算,自西向东每经差6°为一列,全球分为60列,依次用阿拉伯数字(数字码)123……60表示列号。国际编号中第一位表示南、北半球,用“N”、“S”分别表示北半球、南半球。我国范围全部位于赤道以北,省略字母代码N。
我国图幅范围在经度72°~138°, 纬度0°~ 56°,包括行号A~ N共14行,列号43~53共11列。1:1000000地形图编号见图1。
1:500000~1:5000地形图的分幅均以1:1000000地形图为基础,按照规定的经差和纬差进行划分图幅,地形图的图幅范围、行列数和图幅数量关系如下图所示。
1:500000~ 1:5000地形图的编号均以1:1000000地形图编号为基础,采用行列编号方法。1:500000~ 1:5000地形图的图号由其所在1:1000000地形图的图号、比例尺代码和各图幅的行列号共十位码组成。1:500000~1:5000地形图编号的组成如图3所示。
1:1000~1:500地形图编号的组成如图6所示,图幅的行列号由3位变成了4位。
1:500000~1:5000各比例尺地形图比例尺代码如下表所示。
1:500000~1:5000各比例尺地形图行列号是将1:1000000地形图按所含各比例尺地形图的经差和纬差划分若干行和列,横行从上到下、纵行从左到右按顺序用数字表示,不足3位的前面补零。
例如如下图所示:1:1000000比例尺某图幅编号为M43,包含了4幅1:500000地形图,右下角图幅的编号为M43B002002。
以上主要介绍的是经纬度分幅和编号方法,其他如正方形、矩形分幅和编号方法此处不再赘述,感兴趣的可查阅国家标准GB/T13989-2012《国家基本比例尺地形图分幅和编号》。
2ArcGIS实现地形图分幅和编号
我们以陕西省行政区范围为例,基于ArcGIS实现1:250000地形图分幅和编号,并生成图幅结合表数据。
地形图分幅步骤:
1.首先在ArcMap中加载陕西省行政区划shp数据,并查看经纬度范围。
查看可知陕西省经纬度范围为经度105.49°~ 111.24°、纬度31.71°~39.58°。
2.按照数据经纬度范围,计算1:1000000地形图图幅号。
西南角:
a=[φ/4°]+1=[31.71/4]+1=7+1=8,
b=[λ/6°]+31=[105.49/6]+31=17+31=48,
东北角:
a=[φ/4°]+1=[39.58/4]+1=9+1=10,
b = [λ/6°]+31=[111.24/6]+31=18+31=49,
经过计算可知1:1000000比例尺西南角图号为H48、东北角图号为J49,1:1000000比例尺陕西省共涉及3行2列共6幅图,图号分别为H48、H49、I48、I49、J48、J49,图幅对应经度范围为102°~ 114°,纬度范围为28°~40°。
3.按照经纬度范围比例尺创建渔网。
在ArcGIS中,点击工具箱,依次点击【数据管理工具】->【要素类】->【创建渔网】。
按照规定,每幅1:1000000地形图划分为4行4列共16幅1:250000地形图,陕西省共涉及3行2列共6幅1:1000000地形图,因此1:250000地形图共划分为3x4=12行、2x4=8列共96幅图。
在创建渔网工具参数中依次设置输出路径、经纬度范围、行列数,并设置几何类型为面类型,顺便勾选创建标注点。
生成的渔网和标准点shp数据没有定义坐标系,使用【定义投影】工具定义和陕西省矢量范围一样的地理坐标系,结果如下图所示:
地形图编号步骤:
1.给标准点分别添加XY坐标字段并计算坐标值。
使用【数据管理】->【字段】->【添加字段】工具添加X坐标、Y坐标字段,设置字段类型为DOUBLE类型,然后使用计算几何求出十进制格式坐标值。
2.计算图幅号
网上好多教程都是将属性表导出xls表格文件,然后使用表格里面的函数分布计算出图幅号,十分麻烦而且不方便,显得就很不高级。推荐大家多多使用字段计算器功能,通过编写简单python函数的方式进行属性值计算。不仅方便,而且可以保存成函数文件重复使用。
首先添加图幅号字段,然后使用字段计算器加载提前编写好的图幅号计算函数批量计算各标准点所在图幅的图幅号。
计算后图幅号如下:
按照不同比例尺图幅编号规则,使用Python语言编写图幅号计算函数,输入比例尺、经度、纬度即可计算出该点所在对应比例尺图幅的图幅号。
函数完整代码如下:
def getMapID(scale, x, y):
#计算100W图幅号
x_map_size = 6
y_map_size = 4
a = int(y / y_map_size) + 1
b = int(x / x_map_size) + 31
tag = chr(a + 64)
map_id_100W = tag + "{:02d}".format(b)
if scale == 500000:
x_map_size = 3
y_map_size = 2
if scale == 250000:
x_map_size = 1 + 30/60
y_map_size = 1
if scale == 100000:
x_map_size = 30/60
y_map_size = 20/60
if scale == 50000:
x_map_size = 15/60
y_map_size = 10/60
if scale == 25000:
x_map_size = 7/60+30/3600
y_map_size = 5/60
if scale == 10000:
x_map_size = 3/60+45/3600
y_map_size = 2/60+30/3600
if scale == 5000:
x_map_size = 1/60+52.5/3600
y_map_size = 1/60+15/3600
if scale == 2000:
x_map_size = 37.5/3600
y_map_size = 25/3600
if scale == 1000:
x_map_size = 18.75 / 3600
y_map_size = 12.5 / 3600
if scale == 500:
x_map_size = 9.375 / 3600
y_map_size = 6.25 / 3600
#计算50W在100W图幅中的行列号
c = int(4 / y_map_size) - int(divmod(y, 4)[1] / y_map_size)
d = int(divmod(x, 6)[1] / x_map_size) + 1
if scale == 1000000:
map_id = map_id_100W
if scale == 500000:
map_id = map_id_100W + "B{:03d}{:03d}".format(c,d)
if scale == 250000:
map_id = map_id_100W + "C{:03d}{:03d}".format(c,d)
if scale == 100000:
map_id = map_id_100W + "D{:03d}{:03d}".format(c,d)
if scale == 50000:
map_id = map_id_100W + "E{:03d}{:03d}".format(c,d)
if scale == 25000:
map_id = map_id_100W + "F{:03d}{:03d}".format(c,d)
if scale == 10000:
map_id = map_id_100W + "G{:03d}{:03d}".format(c,d)
if scale == 5000:
map_id = map_id_100W + "H{:03d}{:03d}".format(c,d)
if scale == 2000:
map_id = map_id_100W + "I{:03d}{:03d}".format(c,d)
if scale == 1000:
map_id = map_id_100W + "J{:04d}{:04d}".format(c,d)
if scale == 500:
map_id = map_id_100W + "K{:04d}{:04d}".format(c,d)
return map_id
3.分幅数据挂接图幅号
首先给生成的分幅数据添加图幅号字段,然后在目录中分幅数据上右击使用【连接和关联】工具基于FID字段连接标注点图层。
使用字段计算器将标注点图层的图幅号计算到分幅图层,然后取消连接。
4.陕西省图幅结合表生成
加载陕西省行政区数据,按位置进行筛选去除不涉及图幅,然后将选中的图幅导出即可生成陕西省1:250000比例尺标准分幅图幅结合表数据。
图幅结合表结果如下: