亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? frmshortpath.frm

?? 用VB為二次開發語言
?? FRM
字號:
VERSION 5.00
Begin VB.Form FrmShortPath 
   Caption         =   "Form1"
   ClientHeight    =   2484
   ClientLeft      =   48
   ClientTop       =   348
   ClientWidth     =   3744
   LinkTopic       =   "Form1"
   ScaleHeight     =   2484
   ScaleWidth      =   3744
   StartUpPosition =   3  '窗口缺省
   Begin VB.CommandButton Command1 
      Caption         =   "Command1"
      Height          =   432
      Left            =   900
      TabIndex        =   0
      Top             =   300
      Width           =   1392
   End
End
Attribute VB_Name = "FrmShortPath"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
'NoNode1                    起始點編碼
'NoNode2                    結束點編碼
'nNode                      為網中最大的節點數
'LinkN(i)                   與i點相連Line個數
'LinkNi(i)                  與i點相連Line端點存放序號
'iLL=LinkNi(LL) - i + 1
'LinkNo(iLL)                與i點相連Line端點順序編號
Private Sub ShortPaths(NoNode1 As Integer, NoNode2 As Integer, nNode As Integer, LonNode() As Double, LatNode() As Double, NoNode() As Integer, LinkN() As Integer, LinkNi() As Integer, LinkNo() As Integer, NodeShortPath() As Integer, nNodeShortPath As Integer)
Dim II As Integer, I As Integer, J As Integer, LL As Integer, iLL As Integer, LLt As Integer
Dim iNode As Integer
Dim NodeCheck() As Boolean  '標記已經查過的點
Dim NodeUse() As Boolean    '標記已經作結果點用過的點
Dim NodeShortXmax() As Double
Dim TanYX As Double, TanYXmax As Double, TanXmax As Double, Xmax As Double
Dim Lon1 As Double, Lat1 As Double, Lon2 As Double, Lat2 As Double
Dim Lon1t As Double, Lat1t As Double
Dim LatNodeT As Double, LonNodeT As Double
Dim CosAngle As Double, SinAngle As Double
Dim StartNo As Integer, EndNo As Integer

Screen.MousePointer = 11

'Begin根據編碼,搜索序號
StartNo = 0
EndNo = 0
For I = 1 To nNode
    If (NoNode(I) = NoNode1) Then
        StartNo = I
    End If
    If (NoNode(I) = NoNode2) Then
        EndNo = I
    End If
    If (StartNo > 0 And EndNo > 0) Then Exit For
Next I
'End根據編碼,搜索序號
        
'Begin計算有關投影參數
Lon1 = LonNode(StartNo)
Lat1 = LatNode(StartNo)
Lon2 = LonNode(EndNo)
Lat2 = LatNode(EndNo)
CosAngle = (Lon2 - Lon1) / Sqr((Lon2 - Lon1) ^ 2 + (Lat2 - Lat1) ^ 2)
SinAngle = (Lat2 - Lat1) / Sqr((Lon2 - Lon1) ^ 2 + (Lat2 - Lat1) ^ 2)
Lon1t = CosAngle * Lon1 + SinAngle * Lat1
Lat1t = CosAngle * Lat1 - SinAngle * Lon1
'End計算有關投影參數

ReDim NodeCheck(1 To nNode), NodeUse(1 To nNode), NodeShortPath(1 To nNode), NodeShortXmax(1 To nNode)
For I = 1 To nNode
    NodeCheck(I) = False
    NodeUse(I) = False
Next I

'Begin設置初始搜索點
LL = StartNo
NodeCheck(LL) = True
NodeUse(LL) = True
NodeShortPath(1) = LL
NodeShortXmax(1) = 0
nNodeShortPath = 1
Xmax = Lon1t
'End設置初始搜索點
Do
    '先從與開始點相連的起點尋找
    TanYXmax = -1E+35
    TanXmax = -1E+35
    LLt = 0
    For I = 1 To LinkN(LL)          '以與LL點相連的起點的個數循環
        iLL = LinkNi(LL) + I - 1
        J = LinkNo(iLL)             '找出與LL點相連的起點的點號
        If (NodeUse(J) = False) Then
            LonNodeT = CosAngle * LonNode(J) + SinAngle * LatNode(J)
            LatNodeT = CosAngle * LatNode(J) - SinAngle * LonNode(J)
            If (Lat1t = LatNodeT) Then
                TanYX = 1E+35
            Else
                TanYX = Abs((LonNodeT - Lon1t) / (LatNodeT - Lat1t))
            End If
            If (TanYX > TanYXmax And LonNodeT > Xmax) Then
                TanYXmax = TanYX
                TanXmax = LonNodeT
                LLt = J
                NodeCheck(J) = True
            End If
        End If
    Next I
    
    If (LLt = 0) Then '無通路,退出一點在搜索
        If (nNodeShortPath <= 1) Then
            nNodeShortPath = 0
            Screen.MousePointer = 0
            MsgBox "搜索失敗!", vbOKOnly, "關于搜索最優路經"
            Exit Sub
        End If
        nNodeShortPath = nNodeShortPath - 1
        LL = NodeShortPath(nNodeShortPath)
        
        'Begin計算有關投影參數
        Lon1 = LonNode(LL)
        Lat1 = LatNode(LL)
        CosAngle = (Lon2 - Lon1) / Sqr((Lon2 - Lon1) ^ 2 + (Lat2 - Lat1) ^ 2)
        SinAngle = (Lat2 - Lat1) / Sqr((Lon2 - Lon1) ^ 2 + (Lat2 - Lat1) ^ 2)
        Lon1t = CosAngle * Lon1 + SinAngle * Lat1
        Lat1t = CosAngle * Lat1 - SinAngle * Lon1
        Xmax = Lon1t
        'End計算有關投影參數
    Else
        LL = LLt
        NodeUse(LL) = True
        Xmax = TanXmax
        
        nNodeShortPath = nNodeShortPath + 1
        NodeShortPath(nNodeShortPath) = LL
        NodeShortXmax(nNodeShortPath) = Xmax
        If (LL = EndNo) Then Exit Do
    End If
Loop
Screen.MousePointer = 0

MsgBox "搜索完畢!", vbOKOnly, "關于搜索最優路經"
End Sub
Private Function ShortPathsT(StartNo As Integer, EndNo As Integer, nNode As Integer, LinkN() As Integer, LinkNi() As Integer, LinkNo() As Integer, LinkDis() As Double) As Single
Dim II As Integer, I As Integer, J As Integer, LL As Integer, iLL As Integer
Dim iNode As Integer
Dim S As Single             '路徑和
Dim Min As Single
Dim NodeCheck() As Boolean  '標記已經查過的點
Dim NodeUse() As Boolean    '標記已經作結果點用過的點
Dim RS() As Single          '假設從起點到任一點的距離都為無窮大
Dim Result() As Single      '結果長度
Dim ResultNo() As Integer
Dim iResult As Integer
Dim No() As Integer
Dim MinPoint As Integer

ReDim NodeCheck(1 To nNode), NodeUse(1 To nNode)
ReDim RS(1 To nNode), Result(1 To nNode), ResultNo(1 To nNode)

For I = 1 To nNode
    NodeCheck(I) = False                    '標記未經查過的點。
    NodeUse(I) = False                      '標記未經作結果點用過的點
    RS(I) = 1E+38                           '假設從起點到任一點的距離都為無窮大
Next I

LL = StartNo                                '設置開始點。
NodeUse(LL) = True                          '標記開始點為真。即已經作結果點用過。
J = 0
For iNode = 1 To nNode
    '先從與開始點相連的起點尋找
    For I = 1 To LinkN(LL)                  '以與LL點相連的起點的個數循環
        iLL = LinkNi(LL) + I - 1
        iResult = LinkNo(iLL)               '找出與LL點相連的起點的點號
        If NodeCheck(iResult) = False Then  '如果沒經查過,則進行
            S = LinkDis(iLL) + Result(LL)   '找出長度并求和
            If NodeUse(iResult) = True Then '如果已經作為結果點判斷哪一個長
                If S <= RS(iResult) Then    '如果這一點到起點的長度比現在的路線長,替代
                    RS(iResult) = S
                    Result(iResult) = S     '設置到這點的最短路徑長度
                    ResultNo(iResult) = LL
                End If
            Else                            '如果上面的條件都不符合則進行下面的語句
                NodeCheck(iResult) = True
                RS(iResult) = S
                Result(iResult) = S
                ResultNo(iResult) = LL
                
                J = J + 1                   '每找到一個點加一,為了下面的判斷
                ReDim Preserve No(1 To J)   '從新定義數組并使其值為當前的點號
                No(J) = iResult
            End If
        End If
    Next I

    '設置最小為無窮大,最短路徑點為空
    Min = 1E+38
    MinPoint = 0
    
    '找出已經查過點中長度最短的點
    For I = iNode To J
        If RS(No(I)) < Min Then
            II = I
            Min = RS(No(I))
            MinPoint = No(I)
        End If
    Next I
    
    '如果沒有結果,即起點與終點沒有通路退出程序
    If Min = 1E+38 Then
        MsgBox "即起點與終點沒有通路!", vbOKOnly, "關于搜索最短路徑"
        Exit Function
    End If
    
    '將兩點互換,減少循環。
    No(II) = No(iNode)
    No(iNode) = MinPoint
    
    '標記已經作為結果點判斷過
    NodeUse(MinPoint) = True
    LL = MinPoint
    
    '判斷結果點是否等于終點,如果等于則已經找到最短路徑
    If MinPoint = EndNo Then Exit For
