APP下载

地名方位的计算方法与应用

2025-01-21刘洋洋

中国新技术新产品 2025年1期
关键词:委会夹角象限

摘 要:地名普查成果转化包括地名志编纂,编纂地名志时需要对地名点的位置描述进行统一处理,村(居)委会与乡镇政府驻地的方向和距离、居民点与村(居)委会的方向和距离等是描述地名时最常用、最直观的方法。本文分别运用Excel、Python和ArcGIS软件处理地名普查成果数据,获取地名点相对方向及距离,保证地名志书编纂时地名方位描述准确和统一。

关键词:地名方位;16方向;地名志书编纂

中图分类号:P 20 " 文献标志码:A

2018年6月,第二次全国地名普查结束,地名普查成果转化成为国家和地方地名工作的重要内容,地名志是地名普查成果转化不可缺少的重要成果。由于地名志是按照统一的编纂大纲进行的,有时也能暴露和发现地名普查中的缺点、错误、遗漏、不足,因此在编志过程中,也要进行调查研究,有的还需要进行考证。这些不仅可以弥补地名普查的不足,还可以提高普查成果的质量,促进地名普查工作的发展。针对《从江县地名志》编纂过程中遇到乡镇、村(居)委会、居民点等普查词条相对位置的描述不一致的情况,分别运用Excel、Python和ArcGIS软件计算乡级政府驻地与县政府驻地、村(居)委会与乡级政府驻地、居民点与村(居)委会的相对方向和距离等,保证地名普查成果数据中地名方位的统一和准确,同时,也保证了地名词条描述的正确性。

1 地名方位描述的传统

1.1 地名方位的含义

方位即方向位置,地名是地理实体命名后的称谓。将一定区域内的地理事物缩小为一个点并展示在一定的载体上,如果展示的载体是平面的,并规定了东、南、西、北等基本方向,那么可以用方向和距离描述任意两点的位置关系。地名方位是地名之间的相对方向和距离。

1.2 方向

根据研究,我国自东汉至清代的地理类志书中记载的方向和里程数据是用来绘制地图的。以唐代李吉甫《元和郡县图志》为例,其中使用的方向达到16个,即四至:东、南、西北;四隅:东南、西南、东北、西北;正向偏微的8个方向:正东微北,正东微南、正南微东、正南微西,正西微南、正西微北,正北微西、正北微东。里程分为陆程、水程、水路兼程[1]。

1.3 距离

根据《“非科学”的中国传统舆图:中国传统舆图绘制研究》研究证明,唐代以来全国总志和地方志中记载的“四至八到”中的距离数据大都是道路距离。

2 地名志中地名位置描述

2.1 相对方向

在描述相对方向的方式中,有表示风向的16个方向,也有如1985年版《贵州省从江县地名志》(以下简称“旧志”)所用的16方向,也有地方地名行政主管部门认定的16方向法。根据现行的地面气象观测规范,16风向是把圆周平均分为16份:北、北东北、东北、东东北、东、东东南、东南、南东南、南、南西南、西南、西西南、西、西西北、西北、北西北[2]。旧志所用方向为东、西、南、北及东南、西南、东北、西北,8个方向为15°。北偏东、东偏北、东偏南、南偏东、南偏西、西偏南、西偏北、北偏西8个方向为30°。也有地方地名管理部门提出的16方向,例如惠东县地名行政主管部门,以东、西、南、北及东南、西南、东北、西北,8个方向为30°,北偏东、东偏北、东偏南、南偏东、南偏西、西偏南、西偏北、北偏西,8个方向为15°。

从上文可知,表示16个方向时没有统一的规定。

2.2 地名点间的距离

可以根据路网资料求解最短的道路距离,也可以求解水平距离。因为地名普查成果中的点位,有些是没有通车道路连通的,所以为了保证地名点间距离的一致性,需要选取水平距离来作为地名点之间的相对距离。

2.3 获得方位的方法

根据点位坐标利用勾股定理可以计算点位间的距离,利用反正切函数,可以计算两点连线和水平方向的夹角。

3 方位计算

根据点位坐标,可以使用Excel自带的函数计算获取点位之间的直线距离及角度值,也可以使用Pyhton程序读取表格完成计算,并把结果添加到表格中,或者使用GIS软件提供的工具处理数据。

3.1 基于Excel表格的方位计算

给定2个点P0、P1的投影平面直角坐标P0(X0,Y0)、P1(X1,Y1),运用勾股定理可以计算两点间直线距离D,如公式(1)所示。

D=SQRT((X1-X0)²+(Y1-Y0)²) (1)

