Luận án Nghiên cứu cơ sở dữ liệu địa chính và bài toán cập nhật biến động đất đai ở Việt Nam
Trước đây ở Việt Nam bản đồ địa chính được đo vẽ theo công nghệ thủ
công để thành lập ra bản đồ giấy, bản đồ giải thửa, bản đồ đo ở tọa độ giả
định. Sau năm 1995 bản đồ địa chính được lập theo công nghệ số và được
biên tập bằng nhiều phần mềm khác nhau như Famis, CesMap trên các nền đồ
họa Autocad, MicroStation dẫn đến dữ liệu không gian và thuộc tính thửa đất
lưu trữ riêng rẽ, rời rạc. Bản đồ số địa chính được đo đạc, biên tập in ra giấy
để sử dụng là chủ yếu, chưa chú trọng đến khai thác, xây dựng CSDL địa
chính. Khi có biến động đất đai công tác cập nhật biến động đa phần được
thực hiện thủ công, cập nhật biến động trên bản đồ giấy, ghi chú biến động
vào hồ sơ địa chính, chủ yếu cập nhật riêng lẻ do đó dữ liệu bản đồ và hồ sơ
vẫn tách rời nhau. Đến nay ngoài bản đồ in giấy để sử dụng thường xuyên cần
thêm nhiều thông tin về dữ liệu địa chính khác để quản lý và khai thác sử
dụng. CSDL địa chính trở nên quan trọng và được sử dụng thường xuyên
trong nhiều lĩnh vực như ngân hàng, xây dựng, quy hoạch đô thị. cung cấp
thông tin cho nhu cầu sử dụng của xã hội và phát triển kinh tế.
Trong tiến trình công nghiệp hóa, hiện đại hóa đất nước cùng với sự
phát triển nhanh của xã hội nên biến động đất đai diễn ra liên tục tại các địa
phương như chia tách, gộp thửa, chuyển đổi mục đích sử dụng. Do đó, dữ
liệu địa chính luôn cần được làm mới, nâng cao độ chính xác, cập nhật bổ
sung thường xuyên, cần phải chuẩn hóa và đồng nhất giữa hồ sơ và bản đồ để
đáp ứng được yêu cầu của xã hội
Tóm tắt nội dung tài liệu: Luận án Nghiên cứu cơ sở dữ liệu địa chính và bài toán cập nhật biến động đất đai ở Việt Nam
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỎ - ĐỊA CHẤT ĐINH HẢI NAM NGHIÊN CỨU CƠ SỞ DỮ LIỆU ĐỊA CHÍNH VÀ BÀI TOÁN CẬP NHẬT BIẾN ĐỘNG ĐẤT ĐAI Ở VIỆT NAM LUẬN ÁN TIẾN SĨ KỸ THUẬT HÀ NỘI - 2015 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỎ - ĐỊA CHẤT ĐINH HẢI NAM NGHIÊN CỨU CƠ SỞ DỮ LIỆU ĐỊA CHÍNH VÀ BÀI TOÁN CẬP NHẬT BIẾN ĐỘNG ĐẤT ĐAI Ở VIỆT NAM Ngành : Kỹ thuật Trắc địa - Bản đồ Mã số : 62.52.05.03 LUẬN ÁN TIẾN SĨ KỸ THUẬT NGƯỜI HƯỚNG DẪN KHOA HỌC 1. TS. TRẦN THÙY DƯƠNG 2. PGS.TS. NGUYỄN QUANG MINH HÀ NỘI - 2015 i LỜI CAM ĐOAN Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi. Toàn bộ quá trình nghiên cứu được tiến hành một cách khoa học, các số liệu, kết quả nêu trong luận án là chính xác, trung thực và chưa từng được công bố trong bất cứ công trình nào khác! Tác giả luận án Đinh Hải Nam ii MỤC LỤC LỜI CAM ĐOAN .............................................................................................. i MỤC LỤC ........................................................................................................ ii DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT ................................... v DANH MỤC CÁC BẢNG ............................................................................. vii DANH MỤC CÁC HÌNH VẼ ....................................................................... viii MỞ ĐẦU .......................................................................................................... 1 CHƯƠNG 1. TỔNG QUAN ............................................................................ 7 1.1. Trên thế giới .............................................................................................. 7 1.1.1. Công tác xây dựng, khai thác cơ sở dữ liệu địa chính của một số nước...........................................................................................................7 1.1.2. Mô hình cập nhật biến động, biên tập địa chính của phần mềm nước ngoài. ............................................................................................. 12 1.2. Trong nước .............................................................................................. 13 1.2.1. Tổng quan về công tác xây dựng cơ sở dữ liệu địa chính ............ 13 1.2.2. Công tác cập nhật biến động đất đai ............................................. 22 CHƯƠNG 2. NGHIÊN CỨU THIẾT KẾ CẤU TRÚC CƠ SỞ DỮ LIỆU ĐỊA CHÍNH PHÙ HỢP VỚI ĐIỀU KIỆN Ở VIỆT NAM .................................... 26 2.1. Xây dựng cấu trúc dữ liệu không gian .................................................... 28 2.1.1. Cấu trúc bảng dữ liệu đối tượng điểm .......................................... 29 2.1.2. Cấu trúc bảng dữ liệu nửa cạnh thửa ............................................ 30 2.1.3. Cấu trúc bảng dữ liệu thửa đất ...................................................... 32 2.1.4. Cấu trúc bảng dữ liệu véc tơ số hiệu chỉnh đỉnh thửa .................. 33 2.1.5. Cấu trúc bảng dữ liệu các lớp đối tượng bản đồ ........................... 34 2.2. Xây dựng cấu trúc dữ liệu thuộc tính ..................................................... 35 2.2.1. Mô hình quan hệ giữa các bảng dữ liệu thuộc tính ...................... 36 2.2.2. Cấu trúc các bảng dữ liệu thuộc tính ............................................ 37 2.3. Định nghĩa cấu trúc tệp XML để trao đổi CSDL địa chính ..................... 45 2.4. Chương trình thực nghiệm xây dựng CSDL địa chính ............................ 46 2.4.1. Mô đun xây dựng dữ liệu không gian ........................................... 46 2.4.2. Mô đun xây dựng và khai thác dữ liệu thuộc tính ........................ 50 iii 2.4.3. Xuất CSDL địa chính theo trúc định dạng tệp XML .................... 52 CHƯƠNG 3. NGHIÊN CỨU CÁC PHƯƠNG PHÁP HIỆU CHỈNH THỬA ĐẤT PHÙ HỢP LÀM CÔNG CỤ XỬ LÝ MỘT SỐ BÀI TOÁN CẬP NHẬT BIẾN ĐỘNG ĐẤT ĐAI TRONG PHẠM VI CỤC BỘ ................................. 53 3.1. Xây dựng phương pháp hiệu chỉnh thửa đất ........................................... 55 3.1.1. Mô hình toán học .......................................................................... 55 3.1.2. Xây dựng công thức xác định trực tiếp hệ số hệ phương trình chuẩn N ................................................................................................... 58 3.1.3. Thuật toán tính trực tiếp hệ số hệ phương trình chuẩn N ............. 63 3.1.4. Thuật toán tính số hiệu chỉnh ....................................................... 68 3.1.5. Thực nghiệm so sánh thời gian tính ma trận N theo hai phương pháp.........................................................................................................69 3.2. Lập cơ sở dữ liệu để hiệu chỉnh thửa đất ................................................ 69 3.2.1. Kỹ thuật tìm kiếm, lựa chọn thửa đất ........................................... 70 3.2.2. Xây dựng các hàm xác định đối tượng liền kề ............................. 72 3.2.3. Các bước lập cơ sở dữ liệu và xử lý khi hiệu chỉnh thửa đất ....... 73 3.3. Xây dựng mô đun xử lý các bài toán cập nhật biến động đất đai ........... 74 3.3.1. Chính xác hóa bản đồ sau khi số hóa. .......................................... 74 3.3.2. Hiệu chỉnh bản đồ theo chiều dài cạnh, diện tích ......................... 76 3.3.3. Cập nhật thửa đất đo bổ sung vào cơ sở dữ liệu địa chính ........... 80 3.3.4. Hiệu chỉnh các lớp đối tượng trên bản đồ sau khi cập nhật biến động.........................................................................................................85 3.3.5. Chia tách bản đồ ........................................................................... 86 3.3.6. Giải pháp mới cập nhật thửa biến động vào cơ sở dữ liệu địa chính........................................................................................................87 3.3.7. Tra cứu lịch sử, khôi phục các lần biến động thửa đất ................. 88 CHƯƠNG 4. XÂY DỰNG MỘT SỐ GIẢI PHÁP XỬ LÝ BIẾN ĐỘNG ĐẤT ĐAI MANG TÍNH HỆ THỐNG. .......................................................... 90 4.1. Giải pháp xử lý một số vấn đề liên quan đến việc quản lý thửa đất có đường bao là đường cong ............................................................................... 91 4.1.1. Giải pháp xử lý thửa đất khi có đường bao là đường cong .......... 91 iv 4.1.2. Xây dựng đối tượng cung tròn ...................................................... 92 4.1.3. Các bài toán xử lý cung tròn ......................................................... 96 4.1.4. Tính diện tích thửa đất có chứa cung tròn .................................. 100 4.2. Xử lý biến động khi quy định lại thông số file chuẩn của bản đồ địa chính ...................................................................................................................... 103 4.2.1. Quy định kỹ thuật về hệ tọa độ và đơn vị bản vẽ của bản đồ địa chính......................................................................................................103 4.2.2. Một số phương pháp hiện tại chuyển đổi đơn vị làm việc của bản vẽ...........................................................................................................104 4.2.3. Giải pháp xử lý bản đồ khi thay đổi thông số kỹ thuật của bản vẽ...........................................................................................................105 KẾT LUẬN VÀ KIẾN NGHỊ ...................................................................... 108 DANH MỤC CÔNG TRÌNH CỦA TÁC GIẢ ............................................ 110 TÀI LIỆU THAM KHẢO ............................................................................ 111 PHỤ LỤC ..................................................................................................... 119 v DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT Tiếng Việt Ký hiệu Giải thích viết tắt, ký hiệu BĐĐC Bản đồ địa chính Bộ TN&MT Bộ Tài nguyên và Môi trường CSDL Cơ sở dữ liệu GCN Giấy chứng nhận GCNQSDĐ Giấy chứng nhận quyền sử dụng đất QSDĐ Quyền sử dụng đất TN&MT Tài nguyên và Môi trường TT Thông tư VPĐKĐĐ Văn phòng Đăng ký đất đai Tiếng Anh Ký hiệu Giải thích viết tắt, ký hiệu 2D, 3D Không gian 2 chiều, 3 chiều ArcGIS Là dòng sản phẩm hỗ trợ trong hệ thống thông tin địa lý của hãng ESRI (Mỹ) Benley Công ty của Mỹ sản xuất các phần mềm giải pháp cho việc thiết kế, xây dựng và hoạt động của cơ sở hạ tầng Cadastral Editor Mô đun biên tập địa chính trên phần mềm ArcGIS Desktop DGN Khuôn dạng tệp dữ liệu bản đồ của phần mềm MicroStation DWG Khuôn dạng tệp dữ liệu đồ họa của phần mềm Autocad DXF Drawing Exchange Format - là một định dạng dữ liệu đồ họa được phát triển bởi Autodesk dùng cho việc trao đổi dữ liệu giữa các phần mềm hỗ trợ thiết kế khác nhau Elis Environment Land Information System - Là phần mềm hệ thống thông tin đất đai và môi trường ESRI Environmental Systems Research Institute - Viện nghiên cứu hệ thống Môi trường Mỹ Famis Field Work and Cadastral Mapping Intergrated Software- vi Phần mềm tích hợp cho đo vẽ bản đồ địa chính ở Việt Nam GIS Geographic Information System - Hệ thống thông tin địa lý GML Geography Markup Language - Ngôn ngữ đánh dấu địa lý LAN Local Area Network - Mạng nội bộ LIS Land Information System - Hệ thống thông tin đất đai Metadata Siêu dữ liệu hay là dữ liệu quản lý dữ liệu Microsoft Access Là một phần mềm quản lý cơ sở dữ liệu quan hệ do hãng Microsoft giữ bản quyền Microsoft SQL Server Hệ quản trị cơ sở dữ liệu quan hệ được phát triển bởi Microsoft MySQL Hệ quản trị cơ sở dữ liệu mã nguồn mở phổ biến nhất thế giới Oracle Tên của một hãng phần mềm, một hệ quản trị cơ sở dữ liệu phổ biến trên thế giới Seed file Là một tệp chuẩn của phần mềm MicroStation được định nghĩa đầy đủ các thông số toán học bản đồ, hệ đơn vị đo được tính theo giá trị thật ngoài thực địa làm tăng giá trị chính xác và thống nhất giữa các file bản đồ SEMLA Strengthening Environment Managament and Land Administration - Chương trình hợp tác Việt Nam, Thụy Điển về tăng cường năng lực quản lý đất đai và môi trường SQL Structured Query Language - Ngôn ngữ truy vấn mang tính cấu trúc TMV.LIS Phần mềm hệ thống thông tin đất đai của Tổng công ty Tài nguyên & Môi trường Việt Nam (TMV) Topology Thuật ngữ được sử dụng để chỉ mối quan hệ không gian giữa các đối tượng địa lý ViLIS VietNam Land Information System - Phần mềm hệ thống thông tin đất đai do Bộ Tài nguyên và Môi trường xây dựng VLAP Vietnam Land Administration Project - Hoàn thiện và hiện đại hóa hệ thống quản lý đất đai Việt Nam XML eXtensible Markup Language - Ngôn ngữ đánh dấu mở rộng vii DANH MỤC CÁC BẢNG Bảng 2.1. Cấu trúc bảng dữ liệu điểm ............................................................ 30 Bảng 2.2. Cấu trúc bảng dữ liệu nửa cạnh ...................................................... 31 Bảng 2.3. Cấu trúc bảng dữ liệu thửa đất ....................................................... 33 Bảng 2.4. Cấu trúc bảng dữ liệu véc tơ số hiệu chỉnh đỉnh thửa .................... 33 Bảng 2.5. Cấu trúc bảng dữ liệu các lớp đối tượng bản đồ ............................ 35 Bảng 2.6. Cấu trúc bảng dữ liệu mục đích sử dụng đất .................................. 39 Bảng 2.7. Cấu trúc bảng dữ liệu đối tượng sử dụng đất ................................. 39 Bảng 2.8. Cấu trúc bảng dữ liệu nguồn gốc sử dụng đất ................................ 39 Bảng 2.9. Cấu trúc bảng dữ liệu thông tin thuộc tính của thửa đất ................ 40 Bảng 2.10. Cấu trúc bảng dữ liệu thông tin chủ sử dụng đất ......................... 41 Bảng 2.11. Cấu trúc bảng dữ liệu đăng ký sử dụng đất .................................. 42 Bảng 2.12. Cấu trúc bảng dữ liệu đa mục đích sử dụng ................................. 43 Bảng 2.13. Cấu trúc bảng dữ liệu về giấy chứng nhận ................................... 43 Bảng 3.1. Hệ phương trình điều kiện cạnh của thửa đất ................................ 59 Bảng 3.2. Hệ phương trình điều kiện diện tích của một thửa ......................... 59 Bảng 3.3. Hệ phương trình điều kiện diện tích hai thửa không chung đỉnh ... 60 Bảng 3.4. Hệ phương trình điều kiện diện tích hai thửa chung đỉnh .............. 61 Bảng 3.5. Hệ phương trình điều kiện cạnh j và diện tích thửa đất i ............... 62 Bảng 3.6. Thời gian tính toán lập ma trận N theo hai phương pháp .............. 69 Bảng 3.7. Số liệu diện tích bản đồ giấy và diện tích bản đồ số hóa ............... 75 Bảng 3.8. Số hiệu chỉnh và tọa độ các đỉnh sau khi hiệu chỉnh theo cạnh đo mới .................................................................................................................. 77 Bảng 3.9. Số liệu đo thửa đất .......................................................................... 78 Bảng 3.10. Bảng tọa độ đỉnh thửa sau hiệu chỉnh .......................................... 79 Bảng 3.11. Bảng số liệu đo bổ sung thửa đất ................................................. 83 Bảng 3.12. Kết nối và cập nhật thửa đo bổ sung vào CSDL địa chính .......... 84 Bảng 3.13. Bảng tọa độ đỉnh thửa sau khi tính chuyển về CSDL địa chính .. 85 Bảng 3.14. Bảng hiệu chỉnh tọa độ lớp nhà .................................................... 86 Bảng 3.15. Lịch sử biến động đỉnh thửa ......................................................... 89 Bảng 3.16. Lịch sử biến động của thửa đất i .................................................. 89 viii DANH MỤC CÁC HÌNH VẼ Hình 1.1. Hệ thống đất đai liên kết với NaLIS ................................................. 9 Hình 1.2. Hệ thống đăng ký nhà đất Hà Lan [52] .......................................... 10 Hình 1.3. Các thành phần của kết cấu thửa đất trong mô đun Cadastral Editor [53] ................................................................................................................. 13 Hình 1.4. Quy trình xây dựng cơ sở dữ liệu địa chính ................................... 19 Hình 1.5. Giao diện chức năng chia tách, gộp thửa của phần mềm Vilis 2.0. 25 Hình 2.1. Mô tả các thành phần cấu tạo nên thửa đất ..................................... 28 Hình 2.2. Mô tả các thành phần nửa cạnh ...................................................... 30 Hình 2.3. Các lớp đối tượng bản đồ ............................................................... 34 Hình 2.4. Sơ đồ mô hình quan hệ giữa các bảng đơn vị hành chính .............. 38 Hình 2.5. Sơ đồ quan hệ giữa các bảng dữ liệu thuộc tính ............................. 44 Hình 2.6. Tệp dữ liệu đồ họa .......................................................................... 47 Hình 2.7. Tệp số liệu đo đạc ........................................................................... 47 Hình 2.8. Tệp số liệu định dạng shape file ........................ ... XY(N + 1).rY1 - DS_XY(1).rY1 End Sub ---------------------------------------------------------------------------------------------- Private Sub MnuToolJoin_Click() Dim Pcf() As Point_2D, Pgd() As Point_2D, P_cf() As Point_2D, P_cf_dxdy() As Point_2D ' điểm tham tham gia join Dim Pgd_2() As Point_2D, P_cf_2() As Point_2D ' điểm ăn theo Dim Phi As Double, m As Double Dim N As Long, n_2 As Long, i As Long Dim temp$, word() As String Open App.Path & "\data\join3.txt" For Input As #1 Line Input #1, temp N = CLng(Val(temp)) ReDim Pcf(1 To N) As Point_2D: ReDim P_cf(1 To N) As Point_2D: ReDim P_cf_dxdy(1 To N) As Point_2D: ReDim Pgd(1 To N) As Point_2D For i = 1 To N Line Input #1, temp TachXau temp, vbTab, word Pcf(i).rX1 = Val(word(1)): Pcf(i).rY1 = Val(word(2)) Pgd(i).rX1 = Val(word(3)): Pgd(i).rY1 = Val(word(4)) Next i ' điểm nội suy theo Line Input #1, temp n_2 = CLng(Val(temp)) ReDim Pgd_2(n_2) As Point_2D: ReDim P_cf_2(n_2) As Point_2D For i = 1 To n_2 Line Input #1, temp TachXau temp, vbTab, word 130 Pgd_2(i).rX1 = Val(word(1)): Pgd_2(i).rY1 = Val(word(2)) Next i Close 1 Helmet Pcf(), Pgd(), P_cf(), P_cf_dxdy(), N, Phi, m, Pgd_2(), P_cf_2(), n_2 Debug.Print "Phi=" & Do2Dms(Phi) & ",m=" & m For i = 1 To N 'Debug.Print P_cf(i).rX1 & "dx=" & Format(P_cf_dxdy(i).rX1, "0.000") & " - Y =" & P_cf(i).rY1 & "dy=" & Format(P_cf_dxdy(i).rY1, "0.000") Debug.Print P_cf(i).rX1 & ", " & P_cf(i).rY1 Next i Debug.Print " diem noi suy theo" For i = 1 To n_2 Debug.Print P_cf_2(i).rX1 & ", " & P_cf_2(i).rY1 Next i ' HienthiVecto v(), n2, "0.000" End Sub Private Sub Helmet(Pcf() As Point_2D, Pgd() As Point_2D, P_cf() As Point_2D, P_cf_dxdy() As Point_2D, N As Long, Phi As Double, m As Double, Pgd_2() As Point_2D, P_cf_2() As Point_2D, n_2 As Long) Dim Pcfo As Point_2D, Pgdo As Point_2D ' trọng tâm Dim a() As Double, L() As Double, r() As Double, Q() As Double, b() As Double, miu As Double Dim v() As Double, vv As Double Dim k As Long, i As Long, j As Long, n2 As Long k = 4: n2 = N * 2 ReDim a(1 To n2, 1 To k) As Double: ReDim L(1 To n2) As Double ReDim r(1 To k, 1 To k) As Double: ReDim Q(1 To k, 1 To k) As Double: ReDim b(1 To k) As Double ReDim v(1 To n2) As Double 'chuyển về tọa độ trọng tâm For i = 1 To N Pcfo.rX1 = Pcfo.rX1 + Pcf(i).rX1: Pcfo.rY1 = Pcfo.rY1 + Pcf(i).rY1 Pgdo.rX1 = Pgdo.rX1 + Pgd(i).rX1: Pgdo.rY1 = Pgdo.rY1 + Pgd(i).rY1 Next i 131 Pcfo.rX1 = Pcfo.rX1 / N: Pcfo.rY1 = Pcfo.rY1 / N Pgdo.rX1 = Pgdo.rX1 / N: Pgdo.rY1 = Pgdo.rY1 / N For i = 1 To N Pcf(i).rX1 = Pcf(i).rX1 - Pcfo.rX1: Pcf(i).rY1 = Pcf(i).rY1 - Pcfo.rY1 Pgd(i).rX1 = Pgd(i).rX1 - Pgdo.rX1: Pgd(i).rY1 = Pgd(i).rY1 - Pgdo.rY1 Next i ' lập ma trận A For i = 1 To N a(2 * i - 1, 1) = Pgd(i).rX1: a(2 * i - 1, 2) = -Pgd(i).rY1: a(2 * i - 1, 3) = 1: a(2 * i - 1, 4) = 0 a(2 * i, 1) = Pgd(i).rY1: a(2 * i, 2) = Pgd(i).rX1: a(2 * i, 3) = 0: a(2 * i, 4) = 1 ' a(2 * i - 1, 1) = Pgd(i).rX1: a(2 * i - 1, 2) = Pgd(i).rY1: a(2 * i - 1, 3) = 1: a(2 * i - 1, 4) = 0 ' a(2 * i, 1) = Pgd(i).rY1: a(2 * i, 2) = -Pgd(i).rX1: a(2 * i, 3) = 0: a(2 * i, 4) = 1 L(2 * i - 1) = -Pcf(i).rX1: L(2 * i) = -Pcf(i).rY1 Next i Phụ lục 4. Thuật toán xử lý hiệu chỉnh biến động thửa đất Public Sub ADJ2(PTDK As tPTDK, PointsADJ As tListID) Dim W() As Double, N() As Double Dim i As Long, j As Long, k As Long, eP As Long, eT As Long Dim Dx#, Dy#, Dij#, stt&, e1 As Long, e As Long Dim v1 As Long, v2 As Long, v3 As Long, v4 As Long ReDim W(1 To PTDK.r) As Double ReDim N(1 To PTDK.r, 1 To PTDK.r) As Double For i = 1 To PointsADJ.Counts DS_v(PointsADJ.List(i)).vX = 0 DS_v(PointsADJ.List(i)).vY = 0 Next i Exe.max = PTDK.r * 4 ShowProgess , "Tính trực tiếp ma trận N" For i = 1 To PTDK.r Call Progses DoEvents 132 If PTDK.PT(i).iType = 0 Then With DS_a(PTDK.PT(i).ID) N(i, i) = GetD2(.e) W(i) = 2 * (PTDK.PT(i).Value - PTDK.PT(i).ValueADJ) End With Else N(i, i) = 2 v1 = DS_e(PTDK.PT(i).ID).v ' dinh i v2 = DS_e(DS_e(PTDK.PT(i).ID).eN).v ' dinh j W(i) = GetDij(v1, v2) - PTDK.PT(i).ValueADJ End If If i < PTDK.r Then For k = i + 1 To PTDK.r If PTDK.PT(i).iType = 0 And PTDK.PT(k).iType = 0 Then With DS_a(PTDK.PT(i).ID) e1 = .e Do e = e1 Do eP = DS_e(e).eP eT = DS_e(eP).eT If DS_e(eT).a = PTDK.PT(k).ID Then ' thua giap ranh Call GetVecto(e1, v1, v2) Call GetVecto(eT, v3, v4) N(i, k) = N(i, k) + TinhTichVecto(v1, v2, v3, v4) N(k, i) = N(i, k) End If e = eT Loop Until eT = e1 e1 = DS_e(e1).eN Loop Until e1 = .e End With 133 ElseIf PTDK.PT(i).iType = 1 And PTDK.PT(k).iType = 1 Then e = PTDK.PT(i).ID: eT = DS_e(e).eT e1 = PTDK.PT(k).ID: eP = DS_e(e1).eT ' nguoc e1 Dim giaonhau As Boolean, anfa As Double If DS_e(e).v = DS_e(e1).v Then v1 = DS_e(e).v: v2 = DS_e(eT).v v3 = DS_e(e1).v: v4 = DS_e(eP).v ElseIf DS_e(e).v = DS_e(eP).v Then v1 = DS_e(e).v: v2 = DS_e(eT).v v3 = DS_e(eP).v: v4 = DS_e(e1).v ElseIf DS_e(eT).v = DS_e(e1).v Then v1 = DS_e(eT).v: v2 = DS_e(e).v v3 = DS_e(e1).v: v4 = DS_e(eP).v ElseIf DS_e(eT).v = DS_e(eP).v Then v1 = DS_e(eT).v: v2 = DS_e(e).v v3 = DS_e(eP).v: v4 = DS_e(e1).v End If If giaonhau = True Then anfa = TPV(DS_v(v1).X, DS_v(v1).Y, DS_v(v2).X, DS_v(v2).Y) - TPV(DS_v(v3).X, DS_v(v3).Y, DS_v(v4).X, DS_v(v4).Y) N(i, k) = N(i, k) + Cos(anfa) N(k, i) = N(i, k) End If End If Next k End If Next i ShowMessage "Giải hệ phương trình" GiaiHePT N(), W(), PTDK.r For i = 1 To PTDK.r W(i) = -W(i) Next i ShowMessage "Đang tính số hiệu chỉnh" 134 ' tính số hiệu chỉnh For i = 1 To PTDK.r Call Progses DoEvents If PTDK.PT(i).iType = 0 Then With DS_a(PTDK.PT(i).ID) e1 = .e ' canh dau tien cua thua Do stt = GetPoint_Stt(DS_e(e1).v, PointsADJ) v1 = DS_e(DS_e(e1).eP).v v2 = DS_e(DS_e(e1).eN).v DS_v(PointsADJ.List(stt)).vX = DS_v(PointsADJ.List(stt)).vX - (DS_v(v2).Y - DS_v(v1).Y) * W(i) DS_v(PointsADJ.List(stt)).vY = DS_v(PointsADJ.List(stt)).vY + (DS_v(v2).X - DS_v(v1).X) * W(i) e1 = DS_e(e1).eN Loop Until e1 = .e End With Else v1 = DS_e(PTDK.PT(i).ID).v ' dinh i v2 = DS_e(DS_e(PTDK.PT(i).ID).eN).v ' dinh v2 Dx = DS_v(v2).X - DS_v(v1).X Dy = DS_v(v2).Y - DS_v(v1).Y Dij = Sqr(Dx * Dx + Dy * Dy) Dx = (Dx / Dij) * W(i): Dy = (Dy / Dij) * W(i) stt = GetPoint_Stt(v1, PointsADJ) DS_v(PointsADJ.List(stt)).vX = DS_v(PointsADJ.List(stt)).vX - Dx DS_v(PointsADJ.List(stt)).vY = DS_v(PointsADJ.List(stt)).vY - Dy stt = GetPoint_Stt(v2, PointsADJ) DS_v(PointsADJ.List(stt)).vX = DS_v(PointsADJ.List(stt)).vX + Dx DS_v(PointsADJ.List(stt)).vY = DS_v(PointsADJ.List(stt)).vY + Dy End If Next i End Sub 135 ---------------------------------------------------------------------------------------------- Public Sub GiaiHePT(r() As Double, b() As Double, N As Long) Dim i As Long, j As Long, k As Long Dim temp As Double ' Khử xuôi For i = 1 To N For j = i + 1 To N r(i, j) = r(i, j) / r(i, i) Next j b(i) = b(i) / r(i, i) For k = i + 1 To N For j = i + 1 To N r(k, j) = r(k, j) - r(i, j) * r(k, i) Next j b(k) = b(k) - b(i) * r(k, i) Next k Next i ' Tính nghiệm For i = N To 1 Step -1 temp = 0 For j = i + 1 To N temp = temp + r(i, j) * b(j) Next j b(i) = b(i) - temp Next i End Sub ---------------------------------------------------------------------------------------------- Phụ lục 5. Xử lý đối tượng cung tròn Private Type ARC_2D rX1 As Double rY1 As Double rR1 As Double rStart1 As Double 'Quay nguoc chieu kim dong ho rEnd1 As Double 136 End Type Dim DS_Arcs() As ARC_2D, ArcsCount As Long ---------------------------------------------------------------------------------------------- Private Sub AddArc(rX1 As Double, rY1 As Double, rR1 As Double, rStart1 As Double, rEnd1 As Double) ArcsCount = ArcsCount + 1 ReDim Preserve DS_Arcs(ArcsCount) DS_Arcs(ArcsCount).rX1 = rX1 DS_Arcs(ArcsCount).rY1 = rY1 DS_Arcs(ArcsCount).rR1 = rR1 DS_Arcs(ArcsCount).rStart1 = rStart1 DS_Arcs(ArcsCount).rEnd1 = rEnd1 AddEnt TP_ARC, ArcsCount End Sub ---------------------------------------------------------------------------------------------- Function ARC_DXF() ArcsCount = ArcsCount + 1 ReDim Preserve DS_Arcs(ArcsCount) Do Line Input #4, Textcode Line Input #4, Textvalue Select Case Trim(UCase(Textcode)) Case "10" DS_Arcs(ArcsCount).rX1 = Val(Textvalue) Case "20" DS_Arcs(ArcsCount).rY1 = Val(Textvalue) Case "40" DS_Arcs(ArcsCount).rR1 = Val(Textvalue) Case "50" DS_Arcs(ArcsCount).rStart1 = Rad(Val(Textvalue)) Case "51" DS_Arcs(ArcsCount).rEnd1 = Rad(Val(Textvalue)) rX1 = DS_Arcs(ArcsCount).rX1 rY1 = DS_Arcs(ArcsCount).rY1 137 rR1 = DS_Arcs(ArcsCount).rR1 rStart1 = DS_Arcs(ArcsCount).rStart1 rEnd1 = DS_Arcs(ArcsCount).rEnd1 AddArc rX1, rY1, rR1, rStart1, rEnd1 Exit Do End Select Loop End Function ----------------------------------------------------------------------------------------------------- Private Sub Arc_3P(ByVal vX1 As Long, ByVal vY1 As Long, ByVal vXm As Long, ByVal vYm As Long, ByVal vX2 As Long, ByVal vY2 As Long, _ vXc As Long, vYc As Long, vRc As Long, Optional rStartC, Optional rEndC) Dim rBeta As Double, vR1 As Double, rAngle As Double, CosrA As Double, SinrA As Double Dim vR2 As Double, vR3 As Double If vCcw(vX1, vY1, vXm, vYm, vX2, vY2) = 1 Then vXc = vX1: vYc = vY1 vX1 = vX2: vY1 = vY2 vX2 = vXc: vY2 = vYc End If vR1 = Sqr((vX2 - vX1) * (vX2 - vX1) + (vY2 - vY1) * (vY2 - vY1)) vR2 = Sqr((vXm - vX2) * (vXm - vX2) + (vYm - vY2) * (vYm - vY2)) vR3 = Sqr((vXm - vX1) * (vXm - vX1) + (vYm - vY1) * (vYm - vY1)) If vR2 = 0 Then Exit Sub: If vR3 = 0 Then Exit Sub CosrA = 0.5 * (vR2 * vR2 + vR3 * vR3 - vR1 * vR1) / (vR2 * vR3) SinrA = Sqr(1 - CosrA * CosrA) rAngle = Atan2(SinrA, CosrA) rAngle = 2 * (Pi - rAngle) rBeta = Atan2(vY1 - vY2, vX2 - vX1) If Sin(0.5 * rAngle) 0 Then vRc = 0.5 * vR1 / Sin(0.5 * rAngle) Else vRc = 32000 138 End If rAngle = 0.5 * (Pi - rAngle) rBeta = rBeta - rAngle + Pi vXc = vX2 + vRc * Cos(rBeta) vYc = vY2 - vRc * Sin(rBeta) If IsMissing(rStartC) And IsMissing(rEndC) Then PicView.Circle (vXc, vYc), vRc Else rStartC = Atan2(vYc - vY1, vX1 - vXc) rEndC = Atan2(vYc - vY2, vX2 - vXc) PicView.Circle (vXc, vYc), vRc, , rStartC, rEndC End If End Sub ---------------------------------------------------------------------------------------------- Private Sub Arc_SEA(ByVal vX1 As Long, ByVal vY1 As Long, ByVal vX2 As Long, ByVal vY2 As Long, ByVal rAngle As Double, _ vXc As Long, vYc As Long, vRc As Long, Optional rStartC As Double, Optional rEndC As Double) Dim rBeta As Double, vR1 As Double rBeta = Atan2(vY1 - vY2, vX2 - vX1) vR1 = Sqr((vX2 - vX1) * (vX2 - vX1) + (vY2 - vY1) * (vY2 - vY1)) If Sin(0.5 * rAngle) 0 Then vRc = 0.5 * vR1 / Sin(0.5 * rAngle) Else vRc = 32000 End If rAngle = 0.5 * (Pi - rAngle) rBeta = rBeta - rAngle + Pi vXc = vX2 + vRc * Cos(rBeta) vYc = vY2 - vRc * Sin(rBeta) rStartC = Atan2(vYc - vY1, vX1 - vXc) rEndC = Atan2(vYc - vY2, vX2 - vXc) PicView.Circle (vXc, vYc), vRc, , rStartC, rEndC End Sub 139 ---------------------------------------------------------------------------------------------- Private Function Arc_SED(ByVal vX1 As Long, ByVal vY1 As Long, ByVal vX2 As Long, ByVal vY2 As Long, ByVal rDirection As Double, _ vXc As Long, vYc As Long, vRc As Long, Optional rStartC As Double, Optional rEndC As Double) As Long Dim rBeta As Double, vR1 As Double, rAngle As Double rBeta = Atan2(vY1 - vY2, vX2 - vX1) rAngle = 2 * (rBeta - rDirection) vR1 = Sqr((vX2 - vX1) * (vX2 - vX1) + (vY2 - vY1) * (vY2 - vY1)) If Abs(Sin(0.5 * rAngle)) > 0.000016 * vR1 Then '???? vRc = 0.5 * vR1 / Sin(0.5 * rAngle) Else vRc = 32000 End If rAngle = 0.5 * (Pi - rAngle) rBeta = rBeta - rAngle + Pi vXc = vX2 + vRc * Cos(rBeta) vYc = vY2 - vRc * Sin(rBeta) If vRc > 0 Then rStartC = Atan2(vYc - vY1, vX1 - vXc) rEndC = Atan2(vYc - vY2, vX2 - vXc) Arc_SED = 1 Else vRc = -vRc rEndC = Atan2(vYc - vY1, vX1 - vXc) rStartC = Atan2(vYc - vY2, vX2 - vXc) Arc_SED = -1 End If PicView.Circle (vXc, vYc), vRc, , rStartC, rEndC End Function ---------------------------------------------------------------------------------------------- Private Sub Arc_SER(ByVal vX1 As Long, ByVal vY1 As Long, ByVal vX2 As Long, ByVal vY2 As Long, ByVal vRc As Long, _ 140 vXc As Long, vYc As Long, Optional rStartC As Double, Optional rEndC As Double) Dim rBeta As Double, rAngle As Double, SinrA_2 As Double, CosrA_2 As Double, vR1 As Long rBeta = Atan2(vY1 - vY2, vX2 - vX1) vR1 = Sqr((vX2 - vX1) * (vX2 - vX1) + (vY2 - vY1) * (vY2 - vY1)) SinrA_2 = 0.5 * vR1 / vRc: CosrA_2 = Sqr(1 - SinrA_2 * SinrA_2) rAngle = 2 * Atan2(SinrA_2, CosrA_2) rAngle = 0.5 * (Pi - rAngle) rBeta = rBeta - rAngle + Pi vXc = vX2 + vRc * Cos(rBeta) vYc = vY2 - vRc * Sin(rBeta) rStartC = Atan2(vYc - vY1, vX1 - vXc) rEndC = Atan2(vYc - vY2, vX2 - vXc) PicView.Circle (vXc, vYc), vRc, , rStartC, rEndC End Sub ---------------------------------------------------------------------------------------------- Private Sub GetQuadrantArcMinMax(Ac As ARC_2D) Dim rEnd1 As Double With Ac If .rStart1 < .rEnd1 Then rEnd1 = .rEnd1 If Pi_2 > .rStart1 And Pi_2 < rEnd1 Then If rYmax < .rY1 + .rR1 Then rYmax = .rY1 + .rR1 End If If Pi > .rStart1 And Pi < rEnd1 Then If rXmin > .rX1 - .rR1 Then rXmin = .rX1 - .rR1 End If If 3 * Pi_2 > .rStart1 And 3 * Pi_2 < rEnd1 Then If rYmin > .rY1 - .rR1 Then rYmin = .rY1 - .rR1 End If Else rEnd1 = .rEnd1 + Pi2 If Pi_2 > .rStart1 Then 141 If rYmax < .rY1 + .rR1 Then rYmax = .rY1 + .rR1 Else If Pi_2 < .rEnd1 Then If rYmax < .rY1 + .rR1 Then rYmax = .rY1 + .rR1 End If End If If Pi > .rStart1 Then If rXmin > .rX1 - .rR1 Then rXmin = .rX1 - .rR1 Else If Pi < .rEnd1 Then If rXmin > .rX1 - .rR1 Then rXmin = .rX1 - .rR1 End If End If If 3 * Pi_2 > .rStart1 Then If rYmin > .rY1 - .rR1 Then rYmin = .rY1 - .rR1 Else If 3 * Pi_2 < .rEnd1 Then If rYmin > .rY1 - .rR1 Then rYmin = .rY1 - .rR1 End If End If If Pi2 > .rStart1 And Pi2 < rEnd1 Then If rXmax < .rX1 + .rR1 Then rXmax = .rX1 + .rR1 End If End If End With End Sub
File đính kèm:
- luan_an_nghien_cuu_co_so_du_lieu_dia_chinh_va_bai_toan_cap_n.pdf