河流概化技巧方法介绍

河流概化技巧方法介绍

  由于工作需要,博主大概在2020年的时候开始接触一些水模型(efdc、delft3D),令人头疼的就是概化河流耗时太久,于是,在经过三、四个工程的洗礼之后,逐渐摸索到一些河流概化的技巧和方法,可以提高效率,避开纯手绘,而且精度也比较高。下面逐步介绍一下。
注:本博客是建立在有一定水模型建模基础的前提下.
   工具:python3、arcgis10.2、GlobalMapper、Delft3D。

   这些工具可能安装起来比较麻烦,但是安装好之后,是一劳永逸的。

   1. 安装python3

  该步骤,在csdn有很多博客可以参考,博主仅根据浏览量推荐几篇,其实建议安装anaconda,在anaconda下建立python虚拟环境:
  参考博客:https://blog.csdn.net/qq_59636442/article/details/123079968
  参考博客:https://blog.csdn.net/Lottle123/article/details/125441622
  安装完成,启动python方法(windows):【win】+【R】,输入cmd,进入终端,输入python,然后进入python环境,输入【exit()】,则退出。
  在安装完python之后,需要安装一个gee的包。
  参考博客:https://blog.csdn.net/qq_44023827/article/details/120572149(这篇博客,是使用的anaconda环境下的python环境)
  要保证下面这三个包可以被调用。

import ee
import os
import geemap

   2. 安装Arcgis10.2**版(你懂的)

  当然,假如你有正版的,那更好,这个软件安装起来可能会比较麻烦,耐心一点。
下载及参考博客:https://blog.csdn.net/shanyanyi7173/article/details/124875816

   3. 安装GlobalMapper**版(你懂的)

  这个安装不麻烦,下面的版本是我之前一直用的,大家也可以用其他版本的。应该都没啥问题。不会安装的,自己百度一下。
  软件https://download.csdn.net/download/qq_38423499/86954545

   4. 安装Delft3D

  参考博客:https://zhuanlan.zhihu.com/p/442917790

###################分割线###################################

  好。这里默认大家软件都准备好了!

   5. python3代码运行

  下面放代码(建议在jupyter下面运行):
参考博客:

import ee
import os
import geemap

# 设置vpn
# 这里要设置自己的VPN,所以需要梯子
os.environ['HTTP_PROXY'] = 'http://****.***.com.cn:80'
os.environ['HTTPS_PROXY'] = 'http://****.***.com.cn:80'

ee.Initialize()

# class 02_2 所有basemap的展示
# 初始化地图
Map = geemap.Map()
Map

这里会给出一个初始化的地图。

#part 02 在地图上加载影像数据
point = ee.Geometry.Point([118.7719, 31.8799])
# 指定位置的tif文件
image = (
    ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
    .filterBounds(point)
    .filterDate('2020-08-01', '2021-10-31')
    .sort('CLOUD_COVER')
    .first()
    .select('B[1-7]')
)

vis_params = {'min': 0, 'max': 3000, 'bands': ['B5', 'B4', 'B3']}
#将某个点作为中心点进行缩放
Map.centerObject(point, 8)
Map.addLayer(image, vis_params, "Landsat-8")

在这里插入图片描述

#part 03 检查影像属性
props = geemap.image_props(image)
props.getInfo()
props.get('IMAGE_DATE').getInfo()
props.get('CLOUD_COVER').getInfo()

  指定截取区域,目标河流所在的矩形块。

# part 04 训练数据集
# 下面有几种方法可以创建用于生成训练数据集的区域。

# 1、在地图上画一个形状(如矩形)
region = Map.user_roi
region = ee.Geometry.Rectangle([118.309746,31.25, 119.023791,31.60])  # 2、定义一个几何形状
# region = ee.Geometry.Point([118.7719, 37.8799]).buffer(10000)   # 3、在中心点周围建立一个缓冲区
# 4、也可以直接在整个影像中选取训练数据随机点

scale_value = 15
training = image.sample(
    **{
       'region': region, # 上面选择的训练样本点选择的区域(范围)
        'scale': scale_value,
        'numPixels': 10000,
        'seed': 0,
        'geometries': True,  # Set this to False to ignore geometries
    }
)

Map.addLayer(training, {}, 'training', False)
Map

在这里插入图片描述

  通过K-mean算法对地图中不同的地貌进行聚类,保证【水体】可以被聚到同一个类中。

