文档章节

一个用python写的从数字高程格式文件(DEM)中提取水系的模块

施峰
 施峰
发布于 2012/10/26 10:09
字数 504
阅读 130
收藏 0
https://bitbucket.org/luoboiqingcai/dem_waters_extractor



本模块的功能是从dem文件中提取出水系。



模块通过了基本测试,对《基于数字高程模型的水系提取算法》(地理学与国土研究2000.11;周贵云,刘瑜,邬伦)中提到的9*9维度的矩阵进行计算,结果与该文中所得结果完全一致。



写这个模块主要是用于学习目的。由于很多实际的问题没有考虑进来,如果用此模块处理的dem文件的维度比较大或dem文件所描述的地型为盆地或描述区域内有大的水坑或平底峡谷,程序可能要跑非常长的时候。



本模块参考了《基于数字高程模型的水系提取算法》(地理学与国土研究2000.11;周贵云,刘瑜,邬伦)提到的方法。



下面是测试矩阵:



[[1,1,3,4,5,5,7,5,4],
[1,2,4,4,4,4,6,5,3],
[4,4,3,4,3,3,6,7,5],
[3,3,2,3,2,2,4,6,7],
[1,2,2,2,1,2,3,4,5],
[3,3,2,1,1,2,3,6,6],
[2,3,3,1,1,2,5,7,8],
[1,2,3,3,3,3,4,8,6],
[1,1,2,3,3,4,5,7,8]]





以下是测试模块中各个函数的测试代码:

from demfunctions import (fill_sinks,lift,get_vect_matrix,count_water,river_map,river_paths,water_grad)
import pprint

def test_fill_sinks():
    data = [[1,1,3,4,5,5,7,5,4],
            [1,2,4,4,4,4,6,5,3],
            [4,4,3,4,3,3,6,7,5],
            [3,3,2,3,2,2,4,6,7],
            [1,2,2,2,1,2,3,4,5],
            [3,3,2,1,1,2,3,6,6],
            [2,3,3,1,1,2,5,7,8],
            [1,2,3,3,3,3,4,8,6],
            [1,1,2,3,3,4,5,7,8] ]
    return fill_sinks(data)

print test_fill_sinks()

def test_lift():
    data = [[1,1,3,4,5,5,7,5,4],
            [1,2,4,4,4,4,6,5,3],
            [4,4,3,4,3,3,6,7,5],
            [3,3,2,3,2,2,4,6,7],
            [1,2,2,2,1,2,3,4,5],
            [3,3,2,1,1,2,3,6,6],
            [2,3,3,1,1,2,5,7,8],
            [1,2,3,3,3,3,4,8,6],
            [1,1,2,3,3,4,5,7,8]]
    data_modified = fill_sinks(data)
    return lift(data_modified,0.1)

print test_lift()

def test_get_vect_matrix():
    data = [[1,1,3,4,5,5,7,5,4],
            [1,2,4,4,4,4,6,5,3],
            [4,4,3,4,3,3,6,7,5],
            [3,3,2,3,2,2,4,6,7],
            [1,2,2,2,1,2,3,4,5],
            [3,3,2,1,1,2,3,6,6],
            [2,3,3,1,1,2,5,7,8],
            [1,2,3,3,3,3,4,8,6],
            [1,1,2,3,3,4,5,7,8]]
    data_modified = fill_sinks(data)
    data_lifted = lift(data_modified,1e-5)
    return get_vect_matrix(data_lifted,1,1)

print test_get_vect_matrix()

def test_count_water():
    data = [[1,1,3,4,5,5,7,5,4],
            [1,2,4,4,4,4,6,5,3],
            [4,4,3,4,3,3,6,7,5],
            [3,3,2,3,2,2,4,6,7],
            [1,2,2,2,1,2,3,4,5],
            [3,3,2,1,1,2,3,6,6],
            [2,3,3,1,1,2,5,7,8],
            [1,2,3,3,3,3,4,8,6],
            [1,1,2,3,3,4,5,7,8]]
    data_modified = fill_sinks(data)
    data_lifted = lift(data_modified,1e-5)
    vect_matrix = get_vect_matrix(data_lifted,1,1)
    return count_water(vect_matrix)
print test_count_water()

def test_river_map():
    data = [[1,1,3,4,5,5,7,5,4],
            [1,2,4,4,4,4,6,5,3],
            [4,4,3,4,3,3,6,7,5],
            [3,3,2,3,2,2,4,6,7],
            [1,2,2,2,1,2,3,4,5],
            [3,3,2,1,1,2,3,6,6],
            [2,3,3,1,1,2,5,7,8],
            [1,2,3,3,3,3,4,8,6],
            [1,1,2,3,3,4,5,7,8]]
    data_modified = fill_sinks(data)
    data_lifted = lift(data_modified,1e-5)
    vect_matrix = get_vect_matrix(data_lifted,1,1)
    return river_map(count_water(vect_matrix),5)

pprint.pprint(test_river_map())