Next iNode

'返回最短路徑長度
ShortPaths = Result(EndNo)
MsgBox "最短路徑為:" + Format(ShortPaths, "#####0.0公里"), vbOKOnly, "關于路徑"
End Function

Private Sub Command1_Click()
    Dim ShortPath As Double
    Dim TheInFileNode As String, TheInFileLine As String
    Dim LonNode() As Double, LatNode() As Double, NoNode() As Integer, nNode As Integer
    Dim LineNode() As Integer, LineDis() As Double, nLineNode As Integer
    Dim LinkN() As Integer, LinkNi() As Integer, LinkDis() As Double, LinkNo() As Integer
    Dim StartNo As Integer, EndNo As Integer
    Dim ShortDis As Single
    Dim NodeShortPath() As Integer, nNodeShortPath As Integer
    Dim I As Integer
    
    TheInFileNode = "C:\MapInfo開發\819ShortPath\中國主干公路節點.MID"
    TheInFileLine = "C:\MapInfo開發\819ShortPath\中國主干公路線.MID"
    Call ReadNode(TheInFileNode, TheInFileLine, LonNode, LatNode, NoNode, nNode, LineNode, LineDis, nLineNode, LinkN, LinkNi, LinkDis, LinkNo)

    StartNo = 119
    EndNo = 457
    Call ShortPaths(StartNo, EndNo, nNode, LonNode, LatNode, NoNode, LinkN, LinkNi, LinkNo, NodeShortPath, nNodeShortPath)
    
    For I = 1 To nNodeShortPath
        Debug.Print I, NodeShortPath(I), NoNode(NodeShortPath(I))
    Next I
End Sub
'讀節點數據
Private Sub ReadNode(TheInFileNode As String, TheInFileLine As String, LonNode() As Double, LatNode() As Double, NoNode() As Integer, nNode As Integer, LineNode() As Integer, LineDis() As Double, nLineNode As Integer, LinkN() As Integer, LinkNi() As Integer, LinkDis() As Double, LinkNo() As Integer)
Dim I As Integer, J As Integer, N As Integer, NN As Integer
Dim LineTemp As String
Dim Lon1 As Double, Lon2 As Double, Lat1 As Double, Lat2 As Double
Dim Node1 As Integer, Node2 As Integer
Dim NodeNo1 As Integer, NodeNo2 As Integer
Dim LineNodeNo1() As Integer, LineNodeNo2() As Integer

'Begin讀節點數據
nNode = 0
Open TheInFileNode For Input As #1
Do While Not EOF(1)
    Line Input #1, LineTemp
    nNode = nNode + 1
Loop
Close (1)

ReDim LonNode(1 To nNode), LatNode(1 To nNode), NoNode(1 To nNode)
Open TheInFileNode For Input As #1
For I = 1 To nNode
    Input #1, LatNode(I), LonNode(I), LineTemp
    NoNode(I) = Val(LineTemp)
Next I
Close (1)
'End讀節點數據


'Begin讀Line數據
nLineNode = 0
Open TheInFileLine For Input As #1
Do While Not EOF(1)
    Line Input #1, LineTemp
    nLineNode = nLineNode + 1
Loop
Close (1)

ReDim LineNode(1 To 2, 1 To nLineNode), LineDis(1 To nLineNode)
ReDim LineNodeNo(1 To 2, 1 To nLineNode)

Open TheInFileLine For Input As #1
For I = 1 To nLineNode
    Input #1, LineNode(1, I), LineNode(2, I), LineDis(I)
Next I
Close (1)
'End讀Line數據

