Nghiên cứu cấu trúc đối tượng liên kết địa chính phục vụ cho công tác quản lý đất đai

99 25 0
Nghiên cứu cấu trúc đối tượng liên kết địa chính phục vụ cho công tác quản lý đất đai

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỎ ĐỊA CHẤT ======&====== NGUYỄN DUY HOÀNG NGHIÊN CỨU CẤU TRÚC ĐỐI TƯỢNG LIÊN KẾT ĐỊA CHÍNH PHỤC VỤ CHO CƠNG TÁC QUẢN LÝ ĐẤT ĐAI Chuyên ngành: Kỹ thuật Trắc địa Mã số: 60.52.85 LUẬN VĂN THẠC SỸ KỸ THUẬT NGƯỜI HƯỚNG DẪN KHOA HỌC TS TRẦN THÙY DƯƠNG Hà Nội, tháng 11 - 2010 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỎ - ĐỊA CHẤT _ NGUYỄN DUY HOÀNG NGHIÊN CỨU CẤU TRÚC ĐỐI TƯỢNG LIÊN KẾT ĐỊA CHÍNH PHỤC VỤ CHO CƠNG TÁC QUẢN LÝ ĐẤT ĐAI LUẬN VĂN THẠC SỸ KỸ THUẬT HÀ NỘI -2010 MỤC LỤC LỜI CAM ĐOAN MỞ ĐẦU LỜI CẢM ƠN CHƯƠNG – TỔNG QUAN VỀ SURVEY ANALYST – CADASTRAL EDITOR 1.1 Tổng quan Survey Analyst - Cadastral Editor 1.1.1 Liên kết địa (Cadastral Fabric) 1.1.2 Job liên kết địa 11 1.1.3 Tạo 11 1.1.4 Thửa liên kết địa 12 1.1.5 Bình sai liên kết địa 12 1.1.6 Hiệu chỉnh lớp đối tượng GIS phù hợp với liên kết địa 14 1.2 Lớp liên kết địa 14 1.3 Tổng quan biên tập liên kết địa 15 CHƯƠNG – KHÁI NIỆM LIÊN KẾT ĐỊA CHÍNH 20 2.1 Job kết cấu địa 20 2.3 Lịch sử đất kết cấu địa 26 CHƯƠNG - CẤU TRÚC DỮ LIỆU DCEL 29 3.1 Khái niệm DCEL 29 3.2 Tổng quan 30 3.3 Những đối tượng DCEL 32 3.3.1 Đối tượng đỉnh (Vertex) 32 3.3.2 Đối tượng nửa cạnh (HalfEdge) 33 3.3.3 Đối tương mặt (Face) 34 3.4 Nhận xét 34 CHƯƠNG - THIẾT KẾ CHƯƠNG TRÌNH QN LÝ ĐỊA CHÍNH 52 4.1 Thiết kế chương trình 52 4.1.1 Sơ đồ đường liệu (Data Flow Diagram) 52 4.1.2 Sơ đồ thiết kế bảng sở liệu (Table Design) 53 4.1.3 Thiết kế lớp (class) chương trình Visual C# 53 4.2 Thiết kế giao diện chức 54 4.2.1 Chức đăng nhập sử dụng 54 4.2.2 Chức quản lý tài khoản người dùng 56 4.2.3 Chức thay đổi mật người dùng 57 4.2.4 Chức quản lý sổ mục kê 58 4.2.5 Chức tạo sở liệu 59 4.2.6 Chức nhập đồ 60 4.2.7 Chức chỉnh lý đồ đất, bao gồm: 62 A Tạo đất 62 B Chia đất 64 C Nhập đất 68 D Xóa bỏ đất 71 E Quản lý thơng tin hình học đất 73 F Quản lý thông tin thuộc tính đất 74 KẾT LUẬN VÀ KIẾN NGHỊ 76 TÀI LIỆU THAM KHẢO 77 PHỤ LỤC 78 LỜI CAM ĐOAN Tơi xin cam đoan cơng trình nghiên cứu riêng Các số liệu kết nêu luận văn trung thực, chưa cơng bố cơng trình khác Hà Nội, ngày 15 tháng 11 TÁC GIẢ LUẬN VĂN Nguyễn Duy Hoàng năm 2010 MỞ ĐẦU Tính cấp thiết đề tài Trong cơng cơng nghiệp hóa, đại hóa đất nước, việc phát triển khu công nghiệp, khu đô thị, nhà mở rộng mạng lưới giao thông môt cầu cấp thiết Chính nhu cầu làm cho đất đai luôn biến động Việc theo dõi cập nhật biến động đất đai quan chức khó khăn Ngày nay, với phát triển mạnh mẽ công nghệ thông tin cho phép cập nhật xử lý vấn đề biến động đất đai cách nhanh chóng, có hiệu xác Việc hồn thiện hệ thống quan quản lý đất đai quan tâm tìm cách giải cho đạt hiệu xác Phần mềm ArcGIS hãng ESRI® đời ứng dụng xây dựng phát triển ngày mạnh mẽ, hồn thiện lĩnh vực quản lý địa cập nhật biến động đất đai Trong có cung cấp tiện ích cập nhật biến động đất Cadastral Editor với đối tượng quản lý Cadastral Fabric hay Liên kết địa Tuy nhiên, việc can thiệp vào chức đối tượng hạn chế chức đóng gói Nhằm bước nghiên cứu tìm hiểu khả mở rộng chức Liên kết địa chính, giúp tăng tính chủ động cho công tác quản lý ngành quản lý địa nước ta Tác giả đề xuất nghiên cứu đề tài “Nghiên cứu cấu trúc đối tượng Liên kết địa phục vụ cơng tác quản lý đất đai” Mục tiêu nghiên cứu Xây dựng phần mềm sử dụng sở liệu địa dựa đối tượng Liên kết địa chính, quản lý cập nhật hồ sơ địa với chức sau: + Lưu thông tin hồ sơ kỹ thuật đất + Cập nhật biến động hình học đất + Lưu lịch sử biến động đất + Phục vụ đa người dùng Phạm vi nghiên cứu Tìm hiểu chức cấu trúc đối tượng Liên kết địa Xây dựng phần mềm mô phỏng, bước áp dụng chức Liên kết địa phục vụ cơng tác quản lý đất đai Nội dung nghiên cứu Nghiên cứu cấu trúc chế hoạt động đối tượng Liên kết địa phục vụ quản lý, cập nhật biến động hồ sơ kỹ thuật đất hồ sơ địa Nghiên cứu đối tượng sở bên Liên kết địa bao gồm:  Các đoạn ranh thửa, lưu bảo tồn kích thước ranh giới  Các đỉnh thửa, với tọa độ x, y, z  Các đường bao thửa, xác định đoạn ranh  Các đỉnh nằm ranh thửa, đỉnh góc nằm ranh giới liền kề  Các đồ (bảng), lưu giữ thông tin hồ sơ đo đạc  Các trích Liên kết địa (job Liên kết địa chính), theo dõi cập nhật liên kết địa Mơ hình hóa đất Liên kết địa Kích thước, hình dạng hình học thuộc tính đất Mơ hình hóa mối quan hệ đất Số liệu đo, tọa độ độ xác Liên kết địa Các trích Liên kết địa việc khóa biên tập Lịch sử đất Liên kết địa Phương pháp nghiên cứu - Nghiên cứu chức module Cadastral Editor phần mềm ArcGIS - Nghiên cứu cấu trúc phương pháp hoạt động đối tượng Liên kết địa - Xây dựng phần mềm mơ cấu trúc Liên kết địa - Ứng dụng công tác quản lý đất đai Ý nghĩa khoa học thực tiễn Ý nghĩa khoa học: Giúp cho việc chuẩn hóa liệu Trên sở nghiên cứu tính Liên kết địa chính, sở nghiên cứu đế xây dựng tiện ích cập nhật biến động đất đai điều kiện Việt Nam Ý nghĩa thực tiễn: Nghiên cứu góp phần tăng tính chủ động cơng tác quản lý đất đai, không phụ thuộc phần lớn vào phần mềm nước ngồi chưa có tính tiện dụng với công tác quản lý đất đai nước ta Cấu trúc luận văn Các nội dung kết nghiên cứu chủ yếu luận văn trình bày chương gồm 84 trang với 46 hình minh họa 81 getHalfEdgeInsertSQL(NextOfLastVertex.Id, nNewFisrtFace, Connection.GetMaxID("idEdge", "tblHalfEdge") + 1); } vecadDrawing.AddVertex(lastPoint.X, lastPoint.Y, lastPoint.Z); getHalfEdgeInsertSQL(lastVertexOfSecondFace, nNewFisrtFace, nNewFistEdge - 1); nEnt = vecadDrawing.AddPolyline(0 /*CAD_PLINE_LINEAR*/, 1); //vecadDrawing.EntityPutUserData(nEnt, Id); vecadDrawing.Update(); dcelFace lastFace = dcelFaceControl.getFaceById(nNewFisrtFace); lastFace.UpdatePreviousEdge(); //Status String strUpdate = "UPDATE tblFace SET status = WHERE idFace = " + nIdFace; Connection.Execute(strUpdate); Connection.Execute("UPDATE tblFace SET parentFace = " + nIdFace + " WHERE idFace = " + lastFace.Id); } public static void ChiaThuaQH(AxVECAD_OCXLib.AxVecad vecadDrawing, dcelPoint firstPoint, dcelPoint lastPoint, dcelVertex firstVertex, dcelVertex lastVertex, int nIdFace, dcelLine lineQH, int nForSide) { vecadDrawing.ClearVertices(); vecadDrawing.AddVertex(firstVertex.DX, firstVertex.DY, firstVertex.DZ); dcelPoint pTestCCW = new dcelPoint(firstVertex.DX, firstVertex.DY, firstVertex.DZ); // Diem lay tu man hinh int nForSideTest = MathControl.ccw(pTestCCW, lineQH.startPoint, lineQH.endPoint); bool bSameSide = (nForSideTest == nForSide); vecadDrawing.AddVertex(firstPoint.X, firstPoint.Y, firstPoint.Z); vecadDrawing.AddVertex(lastPoint.X, lastPoint.Y, lastPoint.Z); dcelHalfEdge edge = dcelHalfEdge.getEdgeByOriginVertex(lastVertex.Id, nIdFace); dcelVertex NextOfLastVertex = edge.getNextEdge().getOriginVertex(); vecadDrawing.AddVertex(NextOfLastVertex.DX, NextOfLastVertex.DY, NextOfLastVertex.DZ); while (true) { edge = edge.getNextEdge(); NextOfLastVertex = edge.getNextEdge().getOriginVertex(); vecadDrawing.AddVertex(NextOfLastVertex.DX, NextOfLastVertex.DY, NextOfLastVertex.DZ); 82 if (NextOfLastVertex.Id == firstVertex.Id) break; } int nEnt = vecadDrawing.AddPolyline(0 /*CAD_PLINE_LINEAR*/, 1); //vecadDrawing.EntityPutUserData(nEnt, Id); if (bSameSide) vecadDrawing.EntityPutColor(nEnt, 3); else vecadDrawing.EntityPutColor(nEnt, 5); //vecadDrawing.Pline vecadDrawing.Update(); //Next Face vecadDrawing.ClearVertices(); vecadDrawing.AddVertex(firstPoint.X, firstPoint.Y, firstPoint.Z); dcelHalfEdge edgeFirst = dcelHalfEdge.getEdgeByOriginVertex(firstVertex.Id, nIdFace); NextOfLastVertex = edgeFirst.getNextEdge().getOriginVertex(); vecadDrawing.AddVertex(NextOfLastVertex.DX, NextOfLastVertex.DY, NextOfLastVertex.DZ); while (true) { if (NextOfLastVertex.Id == lastVertex.Id) break; edgeFirst = edgeFirst.getNextEdge(); NextOfLastVertex = edgeFirst.getNextEdge().getOriginVertex(); vecadDrawing.AddVertex(NextOfLastVertex.DX, NextOfLastVertex.DY, NextOfLastVertex.DZ); } vecadDrawing.AddVertex(lastPoint.X, lastPoint.Y, lastPoint.Z); nEnt = vecadDrawing.AddPolyline(0 /*CAD_PLINE_LINEAR*/, 1); //vecadDrawing.EntityPutUserData(nEnt, Id); if (!bSameSide) vecadDrawing.EntityPutColor(nEnt, 3); else vecadDrawing.EntityPutColor(nEnt, 5); vecadDrawing.Update(); } public static void QuyHoach(AxVECAD_OCXLib.AxVecad vecadDrawing, int hLineQH, ArrayList arrFace, dcelPoint pTestCCW) { dcelLine lineQH = dcelLine.getLineFromVecad(vecadDrawing, hLineQH); ArrayList arrPointQH = new ArrayList(); if (arrFace != null) { foreach (dcelFace item in arrFace) { item.getArrInterPoint(lineQH); ArrayList arrPoint = item.getArrInterPoint(); 83 //if (arrPoint != null) // arrPointQH.Add(arrPoint); if(item.QuyHoachAvailable()) { //dcelPoint pTestCCW = new dcelPoint(0,0,0); // Diem lay tu man hinh int nForSide = MathControl.ccw(pTestCCW,lineQH.startPoint,lineQH.endPoint); ChiaThuaQH(vecadDrawing, (dcelPoint)arrPoint[0], (dcelPoint)arrPoint[1], item.GetFirstVertexQH(), item.GetLastVertexQH(), item.Id, lineQH, nForSide); } } } //foreach (ArrayList itemArrLine in arrPointQH) //{ // foreach (dcelPoint item in itemArrLine) // { // vecadDrawing.AddPoint(item.X, item.Y, item.Z); // } //} //vecadDrawing.Update(); } public static void NhapThua(AxVECAD_OCXLib.AxVecad vecadDrawing, ArrayList arrParcelNhap) { //Check Nhap Thua able, gia su truong hop chi co thua int nFirstEnt = Convert.ToInt32(arrParcelNhap[0]); int nIdFirstFace = vecadDrawing.EntityGetUserData(nFirstEnt); int nLastEnt = Convert.ToInt32(arrParcelNhap[1]); int nIdLastFace = vecadDrawing.EntityGetUserData(nLastEnt); dcelFace firstFace = dcelFaceControl.getFaceById(nIdFirstFace); dcelFace lastFace = dcelFaceControl.getFaceById(nIdLastFace); dcelHalfEdge firstEdge = firstFace.getFirstEdge(); dcelHalfEdge edge = firstEdge; //Tim duoc Edge co Twin voi Edge cua Face last dcelHalfEdge edgeLastFaceTwin = null; while(true) { edgeLastFaceTwin = lastFace.checkTwin(edge); if(edgeLastFaceTwin!=null) break; edge = edge.getNextEdge(); if (edge.Id == firstEdge.Id) { //edgeLastFaceTwin break; } } //Bat dau thiet ke thua gop ArrayList arrEdge = new ArrayList(); 84 dcelVertex firstVertex = edge.getOriginVertex(); dcelHalfEdge firstEdgeNhap = dcelHalfEdge.getEdgeByOriginVertex(firstVertex.Id, lastFace.Id); // Lay Edge cua Face thu nhat arrEdge.Add(firstEdgeNhap); while(true) { firstEdgeNhap = firstEdgeNhap.getNextEdge(); if (firstEdgeNhap.Id == edgeLastFaceTwin.Id) break; arrEdge.Add(firstEdgeNhap); } // Lay Edge cua Face thu hai firstVertex = firstEdgeNhap.getOriginVertex(); firstEdgeNhap = dcelHalfEdge.getEdgeByOriginVertex(firstVertex.Id, firstFace.Id); arrEdge.Add(firstEdgeNhap); while (true) { firstEdgeNhap = firstEdgeNhap.getNextEdge(); if (firstEdgeNhap.getOriginVertex().Id == edgeLastFaceTwin.getNextEdge().getOriginVertex().Id) break; arrEdge.Add(firstEdgeNhap); } //Ve thua vecadDrawing.ClearVertices(); int nCount = 0; int nNewFistEdge = Connection.GetMaxID("idEdge", "tblHalfEdge") + 1;//Id cua Edge dau tien int nNewMergeFace = getFaceInsertSQL(nNewFistEdge, true);//Get the id of Face dcelHalfEdge dcelLastMerge = (dcelHalfEdge)arrEdge[arrEdge.Count-1]; foreach (dcelHalfEdge item in arrEdge) { dcelVertex originVertex = item.getOriginVertex(); vecadDrawing.AddVertex(originVertex.DX, originVertex.DY, originVertex.DZ); nCount++; if (item.Id == dcelLastMerge.Id) getHalfEdgeInsertSQL(originVertex.Id, nNewMergeFace, nNewFistEdge - 1); else getHalfEdgeInsertSQL(originVertex.Id, nNewMergeFace, Connection.GetMaxID("idEdge", "tblHalfEdge") + 1); } //MessageBox.Show(""+nCount); int nEnt = vecadDrawing.AddPolyline(0 /*CAD_PLINE_LINEAR*/, 1); //vecadDrawing.EntityPutUserData(nEnt, Id); vecadDrawing.EntityPutColor(nEnt, 3); vecadDrawing.Update(); 85 dcelFace newFace = dcelFaceControl.getFaceById(nNewMergeFace); newFace.UpdatePreviousEdge(); Connection.Execute("UPDATE tblFace SET status = WHERE idFace = " + firstFace.Id); Connection.Execute("UPDATE tblFace SET status = WHERE idFace = " + lastFace.Id); Connection.Execute("INSERT INTO tblFaceMerge VALUES (" + newFace.Id + "," + firstFace.Id + ")"); Connection.Execute("INSERT INTO tblFaceMerge VALUES (" + newFace.Id + "," + lastFace.Id + ")"); } public static void CreateFace(ArrayList arrPoint, AxVECAD_OCXLib.AxVecad vecadDrawing) { vecadDrawing.ClearVertices(); int nCount = 0; int nNewFistEdge = Connection.GetMaxID("idEdge", "tblHalfEdge") + 1;//Id cua Edge dau tien int nNewMergeFace = getFaceInsertSQL(nNewFistEdge, false);//Get the id of Face int nVertexIDNext = 0; int nEdgeIDNext = 0; foreach (dcelPoint item in arrPoint) { vecadDrawing.AddVertex(item.X, item.Y, item.Z); nCount++; if (item.IdVertex == 0) nVertexIDNext = getVertexInsertSQL(item); else nVertexIDNext = item.IdVertex; if (nCount == arrPoint.Count) nEdgeIDNext = getHalfEdgeInsertSQL(nVertexIDNext, nNewMergeFace, nNewFistEdge - 1); else nEdgeIDNext = getHalfEdgeInsertSQL(nVertexIDNext, nNewMergeFace, Connection.GetMaxID("idEdge", "tblHalfEdge") + 1); if(item.IdVertex == 0) UpdateIncidentEdge(nVertexIDNext, nEdgeIDNext); } //Create last HalfEdge int nEnt = vecadDrawing.AddPolyline(0 /*CAD_PLINE_LINEAR*/, 1); //vecadDrawing.EntityPutUserData(nEnt, Id); vecadDrawing.EntityPutColor(nEnt, 3); vecadDrawing.Update(); dcelFace newFace = dcelFaceControl.getFaceById(nNewMergeFace); newFace.UpdatePreviousEdge(); } public static void DeleteFace(int nID) 86 { Connection.Execute("DELETE tblHalfEdge WHERE incidentFace = " + nID); Connection.Execute("DELETE tblFace WHERE idFace = " + nID); } public static void getPointsParallel(ref dcelPoint firstPoint, ref dcelPoint lastPoint, dcelVertex firstVertex, dcelVertex lastVertex, bool bLeftSide) { } public static void ConvertPolygon2Face(AxVECAD_OCXLib.AxVecad vecadDrawing, int nEntPline) { int nNewEdge = Connection.GetMaxID("idEdge", "tblHalfEdge") + 1;//Id cua Edge dau tien int nNewFace = getFaceInsertSQL(nNewEdge, false);//Get the id of Face int nCount = vecadDrawing.PlineGetNumVers(nEntPline); for(int i=0;i 0); } 88 static public dcelParcel GetParcelById(int nID) { string sqlSelect = "SELECT * FROM tblParcel WHERE idParcel = " + nID; DataSet dsDataSet = Connection.LoadDataBase(sqlSelect); if (dsDataSet.Tables.Count == 0) return null; foreach (DataRow item in dsDataSet.Tables[0].Rows) { dcelParcel parcel = new dcelParcel(); parcel.IdFace = nID; parcel.Sotobando = item["sotobando"].ToString(); parcel.Sothuadat = item["sothuadat"].ToString(); parcel.Tenthuadat = item["tenthuadat"].ToString(); parcel.Dientich = (item["dientich"].ToString() != "") ? Convert.ToDouble(item["dientich"].ToString()) : 0; parcel.Dientichchung = (item["dientichchung"].ToString()!= "")? Convert.ToDouble(item["dientichchung"].ToString()): 0; parcel.Dientichrieng = (item["dientichrieng"].ToString()!= "")? Convert.ToDouble(item["dientichrieng"].ToString()): 0; parcel.Thoihansudung = item["thoihansudung"].ToString(); parcel.Namlapbando = (item["namlapbando"].ToString() != "") ? Convert.ToInt32(item["namlapbando"].ToString()) : 0; parcel.Idmucdich = Convert.ToInt32(item["idmucdich"]); parcel.Idnguongoc = Convert.ToInt32(item["idnguongoc"]); parcel.Diachi = item["diachi"].ToString(); return parcel; } return null; } static public bool LoadDatabase(System.Windows.Forms.DataGridView muckeDataGridView) { string sqlSelect = "SELECT idParcel, sothuadat, dientich,idmucdich FROM tblParcel"; DataSet dsDataSet = Connection.LoadDataBase(sqlSelect); if (dsDataSet.Tables.Count == 0) return false; int nCount = -1; muckeDataGridView.Rows.Clear(); foreach (DataRow item in dsDataSet.Tables[0].Rows) { dcelMucKe mucke = new dcelMucKe(); mucke.Sothuadat = item["sothuadat"].ToString(); mucke.Chusohuu = dcelChuSoHuuControl.GetChuSoHuusNameByIdThuaDat(Convert.ToInt32(item["idP arcel"].ToString())); //mucke.Loaidoituong = dcelChuSoHuuControl.GetLoaiDoiTuong(Convert.ToInt32(item["idloai"].ToStri ng())); mucke.Dientich = (item["dientich"].ToString() != "") ? Convert.ToDouble(item["dientich"].ToString()) : 0; mucke.Mucdichsudung = dcelMucDichControl.GetAllMucDichById(Convert.ToInt32(item["idmucdich"].To String())).Name; 89 nCount++; muckeDataGridView.Rows.Add(); //Format Font muckeDataGridView.Rows[nCount].Cells[1].Style.BackColor = Color.LightGray; muckeDataGridView.Rows[nCount].Cells[0].Value = (nCount + 1); muckeDataGridView.Rows[nCount].Cells[1].Value = mucke.Sothuadat; muckeDataGridView.Rows[nCount].Cells[2].Value = mucke.Chusohuu; muckeDataGridView.Rows[nCount].Cells[3].Value = mucke.Loaidoituong; muckeDataGridView.Rows[nCount].Cells[4].Value = mucke.Dientich; muckeDataGridView.Rows[nCount].Cells[5].Value = mucke.Mucdichsudung; } if (muckeDataGridView.Rows.Count > 1) { muckeDataGridView.Rows[1].Selected = true; muckeDataGridView.Rows[0].Selected = true; } return true; } } } 90 using using using using using using using System; System.Collections; System.Collections.Generic; System.Text; System.Data; System.Data.SqlClient; QuanLyDoThi.Control; namespace QuanLyDoThi.Model { class dcelFace { private int id; private int edge; private bool status; private int parentFace; public DateTime DOB; private ArrayList arrPointQH = new ArrayList(); dcelPoint firstPoint, lastPoint; dcelVertex firstVertex, lastVertex; public int ParentFace { get { return parentFace; } set { parentFace = value; } } public bool Status { get { return status; } set { status = value; } } //private ArrayList arrEdge = new ArrayList(); public int Id { get { return id; } set { id = value; } } public int Edge { get { return edge; } set { edge = value; } } public dcelHalfEdge getFirstEdge() { string sqlSelect = "SELECT * FROM tblHalfEdge WHERE idEdge = " + Edge; DataSet dsDataSet = Connection.LoadDataBase(sqlSelect); if (dsDataSet.Tables.Count == 0) return null; dcelHalfEdge edge = null; foreach (DataRow item in dsDataSet.Tables[0].Rows) { edge = new dcelHalfEdge(); edge.Id = Convert.ToInt32(item["idEdge"]); edge.OriginVertex = Convert.ToInt32(item["idOriginVertex"]); String sIDTwin = item["idTwin"].ToString(); 91 if (sIDTwin != "") edge.Twin = Convert.ToInt32(item["idTwin"]); else edge.Twin = 0; edge.IncidentFace = Convert.ToInt32(item["incidentFace"]); edge.NextHE = Convert.ToInt32(item["next"]); String sPrev = item["prev"].ToString(); if (sPrev != "") edge.PrevHE = Convert.ToInt32(item["prev"]); else edge.PrevHE = 0; //arrEdge.Add(edge); } return edge; } public void drawFace(AxVECAD_OCXLib.AxVecad vecadDrawing) { dcelHalfEdge firstEdge = getFirstEdge(); if(firstEdge == null) return; dcelVertex vertex = firstEdge.getOriginVertex(); vecadDrawing.ClearVertices(); vecadDrawing.AddVertex(vertex.DX,vertex.DY,vertex.DZ); int hText = vecadDrawing.AddText(vertex.Id.ToString(), vertex.DX, vertex.DY, vertex.DZ); vecadDrawing.TextPutHeight(hText, 1); double xCenter = vertex.DX; double yCenter = vertex.DY; int nCount = 1; dcelHalfEdge nextEdge = firstEdge; while ((nextEdge = nextEdge.getNextEdge()) != null) { if (firstEdge.getOriginVertex().Id == nextEdge.getOriginVertex().Id) break; else { vertex = nextEdge.getOriginVertex(); vecadDrawing.AddVertex(vertex.DX,vertex.DY,vertex.DZ); hText = vecadDrawing.AddText(vertex.Id.ToString(), vertex.DX, vertex.DY, vertex.DZ); vecadDrawing.TextPutAlign(hText,4);//CAD_TA_MIDCENTER vecadDrawing.TextPutHeight(hText, 1); xCenter += vertex.DX; yCenter += vertex.DY; nCount++; } } int nEnt = vecadDrawing.AddPolyline(0 /*CAD_PLINE_LINEAR*/, 1); vecadDrawing.EntityPutUserData(nEnt, Id); 92 //double dArea = vecadDrawing.PlineGetArea(nEnt); //string sUpdateArea = "UPDATE tblParcel SET dientich = " + dArea + " WHERE idParcel = " + this.id; //Connection.Execute(sUpdateArea); //insert parcel id xCenter = xCenter/nCount; yCenter = yCenter / nCount; hText = vecadDrawing.AddText(this.id.ToString(), xCenter, yCenter, 0); vecadDrawing.TextPutHeight(hText, 2); vecadDrawing.EntityPutColor(hText, 5); vecadDrawing.Update(); } public dcelPoint GetCenterPoint() { dcelPoint point = new dcelPoint(); dcelHalfEdge firstEdge = getFirstEdge(); if (firstEdge == null) return null; dcelVertex vertex = firstEdge.getOriginVertex(); double xCenter = vertex.DX; double yCenter = vertex.DY; int nCount = 1; dcelHalfEdge nextEdge = firstEdge; while ((nextEdge = nextEdge.getNextEdge()) != null) { if (firstEdge.getOriginVertex().Id == nextEdge.getOriginVertex().Id) break; else { vertex = nextEdge.getOriginVertex(); xCenter += vertex.DX; yCenter += vertex.DY; nCount++; } } //insert parcel id point.X = xCenter / nCount; point.Y = yCenter / nCount; return point; } public dcelHalfEdge checkTwin(dcelHalfEdge edgeCheck) { dcelHalfEdge firstEdge = getFirstEdge(); dcelHalfEdge edge = firstEdge; 93 while( true ) { if (edgeCheck.getOriginVertex().Id == edge.getNextEdge().getOriginVertex().Id && edgeCheck.getNextEdge().getOriginVertex().Id == edge.getOriginVertex().Id) return edge; edge = edge.getNextEdge(); if (edge.Id == firstEdge.Id) return null; } return null; } public void UpdatePreviousEdge() { dcelHalfEdge firstEdge = getFirstEdge(); dcelHalfEdge edge = null; while (true) { edge = firstEdge.getPreviousEdge(); if (edge != null) Connection.Execute("UPDATE tblHalfEdge SET prev = " + edge.Id + " WHERE idEdge = " + firstEdge.Id); firstEdge = firstEdge.getNextEdge(); if (firstEdge.Id == getFirstEdge().Id) { //edge = firstEdge.getPreviousEdge(); //if (edge != null) // Connection.Execute("UPDATE tblHalfEdge SET prev = " + firstEdge.Id + " WHERE idEdge = " + edge.Id); break; } } } public void UpdateTwin() { dcelHalfEdge firstEdge = getFirstEdge(); dcelHalfEdge edge = null; while (true) { edge = firstEdge.getPreviousEdge(); if (edge != null) { dcelHalfEdge edgeNext = edge.getNextEdge(); int nIDOriginVertex = edgeNext.getOriginVertex().Id; ArrayList ARRedgeCheck = dcelHalfEdge.getEdgeByOriginVertexAllFace(nIDOriginVertex,0); //Find By All Face foreach (dcelHalfEdge item in ARRedgeCheck) { dcelHalfEdge edgeCheckNext = item.getNextEdge(); if (edgeCheckNext.getOriginVertex().Id == edge.getOriginVertex().Id) { Connection.Execute("UPDATE tblHalfEdge SET idTwin = " + item.Id + " WHERE idEdge = " + edge.Id); } } 94 } firstEdge = firstEdge.getNextEdge(); if (firstEdge.Id == getFirstEdge().Id) break; } } public dcelFace GetParentFace() { string sqlSelect = "SELECT * FROM tblFace WHERE idFace = " + ParentFace; DataSet dsDataSet = Connection.LoadDataBase(sqlSelect); if (dsDataSet.Tables.Count == 0) return null; dcelFace face = null; foreach (DataRow item in dsDataSet.Tables[0].Rows) { face = new dcelFace(); face.Id = Convert.ToInt32(item["idFace"]); face.Edge = Convert.ToInt32(item["idEdge"]); face.Status = Convert.ToBoolean(item["status"]); face.ParentFace = Convert.ToInt32(item["parentFace"]); String sDOB = item["DOB"].ToString(); if (sDOB != "") face.DOB = Convert.ToDateTime(item["DOB"]); else face.DOB = Convert.ToDateTime("01-01-1970"); ; return face; } return face; } public ArrayList getArrInterPoint() { return arrPointQH; } public void getArrInterPoint(dcelLine lineQH) { dcelHalfEdge firstEdge = getFirstEdge(); if (firstEdge == null) return; dcelVertex vertex = firstEdge.getOriginVertex(); dcelPoint firstPoint = new dcelPoint(vertex.DX, vertex.DY, 0); dcelLine line = new dcelLine(); line.startPoint = firstPoint; dcelHalfEdge nextEdge = firstEdge; int nCount = 0; //Check thu tu giao diem while ((nextEdge = nextEdge.getNextEdge()) != null) { if (firstEdge.getOriginVertex().Id == nextEdge.getOriginVertex().Id) { line.endPoint = firstPoint; dcelPoint point = MathControl.getGiaoDiem(line, lineQH); if (point != null) 95 { nCount++; if(nCount==1) firstVertex = nextEdge.getPreviousEdge().getOriginVertex(); else if (nCount == 2) lastVertex = nextEdge.getPreviousEdge().getOriginVertex(); arrPointQH.Add(point); } break; } else { vertex = nextEdge.getOriginVertex(); line.endPoint = new dcelPoint(vertex.DX, vertex.DY, 0); dcelPoint point = MathControl.getGiaoDiem(line, lineQH); if (point != null) { nCount++; if (nCount == 1) firstVertex = nextEdge.getPreviousEdge().getOriginVertex(); else if (nCount == 2) lastVertex = nextEdge.getPreviousEdge().getOriginVertex(); arrPointQH.Add(point); } line.startPoint = new dcelPoint(vertex.DX, vertex.DY, 0); } } } public bool QuyHoachAvailable() { return (arrPointQH.Count == 2); } public dcelVertex GetFirstVertexQH() { return firstVertex; } public dcelVertex GetLastVertexQH() { return lastVertex; } } } ... nghiên cứu đề tài ? ?Nghiên cứu cấu trúc đối tượng Liên kết địa phục vụ cơng tác quản lý đất đai? ?? Mục tiêu nghiên cứu Xây dựng phần mềm sử dụng sở liệu địa dựa đối tượng Liên kết địa chính, quản lý. .. Liên kết địa Xây dựng phần mềm mô phỏng, bước áp dụng chức Liên kết địa phục vụ cơng tác quản lý đất đai Nội dung nghiên cứu Nghiên cứu cấu trúc chế hoạt động đối tượng Liên kết địa phục vụ quản. .. Job liên kết địa Kết cấu địa hỗ trợ cho job hiệu chỉnh, chỉnh sửa cập nhật tới đất hiệu chỉnh quản lý job kết cấu địa Hình 1.3 Tạo job kết cấu địa 1.1.3 Tạo Trong job kết cấu địa chính, liệu đất

Ngày đăng: 30/05/2021, 15:39

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan