为点数据创建标准化的栅格参照、唯一标识符和UTM坐标。

pyutm的Python项目详细描述


pyutm

pyutm是一个python包,它为点数据创建标准化的网格引用。 它还可以使用这些网格引用为资源命名等任务创建具有空间意义的唯一标识符。

网格引用可以按以下格式创建:

  • 美国国家电网(USNG)
  • 军用网格参考系统(MGRS)
  • 通用横轴墨卡托(UTM)

单击此处查看有关此软件包演示文稿的shug 2018幻灯片。

0.2.1版

以下功能目前正在开发中,但当前版本尚不支持:

  • 需要UPS电网参考的位置
  • UTM中网格区域的例外情况

目录

什么是网格引用?

  • 读取USNG或MGRS网格引用

什么是唯一标识符?

示例

参考资料

什么是网格引用?

基于通用横墨卡托(UTM)和通用极赤平极图(UPS)投影, 网格引用允许用最多15个字符的字符串描述世界上的任何位置。 位置的精度随着字符添加到其网格引用和 随着字符的删除而减少。

以下是不同精度级别的网格引用的有效示例:

  • 18Lvj
  • 12JXQ69
  • 30UWB8270
  • 36RUU203175
  • 33MXS97396762
  • 44RKR0691609280

网格引用中的第一组字符描述了其网格区域指定(gzd)。

  • 这通常是三个字符长,由一个1到60之间的数字和一个字母组成:33m
  • 默认情况下,pyutm将前导零添加到小于10的数字:02u
  • 除了北纬和两极的一些例外,gzd描述了一个标准区域,包括 经度6度,纬度8度。
  • 省略字母"i"和"o",以避免与数字"1"和"0"混淆。

网格引用中的第二组字符描述了它在gzd中的100平方公里

  • 这总是两个字符长,由两个字母组成,再次省略"i"和"o":xs
  • 虽然gzd中的大多数正方形在每边都有100公里,但是位于gzd边缘的正方形可以是 由于投影的共形性质,面积较小 从中派生网格引用。

网格引用中的第三和第四组字符以米为单位描述其距左下角的距离 100公里广场的一角。第三组字符描述左下角的位置向东的距离(其向东的距离),而第四组字符描述了左下角的位置向北的距离(其向北的距离)。

  • 两个集合的长度可以在0到5个字符之间,并且完全由数字组成;它们必须具有相同的 字符数,不以空格分隔:97396762表示9739东距6762北距的位置
  • 每组使用的位数决定了这些位数所代表的米数。作为 数字从0增加到5,在100平方公里内确定位置的精度也随之提高:
<表><广告>位数精度(单位:米) 位置大小 < /广告><正文>零100000个 地区 一个10000 局部区域 两个 1000 邻居三个 100足球场 四个 10房子五个 1浴巾

读取USNG或MGRS网格引用

要定位网格引用所描述的区域,请将网格引用分解为其组件集 然后从左到右阅读。

例如,网格引用52JGS0495包含以下集合:

  • 网格区名称:52J
  • 100平方公里:GS
  • 距离:0495
    • 东距:04
    • 北距:95

因此,此网格引用描述了一个位置…

  • …在网格区内52j

网格区

  • …在100平方公里内

100km

  • 因为东距和北距包含两个数字,所以它们描述的位置精度为1000米(1公里)。 在100公里广场的左下角找到4公里的东95公里的北

distance

  • 这里我们看到52JGS0495描述的位置:uluru

location

请注意,网格引用没有描述东距和北距交叉处的点, 而是在该点东北方向的整个1平方公里范围内。 为了描述更小的区域,我们会在距离上加上数字,从而提高其精度。

什么是唯一标识符?

唯一标识符(uid)通过添加数字后缀来修改点的栅格引用,以确保每个基于引用的id 在数据集中是唯一的,即使两个点可能共享同一个网格引用。 它可以在引用中添加前缀,使uid更有意义,或者从标准网格中删除字符集。 引用以缩短uid;它还将字符集之间的分隔符添加到impr提高可读性。

  • m-xs-9739-6762-3是一个既包含自定义前缀又包含数字后缀的uid; 尚未使用gzd,已添加分隔符来分隔字符集。

示例

要安装pyutm,请使用pypi:

pip install pyutm

注意:Python2.7Windows用户可能需要安装 在使用此软件包之前。

<H3>1。创建grid()对象

网格(数据,列=无,epsg=4326)

  • 数据:用于构造网格引用和uid的点数据
    • 数据可以是坐标列表,也可以是csv或shapefile的文件路径
    • 列表应采用以下格式:[(x坐标,y坐标),…]
  • :如果数据是csv格式,则这些列包含坐标
    • 参数应以以下格式传递:[x坐标,y坐标]
  • epsg:数据坐标参考系的epsg编号
    • 默认EPSG为4326(WGS 84)
>>>importpyutm# Create a grid object from a list of longitudes and latitudes>>>lonlat=[(16.776031,-3.005612),(16.772291,-3.007136)]>>>grid_from_list=pyutm.Grid(lonlat)# Create a grid object from a CSV file>>>grid_from_csv=pyutm.Grid('my_points.csv',columns=['LON','LAT'])# Create a grid object from a shapefile in WGS 84 Web Mercator (Auxiliary Sphere)>>>grid_from_shp=pyutm.Grid('my_points.shp',epsg=3857)
<H3>2。调用write_refs()方法

如果指定了文件名,此函数会将每个点的网格引用写入文件。 如果输入数据是csv或shapefile格式,则网格引用将作为新列添加到文件中。