'Begin計算距離
For I = 1 To nLineNode
    'Begin搜索Line對應節點
    Node1 = LineNode(1, I)
    Node2 = LineNode(2, I)
    NodeNo1 = 0
    NodeNo2 = 0
    For J = 1 To nNode
        If (NoNode(J) = Node1) Then
            NodeNo1 = J
        End If
        If (NoNode(J) = Node2) Then
            NodeNo2 = J
        End If
        If (NodeNo1 > 0 And NodeNo2 > 0) Then Exit For
    Next J
    'End搜索Line對應節點
    If (NodeNo1 = 0 Or NodeNo2 = 0) Then
        MsgBox "節點" + Format(NodeNo1, "####0 ") + Format(NodeNo2, "####0") + "不存在", vbOKOnly, "關于節點"
    End If
    
    LineNodeNo(1, I) = NodeNo1
    LineNodeNo(2, I) = NodeNo2
    
    'Begin開始計算距離
    Lon1 = LonNode(NodeNo1)
    Lat1 = LatNode(NodeNo1)
    Lon2 = LonNode(NodeNo2)
    Lat2 = LatNode(NodeNo2)
    If (LineDis(I) <= 0) Then
        LineDis(I) = 111.199 * Sqr((Lat1 - Lat2) ^ 2 + ((Lon1 - Lon2) * Cos((Lat1 + Lat2) * 0.00872665)) ^ 2)
    End If
    'End開始計算距離
Next I
'End計算距離

ReDim LinkN(1 To nNode), LinkNi(1 To nNode + 1), LinkDis(1 To nLineNode * 3), LinkNo(1 To nLineNode * 3)
'Begin開始搜索與節點相連的Line
LinkNi(1) = 1
NN = 0
For I = 1 To nNode
    N = 0
    For J = 1 To nLineNode
        If (LineNode(1, J) = NoNode(I)) Then
            N = N + 1
            
            NN = NN + 1
            LinkDis(NN) = LineDis(J)
            LinkNo(NN) = LineNodeNo(2, J)
        ElseIf (LineNode(2, J) = NoNode(I)) Then
            N = N + 1
            
            NN = NN + 1
            LinkDis(NN) = LineDis(J)
            LinkNo(NN) = LineNodeNo(1, J)
        End If
    Next J
    LinkN(I) = N
    LinkNi(I + 1) = LinkNi(I) + N
    If (N = 0) Then
        MsgBox "節點" + Format(NoNode(I), "###0") + "無線路!", vbOKOnly, "關于搜索與節點相連的線路"
    End If