根据反正切函数计算两点连线和水平方向的夹角,如公式(2)所示。

a=ATAN((Y1-Y0)/(X1-X0)) (2)

计算的角度为弧度,再用A=a×180/PI()即可计算夹角的度数,即当坐标原点移动到P0,夹角在第一象限和第三象限时,角度值都是从X轴逆时针方向,取值为0°~90°;夹角在第二象限和第四象限时,角度值是从X轴顺时针方向,取值为0°~90°。根据给定的16方向的取值和所求夹角之间的关系,即可得到P0和P1间的方向关系。以旧志的16方向法为例,P0、P1两点连线与水平方向夹角所在象限及角度范围和对应方向之间的关系见表1。

根据表1的角度和16方向间的对应关系,在Excel表格中,使用IF函数的嵌套公式可以计算各象限夹角对应的方向,以第一象限为例,输入:=IF(AND(Y1-Y0>0,X1-X0>0,A>82.5),”北”,IF(AND(Y1-Y0>0,X1-X0>0,A>52.5),”北偏东”,IF(AND(Y1-Y0>0,X1-X0>0,A>37.5),”东北”,IF(AND(Y1-Y0>0,X1-X0>0,A>7.5),”东偏北”,IF(AND(Y1-Y0>0,X1-X0>0,A>0),”东”,0)))))。即可计算夹角在第一象限时的方向,如果不在第一象限,那么会被0填充。

如果继续使用IF函数多次嵌套,遍历4个象限时的情况即可确定所有方向。

当实际录入Excel表格时,以表2为例,如果P0点X0、Y0的坐标值分别在A2、B2单元格,P1点X1、Y1坐标值分别在C2、D2单元格,就在E2单元格录入:=SQRT((D2-$B$2)^2+(C2-$A$2)^2),即可计算两点间水平距离。在F2单元格录入:=ATAN((D2-$B$2)/(C2-$A$2))*180/PI(),即可计算两点连线与水平方向夹角,单位为°;在G2单元格录入:=IF(AND(D2-$B$2>0,C2-$A$2>0,F2>82.5),”北”,IF(AND(D2-$B$2>0,C2-$A$2>0,F2>52.5),”北偏东”,IF(AND(D2-$B$2>0,C2-$A$2>0,F2>37.5),”东北”,IF(AND(D2-$B$2>0,C2-$A$2>0,F2>7.5),”东偏北”,IF(AND(D2-$B$2>0,C2-$A$2>0,F2>0),”东”,IF(AND(D2-$B$2<0,C2-$A$2<0,F2>82.5),”南”,IF(AND(D2-$B$2<0,C2-$A$2<0,F2>52.5),”南偏西”,IF(AND(D2-$B$2<0,C2-$A$2<0,F2>37.5),”西南”,IF(AND(D2-$B$2<0,C2-$A$2<0,F2>7.5),”西偏南”,IF(AND(D2-$B$2<0,C2-$A$2<0,F2>0),”西”,IF(AND(D2-$B$2>0,C2-$A$2<0,F2>-7.5),”西”,IF(AND(D2-$B$2>0,C2-$A$2<0,F2>-37.5),”西偏北”,IF(AND(D2-$B$2>0,C2-$A$2<0,F2>-52.5),”西北”,IF(AND(D2-$B$2>0,C2-$A$2<0,F2>-82.5),”北偏西”,IF(AND(D2-$B$2>0,C2-$A$2<0,F2>-90),”北”,IF(AND(D2-$B$2<0,C2-$A$2>0,F2>-7.5),”东”,IF(AND(D2-$B$2<0,C2-$A$2>0,F2>-37.5),”东偏南”,IF(AND(D2-$B$2<0,C2-$A$2>0,F2>-52.5),”东南”,IF(AND(D2-$B$2<0,C2-$A$2>0,F2>-82.5),”南偏东”,IF(AND(D2-$B$2<0,C2-$A$2>0,F2>-90),”东”,0)))))))))))))))))))),即可获得P1点相对于P0点的距离和方向。如果C、D列是其他待求点的x、y坐标对,就依次复制E、F、G列第二行的公式即可。

3.2 基于Python的方位计算

Python是一种易于学习又功能强大的编程语言。它不仅能提供高效的高级数据结构,还能简单有效地面向对象编程。其优雅的语法和动态类型以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的理想语言。

利用Python标准库math、第三方库openpyxl、以.xlsx格式保存的点坐标计算两点间距离及连线与水平方向夹角,并存入表格。求解两点间的距离比较简单,但是求解两点间连线和水平方向间夹角及对应的方向,需要做条件判断,因此可以先确定象限,再确定方位。主要代码如下。