def test_river_paths():
    data = [[1,1,3,4,5,5,7,5,4],
            [1,2,4,4,4,4,6,5,3],
            [4,4,3,4,3,3,6,7,5],
            [3,3,2,3,2,2,4,6,7],
            [1,2,2,2,1,2,3,4,5],
            [3,3,2,1,1,2,3,6,6],
            [2,3,3,1,1,2,5,7,8],
            [1,2,3,3,3,3,4,8,6],
            [1,1,2,3,3,4,5,7,8]]
    data_modified = fill_sinks(data)
    data_lifted = lift(data_modified,1e-5)
    vect_matrix = get_vect_matrix(data_lifted,1,1)
    map_ = river_map(count_water(vect_matrix),5)
    return river_paths(map_,vect_matrix)

pprint.pprint(test_river_paths())

def test_water_grad():
    data = [[1,1,3,4,5,5,7,5,4],
            [1,2,4,4,4,4,6,5,3],
            [4,4,3,4,3,3,6,7,5],
            [3,3,2,3,2,2,4,6,7],
            [1,2,2,2,1,2,3,4,5],
            [3,3,2,1,1,2,3,6,6],
            [2,3,3,1,1,2,5,7,8],
            [1,2,3,3,3,3,4,8,6],
            [1,1,2,3,3,4,5,7,8]]
    r_max = len(data)
    c_max = len(data[0])
    data_modified = fill_sinks(data)
    data_lifted = lift(data_modified,1e-5)
    vect_matrix = get_vect_matrix(data_lifted,1,1)
    map_ = river_map(count_water(vect_matrix),5)
    path_dict = river_paths(map_,vect_matrix)
    #return path_dict
    #return water_grad(**path_dict)
    return water_grad(path_dict['cross_sections'],path_dict['paths'],r_max,c_max)

pprint.pprint(test_water_grad())

© 著作权归作者所有

施峰
粉丝 2
博文 4
码字总数 2795
作品 0
沙坪坝
私信 提问
一个用python写的从数字高程格式文件(DEM)中提取水系的模块

https://bitbucket.org/luoboiqingcai/demwatersextractor 本模块的功能是从dem文件中提取出水系。 模块通过了基本测试,对《基于数字高程模型的水系提取算法》(地理学与国土研究2000.11;周贵...

施峰
2012/10/26
0
0
新疆自治区谷歌地球高程DEM等高线下载

一、概述 新疆维吾尔自治区,简称新,位于中国西北边陲,首府乌鲁木齐,是中国五个少数民族自治区之一,也是中国陆地面积最大的省级行政区,面积166万平方公里,占中国国土总面积六分之一。 ...

mrib
2018/05/16
0
0
bigemap和91对比的功能分析?

BIGEMAP功能对比分析图 【地图服务行业专家】 BIGEMAP是全行业公认的【优秀知名软件】、高新技术企业、国内最早从事GIS领域研发的公司,为全国各行业提供GIS领域的软件产品、解决方案、技术指...

bigemap123
2018/05/24
0
0
python开源工具列表【持续更新】

以下是个人在工作中整理的一些python wheel,供参考。 这个列表包含与网页抓取和数据处理的Python库 网络 通用urllib -网络库(stdlib)。 requests -网络库。 grab – 网络库(基于pycurl)。...

武耀文
2018/04/25
0
0
手把手教你如何用Python从PDF文件中导出数据(附链接)

作者:Mike Driscoll ;翻译:季洋;校对:丁楠雅 本文约4000字,建议阅读10分钟。 本文介绍了在提取出想要的数据之后,如何将数据导出成其他格式的方法。 有很多时候你会想用Python从PDF中提...

数据分析v
2018/11/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

protoc 编译工具

在进行开发 protoc 之前,你需要首先在你的计算机中安装 protoc 编译工具。 下载编译工具 进入 Protocol Buffers 的源代码中然后选择发布的版本中,找到对应的版本。项目的链接地址为:https...

honeymoose
39分钟前
1
0
uniapp + bootstrapvue 移动/PC 一套搞定 (一)配置bootstrapvue

1.准备文件 自己到DCloud官网: http://dcloud.io/ 去下载官方的IDE Hbuilder,新建一个空的uniapp项目即可。 uniapp框架自带优化的vue,我们仅仅需要准备以下三个文件: bootstrap.min.css ...

panyunxing
今天
9
0
Android Camera原理之camera service类与接口关系

camera service主要是指 frameworks/av/services/camera/下面的代码,最近在看这一块的代码,为了更好地理清这一块的代码,也为了后续学习camera方便一些,我觉得很有必要理一下这一块的整体...

天王盖地虎626
今天
2
0
Golang学习笔记

[TOC] Golang学习笔记 这个学习笔记是最早在1.初,版本左右的时候写的,和当前最新的版本可能会有较大的差异. 因为成文比较早,文章里面又有很多自己的见解,有些东西当时理解的不太透彻可能写错...

我爱吃炒鸡
今天
14
0
科技赋能成效显著!金融壹账通两大赋能项目荣获IDC大奖

7月19日,2019IDC中国未来金融论坛曁颁奖典礼于北京举办。由金融壹账通赋能的长春农商银行多人视频面审智能风控系统、包头农商银行互联网银行SaaS服务两大项目因在项目的创新性、技术领先性、...

IFTNews
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部