Next I
'End開始搜索與節點相連的Line
End Sub

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99免费精品视频| 日韩一区二区在线播放| 亚洲国产成人av网| 精品国产乱码久久| 在线观看不卡一区| 精一区二区三区| 一区二区三区国产豹纹内裤在线| 69久久99精品久久久久婷婷| 91在线小视频| 欧美aa在线视频| 在线免费观看日本一区| 国产成人在线免费观看| 亚洲香肠在线观看| 中文字幕在线观看不卡| 日韩精品中午字幕| 欧美日韩国产精品自在自线| kk眼镜猥琐国模调教系列一区二区| 奇米精品一区二区三区四区| 亚洲曰韩产成在线| 亚洲欧洲日韩一区二区三区| 久久久无码精品亚洲日韩按摩| 欧美日韩精品一区二区三区 | 欧美激情一区二区三区在线| 777午夜精品视频在线播放| 色综合久久中文综合久久97| 国产精品影视在线| 极品美女销魂一区二区三区| 视频一区二区国产| 亚洲一区视频在线观看视频| 国产精品对白交换视频| 国产欧美一区二区在线| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 精品动漫一区二区三区在线观看| 色狠狠综合天天综合综合| zzijzzij亚洲日本少妇熟睡| 国产电影一区在线| 久久免费美女视频| 国产精品一二三区在线| 9l国产精品久久久久麻豆| 欧美性做爰猛烈叫床潮| 欧美不卡视频一区| 中文乱码免费一区二区 | 国产v日产∨综合v精品视频| 99精品视频免费在线观看| 欧美精品成人一区二区三区四区| www欧美成人18+| 亚洲免费观看在线观看| 免费高清在线视频一区·| 国产精品18久久久久久久久| 91在线免费看| 日韩欧美一区在线| 中文字幕一区二区三区蜜月 | 欧美丝袜丝交足nylons图片| 久久你懂得1024| 亚洲午夜一区二区| 国产一区二区三区国产| 欧美中文字幕久久| 久久精品一区八戒影视| 亚洲综合一二区| 国产一二三精品| 欧美在线观看18| 久久久精品黄色| 日日摸夜夜添夜夜添国产精品| 国产99久久久国产精品| 欧美一区二区精品在线| 亚洲色图一区二区| 国产一区二区三区在线观看精品| 欧美日韩国产片| 综合欧美一区二区三区| 韩国视频一区二区| 欧美日韩在线精品一区二区三区激情| 国产视频在线观看一区二区三区| 亚洲成av人**亚洲成av**| 成人一区二区在线观看| 日韩欧美成人一区二区| 一区二区三区不卡在线观看| 亚洲v中文字幕| 91视频国产资源| 久久欧美一区二区| 奇米一区二区三区| 欧美日韩国产在线观看| 自拍偷自拍亚洲精品播放| 国产一区二区三区黄视频| 正在播放一区二区| 亚洲香肠在线观看| 色狠狠一区二区| 国产精品的网站| 成人在线综合网| 国产女主播一区| 国内精品自线一区二区三区视频| 欧美日本韩国一区二区三区视频| 亚洲卡通欧美制服中文| www.一区二区| 国产欧美一区视频| 国产成人在线观看免费网站| 精品99一区二区| 久久99九九99精品| 日韩欧美精品三级| 麻豆精品久久久| 日韩欧美一二区| 日韩成人午夜精品| 欧美一级二级在线观看| 奇米精品一区二区三区在线观看一 | 亚洲va欧美va国产va天堂影院| 色综合天天综合| 日韩专区在线视频| 欧美色视频在线| 亚洲高清免费视频| 国产激情精品久久久第一区二区 | 婷婷夜色潮精品综合在线| 欧美少妇bbb| 亚洲国产精品久久艾草纯爱| 欧美日韩一区二区在线观看视频| 亚洲最新视频在线播放| 欧美三级电影网站| 日韩精品色哟哟| 日韩欧美一区二区视频| 麻豆一区二区三区| 2024国产精品| 高潮精品一区videoshd| 国产精品成人一区二区艾草| 99re这里只有精品首页| 一区二区三区精品久久久| 欧美图片一区二区三区| 欧美a一区二区| 国产亚洲精品福利| aa级大片欧美| 亚洲一区二区在线观看视频| 欧美美女黄视频| 久久精品99国产精品| 久久精品一级爱片| 成+人+亚洲+综合天堂| 一区二区免费在线| 欧美日韩高清不卡| 美美哒免费高清在线观看视频一区二区 | 91福利在线看| 日本三级亚洲精品| 国产亚洲自拍一区| 色综合久久久久| 成人app软件下载大全免费| 欧美四级电影网| 国产主播一区二区| 亚洲伦在线观看| 欧美一区二区三区成人| 国产91色综合久久免费分享| 91精品欧美一区二区三区综合在| 国产精品久久影院| 岛国一区二区在线观看| 中文字幕一区二区三区四区不卡| 日韩一级在线观看| 欧美日韩精品免费| 欧美伊人久久久久久久久影院 | 丝袜美腿亚洲色图| 国产精品1区2区3区在线观看| 欧美精品丝袜久久久中文字幕| 国产日韩高清在线| 午夜欧美电影在线观看| 99久久夜色精品国产网站| 久久色视频免费观看| 亚洲第一福利一区| 91麻豆蜜桃一区二区三区| 26uuu欧美| 国产欧美精品一区二区三区四区| 欧美日韩国产高清一区二区三区 | 国产三级欧美三级日产三级99| 色综合久久综合网| 亚洲第一福利一区| 亚洲精品成人少妇| 日本一区二区免费在线| 欧美电视剧免费全集观看| 成人av网址在线观看| 国产91精品一区二区| 亚洲成人av一区二区三区| 国产精品入口麻豆原神| 在线观看91av| 欧美日本在线播放| 日本乱码高清不卡字幕| 国产精品综合二区| 同产精品九九九| 国产欧美精品日韩区二区麻豆天美 | 日韩电影在线观看电影| 久久综合久久99| 91麻豆精品91久久久久久清纯| 成人爽a毛片一区二区免费| 亚洲国产毛片aaaaa无费看 | 亚洲国产电影在线观看| 成人av在线播放网址| 日韩精品视频网站| 亚洲一区在线观看免费观看电影高清| 综合分类小说区另类春色亚洲小说欧美| 91福利资源站| 欧美日韩视频在线一区二区| 国内精品不卡在线| 蜜臀av一区二区在线观看| 国产精品免费网站在线观看| 制服丝袜日韩国产| 成人伦理片在线| 一区二区三区四区亚洲| 欧美日韩成人综合| 国产91在线观看|