#定义求距离函数

def dis(x0,y0,x1,y1):

x = x1 - x0

y = y1 - y0

return math.sqrt(x**2+y**2)

#定义求角度函数

def angle(x0,y0,x1,y1):

x = x1 - x0

y = y1 - y0

if x != 0:

A = math.atan(y/x)

return math.degrees(A)

else:

return 0

#定义角度转换方向函数

def fx(dx,dy,a):

if dx>0 and dy> 0:

if 0<a<7.5:

return '东'

elif 7.5<a<37.5:

return '东偏北'

elif 37.5<a<52.5:

return '东北'

elif 52.5<a<82.5:

return '北偏东'

elif 82.5<a<90:

return '北'

elif dx<0 and dy>0:

……

3.3 基于ArcGIS的方位计算

计算地名方位,即计算地名点之间的相对方向和距离。在ArcGIS软件ArcToolbox中,使用分析工具-邻域分析-邻近分析工具可以获得输入要素与邻近要素之间的直线距离及邻近角度,分别记录在生成文件的NEAR_DIST、NEAR_ANGLE字段中。

以计算某个乡(镇)范围内的村(居)委会与所在乡(镇)政府驻地的相对方向和距离为例。在保证都是相同投影平面直角坐标系下,输入要素为村(居)委会点位数据,邻近要素为乡(镇)政府驻地点位数据。通过邻近分析,可以得到一个新文件,比原始村(居)委会点文件多2个字段,即NEAR_DIST、NEAR_ANGLE字段。前者为直线距离,后者为角度值,通过邻近分析的帮助文件可知,在 Method 参数中使用 Planar 方法的过程中,当角度在-180°~180°时,0°为西,90°为南,180°(或-180°)为东,-90°为北。

根据旧志中16个方向与用ArcGIS邻近分析工具得出的角度、方向关系,可知二者的对应关系。然后根据角度值计算对应的方向,可以利用数据ArcGIS中属性表的字段计算器获取。新建“FX”(方向的拼音首字母)字段,以下是选用Python解析程序时的脚本代码。

def FX(JD):

if JD >= -7.5 and JD < 7.5:

return ‘西’

elif JD >= 7.5 and JD < 37.5:

return ‘西偏南’

……

如果使用的是其他规定的方向,就需要重新计算各个方向对应的取值,替换以上脚本中的对应项即可。

3.4 计算方法总结

利用以上3种方法都可以获得地名方位数据。通过分析发现,当利用Python和ArcGIS软件时,它们都用到了Python程序中的函数知识。当利用Python处理数据时,如果计算的中心点位较多,那么添加遍历文件的代码即可批量处理,效率较高。

在运用不同的计算方法处理同一批数据的过程中,通过查看结果是否一致,就可以核对计算方法是否有纰漏,可以起到检查和校对的作用。

4 结论

当整理地名普查成果数据时,地名方位描述准确与统一是数据质量的基本要求,本文通过方法分析及实际操作,运用Excel软件、Python和ArcGIS软件这3种途径获得点位间的水平距离和相对方向,由此可以解决地名普查成果数据中地名描述方向和距离不一致的问题,保证数据的可靠性。

当描述相对位置时离不开方向描述,4个方向、8个方向划分基本没有分歧,但是使用16方向法精确描述方向时,不同行业的划分方法并不统一,同样的基层地名行政主管部门,对地名16方向的划分也不一致,因此会导致同样的方向会出现不同描述的情况。如果能对16方向的划分保持一致,是最理想的情况,如果按照现状,那么在整理编制地名数据的过程中,当遇到地名描述有16方向时,最好在元数据中把16方向的划分方式交代清楚。如果是编纂地名图录典志,地名的方位描述有用到16方向法时,就需要把具体的划分方法放在凡例或前言中,以免使用者根据自己的理解,判读错地名词条中的方位描述。

参考文献

[1]汪前进,现存最完整的一份唐代地理全图数据集[J].自然科学史研究,1998,17(3):273-288.

[2]中国气象局.地面气象观测规范 风向和风速:GB/T 35227—2017[S].北京:中国标准出版社,2017:2-3.

猜你喜欢

委会夹角象限
复数知识核心考点综合演练
探究钟表上的夹角
求解异面直线夹角问题的两个路径
任意夹角交叉封闭边界内平面流线计算及应用
基于四象限零电压转换PWM软开关斩波器的磁悬浮列车
新形势下检委会改革的路径思考
平面直角坐标系典例分析
中韩渔委会就2017年相互入渔安排达成协议
直线转角塔L形绝缘子串夹角取值分析
创新思维竟赛