ImageVerifierCode 换一换
格式:DOC , 页数:13 ,大小:30.13KB ,
资源ID:2400013      下载积分:8 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2400013.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(mapbasic程序有详细的解释.doc)为本站上传会员【a199****6536】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

mapbasic程序有详细的解释.doc

1、 河道比降计算程序mapinfo =================================================================== ' 项目:河道比降计算 ' 作者:崔军明 ' 版本:2.2 ' 日期:2009-12-23 ' ' 使用说明: '   1、新建图层,绘制主河道(也可以复制水系,然后整理出主河道)。 '   2、确定高程的单位(米/分米)。如果与主河道相交的等高线的高程单位不统一,则将其修改一致。 '   3、运行此程序,打开需要的表,设置计算选项,计算河道比降。 '   4、如果遇到错误,根据提示将河道上的节点吸

2、附在等高线上, 并保存河道表(Stream)。 '     关闭全部表(不必保存),重新运行程序。 '   5、程序运行结束后,保存计算结果,然后浏览比降计算表(Gradient)。 '     (1) 复查高程列(Elev)的单位是否统一,确认设置计算选项时所作的选择是正确的。 '   6、注意,计算某个流域的河道比降时,只需打开对应部分的等高线图层。 如果等高线图层太大,会大大影响计算速度。 '=================================================================== '-----------------------

3、 'MapBasic的调试方法: ' (1) 在出错或需要的地方,使用Note(或Print)语句将变量的值显示出来。 ' (2) 在MapInfo中,打开MapBasic窗口,回车就会执行当前语句。 ' 'MapBasic中SQL的特性: ' (1) Delete 语句,执行的是无条件删除,即删除表中的全部记录。它不像SQL Server的SQL语句,可以加Where限制从句。 '     它的Where Rowid = ? 子句用处不大! ' (2) Upda

4、te 语句,执行的也是无条件更新,默认情况下,它会更新全部记录。但是,Update语句可以通过视图更新,这就 '     等价于使用了Where子句。如:Select * From Table Where column = ? , Update Selection Set Column = Value, '     参考MapBasic帮助。 '--------------------------------------------------------------------------------- Include "MAPBASIC.DEF" Declare Sub Main

5、 Declare Sub OpenTable Declare Sub Init Declare Sub SetupCalcOption Declare Sub WriteElev2Gradient Declare Sub AddCrossingOnStream Declare Sub GetReachLen Declare Sub WriteLen2Gradient Declare Function IsDownStream As Logical Declare Function LocateCrossing(L As Object, Li As Object, ByVal

6、C As Integer) As Integer Declare Function CalcGradient As Float Declare Sub SaveGradient(ByVal J As Float) Global EV As Integer    '等高线的高程,用来查询当前正在处理的等高线,便于找到没有吸附的等高线 Global ELEV_UNITS As Integer '高程单位选项值 '---------------------------------------- '计算河道比降 '-------------------------------------

7、 Sub Main Dim J As Float    '河道比降 Call OpenTable    '打开相关表 Call Init      '初始化 Call SetupCalcOption   '设置计算选项 Call WriteElev2Gradient '查询和河道相交的等高线并将其写入比降计算表 Call AddCrossingOnStream '在河道上添加交点节点 Call GetReachLen    '获取河段长度,并将其存入河段长度临时表 Call WriteLen2Gradient   '将河段长度导入比降计算表中 J = CalcGrad

8、ient()    '计算河道比降 Call SaveGradient(J)   '保存计算结果 End Sub '---------------------------------------- '打开河道、等高线和比降计算表 '---------------------------------------- Sub OpenTable Dim StreamFileName As String Dim ContourFileName As String Dim GradientFileName As String '弹出对话框,打开相关表 StreamFileName

