网站建设报告 商业价值,wordpress如何设置头像,温州制作网站软件,网站做弹窗广告先看看代码运行结果#xff08;红色部分表示河流中心线#xff0c;黑色表示河流两岸#xff01;#xff09;#xff1a; 注#xff1a;
1. 由于河流两岸的坐标不是等距采样#xff0c;所以无法保证100%准确#xff0c;只要按着要求处理河岸坐标数据Shape文件#xff…先看看代码运行结果红色部分表示河流中心线黑色表示河流两岸 注
1. 由于河流两岸的坐标不是等距采样所以无法保证100%准确只要按着要求处理河岸坐标数据Shape文件能保证95%以上能和真正的中心线重合
2. 一条河流计算一次支流另行计算
3.计算中心线同样适合公路且效果更好。
本程序主要有两个难点 1. 提取中心线 2. 两侧目标点对应匹配
解决方法 1. 利用三角网格方法计算中心线提示三角形侧边中点连线平行于底边因此只需要计算侧边中点 2. 可以通过重采样的方式来实现
部分matlab代码
%说明
% 根据河流两岸的一些列点坐标2D计算中心线计算河流蜿蜒度
% 作用根据河流两岸的一些列点坐标2D计算中心线计算河流蜿蜒度
% 作者胡礼珍
% 单位厦门大学联合遥感接收站
% 邮件hulizhenxmu.edu.cn
% Q Q249***701
clear;close all;clc;
[FileName,PathName,index] uigetfile({*.shp},shp文件读取,MultiSelect,off);
if index 0errordlg(Shape输入错误请重新输入,输入错误);return; %终止运行程序
end
% 由于数据的原因不建议批量处理
S shaperead([PathName,FileName]); % 读取Shape文件
if length(S) 2 % 若线段个数等于2%% Result_Data River_Shoreline(S)./1000; % 计算首尾位移和路程line1 [S(1).X,S(1).Y;]; % 第一条岸线line2 [S(2).X,S(2).Y;]; % 第二条岸线% line1和line2必须首尾一直line2 line2(end:-1:1,:); % line 翻转根据实际而定% Centerline Center_Line(line1,line2); % 计算中心线[Centerline,line1,line2] Center_Line(line1,line2); % 计算中心线%% 计算路程和路径% 第一行表示位移长度剩下的每行表示一条线段的长度Result_Data sqrt(sum((Centerline-[Centerline(end,:);Centerline(1:end-1,:)]).^2,2));Result_Data [Result_Data(1,:),sum(Result_Data(2:end,:))]./1000; % [位移,路程]Meanderness Result_Data(1,2)/Result_Data(1,1); % 蜿蜒度
else % 若线段个数不等于2errordlg(Shape输入错误请重新处理Shape文件,输入错误);return; % 终止运行程序
end%% 显示
figure(Name,位置)
plot(line1(:,1),line1(:,2),k)
hold on
plot(line2(:,1),line2(:,2),k)
plot(Centerline(:,1),Centerline(:,2),r)
hold off
注核心部分代码就不公布了自行下载。
完整代码地址matlab-计算河流蜿蜒度和提取中心线-其它文档类资源-CSDN下载
完整代码中有Word讲解完整的程序以及测试的代码
也可以根据我的提示自己编写代码这样更能提高写代码能力。 路漫漫其修远兮吾将上下而求索