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

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

?? frmshortpath.frm

?? 該系統能實現VB+Mapinfo的基本功能
?? 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一区二区三区免费野_久草精品视频
国产精品电影院| 国产乱子伦视频一区二区三区| 亚洲欧美另类小说视频| 国产精品伦一区| 国产精品美女久久久久久 | 亚洲夂夂婷婷色拍ww47 | 91免费看片在线观看| 91在线精品一区二区| 97精品久久久久中文字幕 | 中文字幕乱码亚洲精品一区| 中文字幕不卡在线观看| 国产精品毛片久久久久久久| 亚洲色图一区二区三区| 亚洲一区二区五区| 秋霞午夜av一区二区三区| 国产专区欧美精品| 国产jizzjizz一区二区| www.成人在线| 欧美调教femdomvk| 日韩一区二区三区电影| 国产亚洲一区字幕| 亚洲精品网站在线观看| 日本中文字幕一区| 国产精品亚洲午夜一区二区三区 | 麻豆精品视频在线观看免费| 国精产品一区一区三区mba桃花| 粉嫩av一区二区三区粉嫩| 91色在线porny| 在线成人av影院| 久久精品人人做| 亚洲精品一二三区| 久久激情五月激情| kk眼镜猥琐国模调教系列一区二区| 一本大道综合伊人精品热热| 日韩一级黄色大片| 国产精品不卡一区| 日本伊人午夜精品| 成人动漫一区二区| 欧美一区三区二区| 国产精品国产三级国产普通话99 | 国产精品久久久久久福利一牛影视 | 91在线视频免费观看| 欧美日韩国产一级片| 久久五月婷婷丁香社区| 亚洲综合区在线| 国产老妇另类xxxxx| 欧美三级资源在线| 久久久久免费观看| 舔着乳尖日韩一区| 成人午夜免费视频| 日韩午夜av一区| 亚洲色图丝袜美腿| 国产麻豆精品视频| 欧美精品 国产精品| 国产精品视频免费| 精品在线播放免费| 欧美日韩精品一区二区天天拍小说| 国产亚洲一区二区三区在线观看 | 不卡av免费在线观看| 日韩免费高清视频| 亚洲一级不卡视频| 99久久久国产精品免费蜜臀| 日韩欧美亚洲一区二区| 亚洲一区二区黄色| 99国产精品久| 国产亚洲一区二区三区| 石原莉奈在线亚洲二区| 色av综合在线| 国产精品毛片久久久久久久| 黄页网站大全一区二区| 欧美精品久久久久久久多人混战| 亚洲欧美日韩电影| 国产成人免费视频网站| 日韩一区二区免费在线观看| 一区二区三区美女| 99国产精品一区| 国产精品天美传媒沈樵| 国产一区二区精品久久91| 日韩一级高清毛片| 日本欧美在线看| 欧美日韩国产综合草草| 亚洲午夜久久久久久久久电影院| 99久久免费精品高清特色大片| 国产清纯在线一区二区www| 久草中文综合在线| 91精品国产91综合久久蜜臀| 亚洲国产日韩综合久久精品| 91丨九色丨尤物| 亚洲欧美日韩系列| 一本大道av伊人久久综合| 中文字幕一区二区在线播放| 成人午夜视频在线观看| 国产日韩综合av| 国产精品一级在线| 精品sm捆绑视频| 韩国v欧美v亚洲v日本v| 26uuu国产在线精品一区二区| 蜜臀av国产精品久久久久| 日韩免费一区二区| 韩国在线一区二区| 久久久三级国产网站| 国产一区二区三区久久悠悠色av | 久久国产视频网| 日韩欧美视频一区| 理论片日本一区| 精品国产91乱码一区二区三区 | 成人app在线| 国产精品久久久久久久久图文区 | 91亚洲国产成人精品一区二三 | 国产伦精品一区二区三区在线观看| 日韩精品在线看片z| 精品一区二区三区欧美| 2021国产精品久久精品| 国产乱码精品一区二区三| 国产精品妹子av| 色噜噜久久综合| 午夜精品久久久久久不卡8050 | 喷水一区二区三区| 精品粉嫩超白一线天av| 成人永久免费视频| 成人欧美一区二区三区| 欧美日韩精品欧美日韩精品一| 三级在线观看一区二区| 亚洲精品一区二区三区精华液| 国产精品99久久久久久久vr| 亚洲天堂久久久久久久| 欧美日韩一区二区三区不卡| 美女在线观看视频一区二区| 国产亚洲欧美色| 色哟哟一区二区| 免费高清成人在线| 国产精品色婷婷| 欧美日韩国产免费一区二区| 奇米影视一区二区三区| 日本一区二区免费在线 | 亚州成人在线电影| 欧美成人a视频| av在线不卡观看免费观看| 亚洲福中文字幕伊人影院| 日韩欧美另类在线| 99视频精品全部免费在线| 亚洲va欧美va天堂v国产综合| 精品国内二区三区| 色999日韩国产欧美一区二区| 琪琪久久久久日韩精品| 最新久久zyz资源站| 日韩午夜在线观看| 91亚洲男人天堂| 蜜桃免费网站一区二区三区| 国产精品久久久久国产精品日日| 色中色一区二区| 精品一二三四在线| 亚洲精品高清在线| 久久中文娱乐网| 欧美影片第一页| 国产成a人亚洲| 午夜a成v人精品| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 成人av集中营| 蜜桃久久久久久久| 亚洲在线观看免费视频| 久久日韩粉嫩一区二区三区| 在线观看成人免费视频| 国产美女精品人人做人人爽| 亚洲高清一区二区三区| 中文字幕中文乱码欧美一区二区| 日韩一区国产二区欧美三区| 色先锋aa成人| 岛国一区二区在线观看| 日本欧美大码aⅴ在线播放| 一区二区三区高清| 欧美韩日一区二区三区| 日韩天堂在线观看| 欧美日韩免费电影| 色噜噜久久综合| 99久久99久久精品国产片果冻| 国产真实乱对白精彩久久| 午夜视频久久久久久| 亚洲你懂的在线视频| 国产精品第13页| 久久久久88色偷偷免费| 精品伦理精品一区| 欧美日韩的一区二区| 在线观看精品一区| 色婷婷av一区| 91丝袜美腿高跟国产极品老师 | 视频一区视频二区中文字幕| 亚洲日本va午夜在线影院| 国产农村妇女精品| 久久先锋资源网| 精品国产乱码久久久久久影片| 日韩一级视频免费观看在线| 欧美精品一级二级| 欧美三级三级三级| 欧美性视频一区二区三区| 欧美性色黄大片| 欧美日韩一级二级三级| 欧美日韩中字一区| 欧美久久久久久久久久| 精品视频免费在线|