9、 FileOpenDlg("", "", "TAB", "打开主河道") ContourFileName = FileOpenDlg("", "", "TAB", "打开等高线") GradientFileName = FileOpenDlg("", "", "TAB", "打开比降计算表") Open Table StreamFileName As Stream Open Table ContourFileName As Contour Open Table GradientFileName As Gradient End Sub '---------------------

10、 '初始化 '---------------------------------------- Sub Init 'Dim MapWinId As Integer   '地图窗口ID 'Dim MapCoordSys As String   '地图坐标系(投影) '设置坐标系(投影) 'Map From Stream 'MapWinId = FrontWindow() 'MapCoordSys = MapperInfo(MapWinId, MAPPER_INFO_COORDSYS_CLAUSE) 'Set CoordSys Earth

11、 ' Projection MapCoordSys 'Close Window MapWinId '设置长度单位为米 Set Distance Units "m" '创建河段长度临时表 Create Table ReachLen (Length Float) Open Table ReachLen End Sub '----------------------------------------------- '设置计算选项 '----------------------------------------------- Sub SetupCalcOption '定义了

12、河道起点和高程单位两个选项 Dialog    Title "计算选项"    Control StaticText     Title "高程单位:"    Control RadioGroup     Title "米;分米"     Into ELEV_UNITS    Control OKButton     Title "确定"    Control CancelButton     Title "取消" '如果取消设置或关闭了设置窗口,则退出程序 If Not CommandInfo(CMD_INFO_DLG_OK) Then    Drop Table

13、 ReachLen    Close Table Stream    Close Table Contour    Close Table Gradient    End Program End If End Sub '-------------------------------------------------- '查询和河道相交的等高线并将其插入比降计算表中 '-------------------------------------------------- Sub WriteElev2Gradient Dim E As Integer   '高程 Dim o

14、Line As Object '等高线对象 '清空河段表中的记录 Delete From Gradient '查询和主河道相交的等高线 Select contour.Elev, contour.Obj From contour, Stream    Where contour.Obj Intersects Stream.Obj    Order By contour.Elev DESC    Into Intersection '将高程值和等高线对象都写入比降计算表中 Fetch First From Intersection Do While Not EOT(Inters

15、ection)    E = Intersection.Elev    oLine = Intersection.Obj    Insert Into Gradient (Elev, Obj) Values (E, oLine)    Fetch Next From Intersection Loop '保存比降计算表 Commit Table Gradient End Sub '------------------------------------------------- '在河道上添加和等高线的交点节点 ' OverlayNodes() 函数返回添加了交点的折线对

16、象(但是该函数有误差,有时添加的节点不能完全吸附) '------------------------------------------------- Sub AddCrossingOnStream Dim S As Object '河道折线对象 Dim C As Object '与河道相交的等高线对象 Dim E As Integer '高程值,作为更新等高线的条件 '在河道和等高线上添加相交节点 Fetch First From Gradient Do While Not EOT(Gradient)    '在河道上添加相交节点    S = OverlayNodes

17、Stream.Obj, Gradient.Obj) '    Update Stream Set Obj = S    '在等高线上也添加一个相交节点    C = OverlayNodes(Gradient.Obj, Stream.Obj)    E = Gradient.Elev    Select * From Gradient Where Elev = E    Update Selection Set Obj = C    Fetch Next From Gradient Loop End Sub '-------------------------------

18、 '获取河段长度,并将其存入河段长度临时表中 '关于ExtractNodes()函数的说明:begin_node 要小于 end_node '-------------------------------------------------- Sub GetReachLen Dim S As Object   '河道 Dim N As Integer   '河道上的节点数 Dim I, C As Integer '循环控制变量 Dim Line1 As Object '等高线1 Dim Line2 As Object '等高线2 Dim