此函数始终以[[x,y,'grid reference'],…]格式返回列表

写入参考(fname=none,column='grid\u ref',precision=10)

  • fname(可选):写入网格引用的文件的名称
    • 输出文件的格式必须与输入数据的格式相同
  • :网格引用写入的列的标题
    • 默认列名为网格参考
  • 精度:网格引用的所需精度,单位为米
    • 默认精度为10米
>>>lonlat=(16.776031,-3.005612)>>>my_grid=pyutm.Grid(lonlat)# Create grid references>>>my_ref=my_grid.write_refs()>>>my_ref[[16.776031,-3.005612,'33MXS97386762']]# Specify the precision of the grid reference>>>my_1m_ref=my_grid.write_refs(precision=1)>>>my_1m_ref[[16.776031,-3.005612,'33MXS9738967626']]# Create grid references from a CSV file>>>grid_from_csv=pyutm.Grid('my_points.csv',column=['LON','LAT'])# Write the grid references to a new CSV with a custom column name>>>grid_from_csv.write_refs('my_refs.csv',column='MY_REFS')# Create grid references from a shapefile>>>grid_from_shp=pyutm.Grid('my_points.shp')# Write the grid references to a new shapefile with 10 km precision>>>grid_from_shp.write_refs('my_refs.shp',precision=10000)
<H3>3。调用write\u uids()方法

如果指定了文件名,则此函数会将每个点的uniqueid标识符写入文件。 如果输入数据是csv或shapefile格式,则uid将作为新列添加到文件中。

此函数始终以[[x,y,'uid'],…]格式返回列表

写入uid(fname=none,column='uid戥ref',precision=10,prefix=none,prefix戥column=none,gzd=true,k100=true,delimiter='-')

  • fname(可选):将uid写入的文件的名称
    • 输出文件的格式必须与输入数据的格式相同
  • :将uid写入的列的标题
    • 默认列名为uid\u ref
  • 精度:所需的uid精度,单位为米
    • 默认精度为10米
  • 前缀:要添加到所有uid的前缀
  • 前缀列:包含前缀字符的数据列的名称
  • gzd:是否在uid中包含网格区域标志
    • 默认值为true
  • k100:是否在uids中包含100平方公里
    • 默认值为true
    • 如果k100设置为false,则gzd也设置为false
  • 分隔符:用于分隔字符集的字符
    • 默认字符是da嘘:-
>>>lonlat=(16.776031,-3.005612)>>>my_grid=pyutm.Grid(lonlat)# Create unique identifiers>>>my_uid=my_grid.write_uids()>>>my_uid[[16.776031,-3.005612,'33M-XS-9738-6762-1']]# Increase the precision, add a prefix to the UID, remove the GZD and change the delimiter>>>my_prefix=my_grid.write_uids(precision=1,prefix='m',gzd=False,delimiter=':')>>>my_prefix[[16.776031,-3.005612,'m:XS:97389:67626:1']]# Create UIDs from a CSV file>>>grid_from_csv=pyutm.Grid('my_points.csv',column=['LON','LAT'])# Add prefixes to the UIDs using values in a column of the input CSV,# then write the UIDs to a new CSV with a custom column name>>>grid_from_csv.write_refs('my_uids.csv',column='MY_UIDS',prefix_column='MY_PREFIXES')# Create UIDs from a shapefile>>>grid_from_shp=pyutm.Grid('my_points.shp')# Add prefixes to the UIDs using values in a column of the input shapefile# and decrease the precision, then write the UIDs to a new shapefile.>>>grid_from_shp.write_refs('my_uids.shp',precision=1000)
<H3>4。调用write\u utm()方法

:锤子和扳手:即将推出:锤子和扳手:

参考文献

国家地理空间情报局,通用网格和横向墨卡托和极赤平极图投影nga标准化文件nga.sig.0012-u2.0.0-utumups。 华盛顿特区:地理信息办公室,2014年。

  • pyutm最终将实现本文第11、12和14节中的逻辑。

国家地理空间情报局,通用网格和网格参考系统, NGA标准化文件nga.stnd.0037-u 2.0.0-grids。 华盛顿特区:地理信息办公室,2014年。

  • 尽管范围比前一份文件更广,但第3章和附录A和B尤其有帮助。
  • PYUTM目前实现了本文档附录B中的逻辑版本。

国家地理空间情报局,地理信息办公室,坐标系数据

  • 用于UTM和MGRS坐标系的全球地理信息系统层库

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
解释java选择方法   连接到127.0.0.1的java间歇性故障,连接到IP(eth0)时没有故障   java如何优雅地杀死hadoop作业/intercept`hadoop作业杀死`   java如何通过引导类加载器以编程方式加载另一个类?   url Java:在查询参数之前使用片段构建URI   在BroadLeaf表blc_order_属性中保存OrderAttributes值时发生java错误   安卓将功能从xml转换为java   java如何将数据写入文件?   java JPA SQL结果映射   Java中整数对象比较运算符的引用安全性   Spring测试失败:java。lang.NoClassDefFoundError:org/springframework/cglib/transform/impl/memorysafuendecaredthrowableStrategy   rich:extendedDataTable中的java行选择和数据处理   java为什么我需要在volatile上对多个线程使用synchronized?   java尽管构建成功,但为什么会出现此错误?   数组$ArrayList不能转换为java。util。java中的ArrayList   java如何根据泛型类型调用方法?   java将JLabel添加到JPanel,将JPanel添加到JFrame   如果MapStruct中的源为null,则java将父目标设置为null   JavaJBossDrools从DRL插入事实   java不同的JRE安装(windows)