# part 05 实例化聚类器并进行训练,利用K-mean聚类方法进行非监督分类
n_clusters = 7
clusterer = ee.Clusterer.wekaKMeans(n_clusters).train(training)
# part 06 影像分类
# 使用训练过的聚类对输入roi影像进行分类。
result = image.cluster(clusterer)
resultclip = result.clip(region)
# #使用随机颜色展示分类结果
Map.addLayer(resultclip.randomVisualizer(), {}, 'clusters')
Map

在这里插入图片描述
  上图,中间的部分,就是处理后的结果。

# part 7 分类图例修改
legend_keys = ['Sediment water', 'Bare flat', 'S.salsa', 'water', 'land', 'Vegetation','buildings','high_land']
# legend_colors = [ '#FB8072','#8DD3C7', '#FFFFB3', '#BEBADA', '#80B1D3']
legend_colors = [ '#E3B672','#FFFFB3', '#FB8072', '#80B1D3','#8DD3C7']
# Reclassify the map
result = resultclip.remap([0, 1, 2, 3, 4, 5 ,6, 7], [1, 2, 3, 4, 5, 6, 7, 8])

Map.addLayer(
    result, {'min': 1, 'max': 8, 'palette': legend_colors}, 'Labelled clusters'
)
# Map.add_legend(
#      legend_keys=legend_keys, legend_colors=legend_colors, position='bottomright'
#  )
Map

  最后一步保存tif文件。

# # 透明度可视化结果
# print('Change layer opacity:')
# cluster_layer = Map.layers[-1]
# cluster_layer.interact(opacity=(0, 1, 0.1))

# 将非监督分类结果图导出

import os
out_dir = os.path.join(os.path.expanduser('~'), 'Downloads')
out_file = os.path.join(out_dir, 'maansahn2.tif')
geemap.ee_export_image(result, filename=out_file, scale=25)

  我这里得到的图片是这样子的。用arcgis打开,是这个效果。

在这里插入图片描述
  到这里tif文件得到了,下面就该使用Arcgis处理了。

   5. Arcgis调整tif文件

  将tif文件代入Arcgis ,其实,从这里已经可以看出,这个tif文件被算法聚类成:2、3、4、5、6、7这六种类别。其中有一个是【水体】。

在这里插入图片描述
  右键 -【属性】
在这里插入图片描述
  在【符号系统】里面,点击【唯一值】,生成属性表。然后在点击【已分类】。生成一个属性表,【应用】-【确定】。
在这里插入图片描述
  点击【工具箱】找见【栅格转面】,生成shp文件,过程可能比较慢。

在这里插入图片描述
  在【转换工具】里面找见【栅格转面】

在这里插入图片描述
在这里插入图片描述
  新生成的shp文件会被加载进来
在这里插入图片描述
右键【打开属性表】,点击【编辑器】,开始编辑,删除不属于河流的部分。
在这里插入图片描述

详细说明:结合生成的shp文件的分级色彩图,比如上图,2, 2-4, 4-5 ,5-7分别代表不同的地貌,其中有一个代表【水体】,这个值 可以对应到【属性表】中的GRIDCODE变量上。

在这里插入图片描述
  这个可以多选,点击开始行(左边), 按住ctrl+shirft,再点击结尾【结尾行】,右键,删除即可,这个过程可能比较卡。最终,手动筛选。得出最终河流。右键-【导出数据】,生成shp。
  :文档修改过几次,所以图的内容和上面的没对上,流程是没有问题的。
在这里插入图片描述
  这上面还有很多碎的小块。要处理调。点击鼠标,拖住,画矩形,然后就被选中了,然后就可以删除了。
  在删除完噪声块之后,可根据需求,对shp文件进行编辑(比如:只想保留河流的边,则对shp编辑,删除多余结点,这个随后补充,或者自己百度如何删除结点)
  至此,预处理就完成。

   5. GlobalMapper转换文件

  打开GlobalMapper,代入shp,如图。
在这里插入图片描述
  定义空间坐标系。【tools】-【configue】-【projection】,定义好之后,点击ok
【file】-【export】-【export-vector/lidar-format】,选择delft3d|ldb,然后输出。这时就生成*.ldb文件了。

   6. Delft3D处理ldb

  带入附属文件ldb,按照下面截图操作,生成可编辑的文件。
  !!!一般情况下,ldb是闭合的线,但是在制作河流的时候,需要四条线围成矩形。因此,需要打开ldb文件,手动编辑成2条线(河网不行,没法切分)。然后重新带入。Ldb的数据结构比较简单,不做赘述。当然,假如前面已经编辑成河流边界线了,那么这里就不做多余的处理了。
在这里插入图片描述
  处理效果
在这里插入图片描述
做到这里,我想大家应该就知道怎么做了吧?

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值