19、 B, E As Integer '河段的首尾节点序号 Dim R As Object   '河段对象 Dim L As Float   '河段长度 '清空河段长度表 Delete From ReachLen '获取河道对象及其节点数 Fetch First From Stream S = Stream.Obj N = ObjectInfo(S, OBJ_INFO_NPNTS) '统计等高线条数,控制循环 Select Count(*) From Gradient C = Selection.Col1 '河道起点位置不同,计算河段长度时的起止顺序就不同 Dim IsD

20、own As Logical        '是否顺流而下 IsDown = IsDownStream() If IsDown Then         '如果河道起点从源头开始    '计算河段长度并将其插入河段长度表    Fetch First From Gradient    EV = Gradient.Elev        '用来寻找没有吸附的等高线    Line1 = Gradient.Obj       '第一条等高线对象    E = LocateCrossing(S, Line1, N)     '河道与第一条等高线的交点位置    For I = 1 T

21、o C - 1     B = E         '首节点序号       Fetch Next From Gradient     EV = Gradient.Elev       '用来寻找没有吸附的等高线     Line2 = Gradient.Obj      '下一条等高线     E = LocateCrossing(S, Line2, N)    '尾节点序号,河道与下一条等高线的交点位置     R = ExtractNodes(S, 1, B, E, FALSE)   '抽取河段,按 B -> E     L = ObjectLen(R, "m")     

22、  '获取河段长度       Insert Into ReachLen (Length) Values (L) '将河段长保存在河段长度临时表中    Next Else            '如果河道起点从断面处开始    '计算河段长度并将其插入河段长度表    Fetch First From Gradient    EV = Gradient.Elev        '用来寻找没有吸附的等高线    Line1 = Gradient.Obj       '第一条等高线对象    E = LocateCrossing(S, Line1, N)     '河道与第一条等

23、高线的交点位置    For I = 1 To C - 1     B = E         '首节点序号       Fetch Next From Gradient     EV = Gradient.Elev       '用来寻找没有吸附的等高线     Line2 = Gradient.Obj      '下一条等高线     E = LocateCrossing(S, Line2, N)    '尾节点序号,河道与下一条等高线的交点位置     R = ExtractNodes(S, 1, E, B, FALSE)   '抽取河段,按 E -> B     L =

24、 ObjectLen(R, "m")       '获取河段长度       Insert Into ReachLen (Length) Values (L) '将河段长保存在河段长度临时表中    Next   End If End Sub '-------------------------------------------------- '判断河道的起点是否在源头 '-------------------------------------------------- Function IsDownStream As Logical Dim S As Object  

25、'河道 Dim N As Integer   '河道上的节点数 Dim Line1 As Object '等高线1 Dim Line2 As Object '等高线2 Dim B, E As Integer '河段的首尾节点序号 '获取河道对象及其节点数 Fetch First From Stream S = Stream.Obj N = ObjectInfo(S, OBJ_INFO_NPNTS) '获取河道与第一条等高线的交点的序号 Fetch First From Gradient EV = Gradient.Elev       '用来寻找没有吸附的等高线 Lin

26、e1 = Gradient.Obj      '第一条等高线对象 B = LocateCrossing(S, Line1, N)    '河道与第一条等高线的交点位置 '获取河道与第二条等高线的交点的序号 Fetch Next From Gradient EV = Gradient.Elev       '用来寻找没有吸附的等高线 Line2 = Gradient.Obj      '下一条等高线 E = LocateCrossing(S, Line2, N)    '尾节点序号,河道与下一条等高线的交点位置 IsDownStream = B < E End Function

27、 '-------------------------------------------------- '功能:寻找交点的位置(节点序号) '参数: L 河道对象 '   Li 等高线对象 '   C 河道的节点数 '关于IntersectNodes()函数的说明: ' 对于第三个参数points_to_include,INCL_COMMON 表示相交于节点;INCL_CROSSINGS 表示相交于线段;INCL_ALL 表示两种情况 '-------------------------------------------------- Function LocateCr

28、ossing(L As Object, Li As Object, ByVal C As Integer) As Integer Dim P As Object     '两条线的交点 Dim Px, Py As Float    '交点坐标 Dim I As Integer Dim Lx, Ly As Float    '河道线上的节点坐标 OnError Goto OnExceptionDo   '如果河道与等高线没有吸附,则抛出异常 '获取两条折线的交点 p = IntersectNodes(L, Li, INCL_COMMON) '得到交点的坐标 Px = Obje

29、ctNodeX(P, 1, 1) Py = ObjectNodeY(P, 1, 1) '寻找交点的位置(在河道的第几个节点上,折线节点的编号按创建顺序递增) For I = 1 To C    Lx = ObjectNodeX(L, 1, I)    Ly = ObjectNodeY(L, 1, I)    If (Lx = Px) Then     If (Ly = Py) Then Exit For End If    End If Next   LocateCrossing = I EndException:        '异常处理 Exit Function

30、 OnExceptionDo: Drop Table ReachLen     '销毁河段长度临时表 Map From Contour      '打开等高线图层 Add Map Layer Stream     '添加河道图层 set map redraw off Set Map Layer "Stream" Editable On '使河道图层可编辑 set map redraw on Select * From Contour Where Elev = EV Note "请把河道吸附在图中所示等高线上,并保存Stream表。" Resume EndException

31、'0    '0,指的是尝试重新执行刚才出错的语句。因找不到中断的办法,只好放弃。 End Function '---------------------------------------- '将河段长度再导入比降计算表中 '---------------------------------------- Sub WriteLen2Gradient Dim E As Integer Dim L As Float '将河段长度一一写入比降计算表中 Fetch First From Gradient    '游标指向比降计算表的第一条记录 Fetch First From R

32、eachLen    '游标指向河段长度表的第一条记录 Do While Not EOT(ReachLen)    E = Gradient.Elev    L = ReachLen.Length    Select * From Gradient Where Elev = E    Update Selection Set Len = L    Fetch Next From Gradient    Fetch Next From ReachLen Loop '销毁河段长度临时表 Drop Table ReachLen '保存比降计算表 Commit Table Gr

33、adient End Sub '---------------------------------------- '功能:计算河道比降 '算法:统计河道总长,计算河道比降 '---------------------------------------- Function CalcGradient As Float Dim L As Float '河道总长 Dim C As Integer '总记录数 Dim I As Integer Dim H1 As Integer '河段上断面河底高程 Dim H2 As Integer '河段下断面河底高程 Dim L1 As

34、 Float '河段长度 Dim J As Float '河道比降 '统计河道总长和河段断面的数量(河段数量加1) Select Sum(Len), Count(*) From Gradient L = Selection.Col1 C = Selection.Col2 '计算河道比降 J = 0 Fetch First From Gradient For I = 1 to C - 1    L1 = Gradient.Len    H1 = Gradient.Elev    Fetch Next From Gradient    H2 = Gradient.E

35、lev    J = J + (H1 + H2)*L1   Next J = (J - 2 * H2 * L)/L^2 '如果高程单位为分米,则J/10 If ELEV_UNITS = 2 Then    J = J / 10 End If CalcGradient = J End Function '----------------------------------------- '保存河道比降 '----------------------------------------- Sub SaveGradient(ByVal J As Float) Not

36、e "河道比降为:" + Str$(J) '浏览比降计算表 Browse * From Gradient '将结果存入河道比降表中 Dim FN As String FN = FileSaveAsDlg("","","TAB","保存计算结果") Create Table 河道比降    (河道比降 Float)    File FN '将河道比降值保存在表中 Insert Into 河道比降 (河道比降) Values (J) '保存河道比降表 Commit Table 河道比降 '浏览河道比降值 Browse * From 河道比降 End Sub THANKS !!! 致力为企业和个人提供合同协议,策划案计划书,学习课件等等 打造全网一站式需求 欢迎您的下载,资料仅供参考 -可编辑修改-

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服