Trọng tâm chính là hỗ trợ các công ty thành viên trong Vinacomin Tập đoàn Công nghiệp Than và Khoáng sản Việt Namquản lý dữ liệu bản đồ của họ.Quản lý phiên bản là một hệ thống lưu trữ c
Trang 1ĐẠI HỌC BÁCH KHOA HÀ NỘI TRƯỜNG ĐIỆN – ĐIỆN TỬ
***** □&□ *****
BÁO CÁO ĐỒ ÁN THIẾT KẾ I
ĐỀ TÀI: PHÁT TRIỂN ỨNG DỤNG QUẢN LÝ PHIÊN BẢN DỮ LIỆU ĐỊA KHÔNG GIAN CHO
MÔI TRƯỜNG AUTOCAD
Sinh viên thực hiện: Nguyễn Phi San – 20203555
Cao Thanh Tùng – 20203779 Mai Quang Tùng - 20203780 Giảng viên hướng dẫn: TS Đào Trung Kiên
Hà Nội, 08/2023
Trang 2MỤC LỤC
LỜI MỞ ĐẦU 3
CHƯƠNG I TỔNG QUAN ĐỀ TÀI 4
1.1 Khảo sát hiện trạng 4
1.1.1 Nghiệp vụ của ứng dụng hiện tại 4
1.1.2 Nhược điểm của ứng dụng hiện tại 4
1.1.3 Lý do cần sử dụng ứng dụng 4
1.2 Mục đích của dự án 4
1.3 Xác lập dự án 5
1.4 Tìm hiểu yêu cầu 5
CHƯƠNG II CÁC CÔNG CỤ SỬ DỤNG 7
2.1 AutoCAD 7
2.2 PostgreSQL 8
2.3 PostGIS 9
2.4 NodeJS, NPM 10
CHƯƠNG III PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 11
3.1 Sơ đồ chức năng 11
3.2 Lấy dữ liệu từ bản đồ 12
3.3 Tạo lại bản đồ từ dữ liệu 20
CHƯƠNG IV THIẾT KẾ CƠ SỞ DỮ LIỆU 30
4.1 Tạo server 30
4.2 Xây dựng Database 32
4.2.1 Tạo Database 32
4.2.2 Cài đặt PostGIS 33
4.2.3 Các luồng dữ liệu 33
Trang 34.2.4 Tạo các bảng 34
4.2.5 Sơ đồ thực thể liên kết 36
4.3 Kết nối Database PostgreSQL với NodeJS 37
4.4 Thao tác với API 38
4.4.1 Lập trình các tính năng CRUD cho API 38
4.4.2 Kiểm thử bằng Postman 41
4.5 Xử lý bất đồng bộ 44
4.5.1 Đồng bộ và bất đồng bộ 44
4.5.2 Promise 45
4.5.3 Async/await 45
4.6 Xử lý dữ liệu từ API 47
4.6.1 Gửi dữ liệu tới API bằng curl 47
4.6.2 Nhận dữ liệu từ API 49
4.7 Xử lý dữ liệu 50
4.8 Thêm dữ liệu vào Database 53
4.9 Gửi dữ liệu từ Database tới API để tạo lại bản vẽ 54
4.9.1 Gửi dữ liệu từ Database 54
4.9.2 Kết nối từ client đến API (sử dụng C++) 54
4.10 Tối ưu dữ liệu nhập vào Database 55
KẾT LUẬN 58
PHỤ LỤC 59
Trang 5LỜI MỞ ĐẦU
Bối cảnh của đề tài nằm trong một dự án cấp quốc gia sắp được triển khai của Việt Nam, đang chờ Bộ Khoa học và Công nghệ phê duyệt Mục đích là để thúc đẩy chuyển đổi kỹ thuật số trong ngành khai thác than Trọng tâm chính là hỗ trợ các công
ty thành viên trong Vinacomin (Tập đoàn Công nghiệp Than và Khoáng sản Việt Nam)quản lý dữ liệu bản đồ của họ
Quản lý phiên bản là một hệ thống lưu trữ các thay đổi của một tập tin (file) hoặc tập hợp các tập tin theo thời gian, do đó nó giúp bạn có thể quay lại một phiên bản xác định nào đó sau này Mặc dù các ví dụ trong cuốn sách này sử dụng mã nguồn của phần mềm là đối tượng cho quản lý phiên bản, song trong thực thế bất kỳ loại file nào trên máy tính cũng có thể được sử dụng cho quản lý phiên bản
Để nâng cao vốn kiến thức và có thêm kinh nghiệm về lập trình, nhóm em thực
hiện đề tài Phát triển ứng dụng quản lý phiên bản dữ liệu địa không gian cho môi trường AutoCAD dưới sự hướng dẫn của thầy Đào Trung Kiên Trong quá trình thực
hiện, do hạn chế về hiểu biết nên nhóm em không tránh khỏi những sai sót và chậm trễ, chúng em rất mong nhận được những góp ý và chỉ bảo từ thầy
Chúng em xin chân thành cảm ơn!
Trang 6CHƯƠNG I TỔNG QUAN ĐỀ TÀI 1.1 Khảo sát hiện trạng
1.1.1 Nghiệp vụ của ứng dụng hiện tại
Ứng dụng quản lý phiên bản dữ liệu địa không gian cho môi trường AutoCAD có nghiệp vụ như sau:
Người dùng có thể thao tác các tính năng trên giao diện phần mềm (Đưa bản vẽ lên hệ thống, chỉnh sửa, thêm bớt dữ liệu,…)
Server tiếp nhận thông tin của người dùng, xử lý dữ liệu, đưa ra thông báo về các phiên bản dữ liệu cho người dùng…
1.1.2 Nhược điểm của ứng dụng hiện tại
Ứng dụng chưa hoàn thiện, cần thêm nhiều chức năng phù hợp với người dùng Trên thị trường đã có những phần mềm quản lý phiên bản như Github, Gitlab,… nhưng không áp dụng được với AutoCAD
về, chỉnh sửa rồi gửi lại Trong lúc ấy, nếu các thành viên đều chỉnh sửa và mỗi người
có nội dung sửa riêng thì nhóm sẽ rất khó để nắm bắt cũng như phối hợp
Đây là những phương pháp rất phổ biến bởi vì nó rất đơn giản, tuy nhiên nó
cũng rất dễ gây ra lỗi Do đó, Ứng dụng quản lý phiên bản dữ liệu địa không gian
cho môi trường AutoCAD ra đời để đáp ứng những hạn chế trên.
1.2 Mục đích của dự án
Dự kiến lập trình Ứng dụng quản lý phiên bản dữ liệu địa không gian cho
môi trường AutoCAD đạt được các mục tiêu chính sau:
Đưa dữ liệu các bản vẽ lên hệ thống
Trang 7Hiển thị trạng thái của dữ liệu tại các phiên bản.
Tìm kiếm, tra cứu thông tin bản vẽ
Lưu thông tin bản vẽ vào cơ sở dữ liệu
Tái tạo bản vẽ từ thông tin trong cơ sở dữ liệu
1.3 Xác lập dự án
Dự án xây dựng và phát triển Ứng dụng quản lý phiên bản dữ liệu địa không
gian cho môi trường AutoCAD có:
Quy mô: Đề tài cấp quốc gia
Phạm vi: Môi trường AutoCAD
Lĩnh vực: Quản lý phiên bản dữ liệu
Chức năng: Giúp người dùng, nhóm người dùng dễ dàng trao đổi thông tin, dữ liệu bản vẽ
Mục tiêu: Khắc phục các yếu kém hiện tại, đáp ứng yêu cầu trong tương lai
1.4 Tìm hiểu yêu cầu
Ứng dụng, phần mềm
định sử dụng là gì?
Đương nhiên là có AutoCAD, có sử dụng web để dễ thao tác lưu truyền số liệu
Yêu cầu về giao diện
Giao diện đơn giản, dễ tiếp cận và dễ sử dụng, trực quan về các chức năng và phải tương thích với người dùng
Yêu cầu thao tác Người dùng bên phía client thay đổi hay commit đều phải có sự ghi lại thời gian, nội dung thay đổiViệc quản lý thông tin
người dùng gồm có gì? Mã số người dùng, họ tên nhân viên, email, passwordViệc quản lý thông tin dữ
liễu bản đồ
Dữ liệu bản đồ bên phía AutoCAD truyền lên có độ tương thích xuống cơ sở dữ liệu để có thể phục hồi lại hình vẽ
Chức năng của trang
web sẽ có những chức
năng gì ?
- Đăng nhập, xuất cho người dùng
- Hiển thị dữ liệu bản đồ
- Hiển thị truy cập chỉnh, sửa những người dùng khác
- Truy xuất thu thập dữ liệu đã có
Yêu cầu về người dùng Cung cấp đủ những thông tin cần thiết
Trang 8Anh/chị có yêu cầu thêm
Trang 9CHƯƠNG II CÁC CÔNG CỤ SỬ DỤNG 2.1 AutoCAD
Giới thiệu chung
AutoCAD là tên viết tắt của cụm từ “Automatic Computer Aided Design” Phầnmềm này được Autodesk phát triển và ra mắt năm 1982 với tính năng chính là soạn thảo, thiết kế các bản vẽ 2D và 3D với sự trợ giúp của máy tính Với công cụ này, người dùng có thể thực hiện các phép tính và tái hiện những ý tưởng của mình dưới dạng bản vẽ kỹ thuật với độ chính xác cần thiết Vì vậy nó được sử dụng trong nhiều lĩnh vực khác nhau như kiến trúc, xây dựng, công nghiệp…
Một số tính năng nổi bật của AutoCAD
Những tính năng nổi trội nhất của phần mềm AutoCAD có thể kể đến như:
- Công cụ vector giúp vẽ theo tỉ lệ đạt độ chính xác cao
- Các công cụ căn chỉnh, tùy chỉnh kích thước nhằm gia tăng độ chính xác
- Giúp tính toán và tìm ra kích thước của mô hình trên thực tế
- Xác định số lượng vật liệu cần dùng để tạo ra chi tiết
- Soạn thảo, sửa chữa hình học 2D, 3D đối với các bề mặt không gian, chất rắn, đối tượng lớn
- Tự động tạo lịch biểu, lớp, bảng, danh sách, chú thích…
Trang 10- Dựa trên các quy tắc để thực thi một cách chính xác theo đúng tiêu chuẩn trong ngành
- Vẽ các đường tròn, đường ống dẫn… vô cùng đơn giản
2.2 PostgreSQL
Tổng quan về PostgreSQL
PostgreSQL là một hệ thống quản trị cơ sở dữ liệu quan hệ và đối tượng relational database management system) miễn phí và nguồn mở (RDBMS) tiên tiến nhất hiện nay khả năng mở rộng cao và tuân thủ các tiêu chuẩn kỹ thuật Nó được thiết kế để xử lý một loạt các khối lượng công việc lớn, từ các máy tính cá nhân đến kho dữ liệu hoặc dịch vụ Web có nhiều người dùng đồng thời
(object PostgreSQL được phát triển bởi PostgreSQL Global Development Group, Phát hành lần đầu: 08/07/1996
- PostgreSQL linh động có thể chạy được trên nhiều nền tảng khác nhau như Mac
Trang 11PostgreSQL tích hợp nhiều tính năng tuyệt vời giúp hỗ trợ nhà phát triển xây dựng app đáp ứng các chức năng phức tạp, truy vấn nhanh chóng và bảo mật duy trì tính toàn vẹn và độ tin cậy Để đáng tin cậy hơn, PostgreSQL cung cấp các tùy chọn bảo mật, xác thực và khôi phục thảm họa khác nhau PostgreSQL được chứng minh là có khả năng mở rộng cao cả về số lượng dữ liệu và số lượng người dùng có thể thao tác cùng lúc.
2.3 PostGIS
PostGIS được Refraction Research Inc phát triển, như một dự án nghiên c u công ӭnghệ CSDL không gian PostGIS hỗ trợ đối tượng địa lý cho CSDL đối tượng quan hệ PostgreSQL PostGIS “kích hoạt khả năng không gian” cho PostgreSQL, cho phép PostgreSQL sử dụng như một CSDL không gian phụ trợ cho các hệ thống thông tin địa
lý (GIS)
Đặc điểm
Do PostGIS được sử dụng như một CSDL không gian, nên nó bao gồm tất cả các đặc điểm của CSDL không gian Ngoài ra, nó còn có những đặc trưng như :
- Các kiểu dữ hình học như Point, Linestring, Polygon, Multipoint,
multilinestring, Multipolygons và Geometrycollection Các kiểu dữ liệu hình học này được lưu trữ như những đối tượng hình học
- Các toán tử không gian cho phép xác định các phép đo không gian địa lý như tính diện tích, tính khoảng cách, tính độ dài, và tính chu vi PostGIS hỗ trợ các hàm như : ST_Area(), ST_Length(), ST_Perimeter(), ST_Distance()…các hàm này thường thực hiện ch c năng kiểu phép đo ӭ
- Các toán tử không gian cho phép xác định không gian địa lý Các thao tác như phép hợp, so sánh sự khác nhau giữa các đối tượng hình học Các toán tử được PostGIS hỗ trợ để làm việc này có thể là : ST_Difference() : trả về phần khác nhau giữa 2 đối tượng hình học hay hàm ST_Buffer()…
Trang 12- PostGIS cung cấp việc đánh chỉ mục không gian tốc độ cao sử dụng GisT hoặc R-tree Công cụ đánh chỉ mục không gian mà PostGIS hỗ trợ làm tăng tốc cho truy vấn không gian đặc biệt là trên bảng dữ liệu lớn
- Chỉ mục hỗ trợ chọn lọc, cung cấp việc thực hiện truy vấn bản đồ pha trộn truy vấn không gian hoặc truy vấn không có không gian
Cài đặt PostgreSQL
Các bước cài đặt được nêu ở trang chủ PostgreSQL:
Link: PostgreSQL: Downloads
2.4 NodeJS, NPM
NodeJS là một môi trường runtime chạy JavaScript đa nền tảng và có mã nguồn
mở, được sử dụng để chạy các ứng dụng web bên ngoài trình duyệt của client Nền tảng này được phát triển bởi Ryan Dahl vào năm 2009, được xem là một giải pháp hoàn hảo cho các ứng dụng sử dụng nhiều dữ liệu nhờ vào mô hình hướng sự kiện (event-driven) không đồng bộ
NPM là viết tắt của Node package manager là một công cụ tạo và quản lý các thư viện lập trình Javascript cho Node.js Trong cộng đồng Javascript, các lập trình viên chia sẻ hàng trăm nghìn các thư viện với các đoạn code đã thực hiện sẵn một chức năng nào đó Nó giúp cho các dự án mới tránh phải viết lại các thành phần cơ bản, các thư viện lập trình hay thậm chí cả các framework
Các bước cài đặt được nêu rõ ở trang chủ của nodeJS:
Link: Node.js (nodejs.org)
Trang 13CHƯƠNG III PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
Vẽ lại được bản đồ
2 Quản lý người dùng
Tạo người dùng mới Lấy, tìm kiếm dữ liệu người dùng Chỉnh sửa thông tin người dùng Xóa tài khoản người dung
3 Quản lí dữ liệu đối tượng trong bản đồ (objects)
Thêm đối tượng mới Lấy thông tin, tìm kiếm dữ liệu đối tượng
b n đồồ ả
3.1 Thêm đồấi
t ượ ng
3.2 Lấấy thồng tin, tìm kiêấm d li u ữ ệ đồấi t ượ ng
3.3 Ch nh s a ỉ ử thồng tin đồấi
t ượ ng
3.4 Xoá đồấi t ng
4 Qu n lí d li u ả ữ ệ commit
4.1 T o commit ạ
m i ớ
4.2 Tìm kiêấm các lấồn commit trên h ệ thồấng
4.3 Hi n th thồng ể ị tin commit
5 Trao đ i ổ
5.1 Thiêất l p giao ậ tiêấp v i ng ớ ườ i dung khác
5.2 Ph n hồồi v i ả ớ các lấồn commit
Trang 14Cách sử dụng
Để sử dụng hàm async, ta cần khai báo từ khóa async ngay trước từ khóa định nghĩa hàm Tức là, với hàm định nghĩa với từ khóa function ta phải khai báo ngay trước function, với hàm mũi tên (arrow function) ta phải khai báo trước tập tham số đầu vào
async function asyncCall() {
console log ( 'calling');
const result = await resolveAfter2Seconds();
từ khóa return của hàm async, hoặc trạng thái thất bại với kết quả được đẩy qua từ khóa throw trong hàm async Như vậy,chúng ta có thể thấy bản chất của hàm async chính là Promise
Trang 15Với Promise, ta có thể xử lý ngoại lệ với catch khá đơn giản Tuy nhiên cũng không dễdàng theo dõi và dễ đọc Nhưng với hàm async, việc này cực kì đơn giản bằng từ khóa try catch hệt như các thao tác đồng bộ.
Do vậy, tương tự như khi kết nối Database bằng NodeJS, các hàm thực hiện chức năngđều cần sử dụng async/await, giúp cho việc xử lý dữ liệu hiệu quả hơn
4.6 Xử lý dữ liệu từ API
4.6.1 Gửi dữ liệu tới API bằng curl
Dữ liệu JSON được tạo sau khi lấy thông tin từ bản vẽ Sau đó, dữ liệu ấy được gửitới API thông qua curl cURL viết tắt của Client URL là một công cụ dòng lệnh (command line tool) dùng để kiểm tra kết nối từ URL và cho phép truyền dữ liệu cURL sử dụng nhiều giao thức hỗ trợ khác nhau như: HTTP, HTTPS, FTPS,… cURL ra đời từ năm 1997, được viết bởi Daniel Stenberg Chúng được lập trình để hoạt động mà không cần có sự tương tác của người dùng Có thể sử dụng lệnh cURL để upload và tải xuống nội dung từ internet Nếu biết cách sử dụng và khai thác nó đúng mức, cURL sẽ trở thành một công cụ cực kỳ mạnh mẽ Trong dự án, curl với giao thức HTTP đóng vai trò gửi dữ liệu được lấy từ bản vẽ tới API.Quá trình gửi diễn ra như sau:
void SendJsonDataUsingCurl (json jsonObj) {
Trang 16std::string response;
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
CURLcode res = curl_easy_perform(curl);
Từ dữ liệu bản vẽ được lấy qua AutoCAD, có 7 đối tượng chính cần phân tích là: Point (điểm), Line (đường thẳng), Arc (đường cong), Polyline (hình đa tuyến), 3d Polyline (hình đa tuyến 3d), Circle (đường tròn), Ellipse (hình e-líp) Cuối cùng, API sẽ nhận được JSON data có dạng như sau:
Trang 174.6.2 Nhận dữ liệu từ API
Để nhận dữ liệu từ API, ta sử dụng phương thức POST POST là một phương thức được hỗ trợ bởi HTTP và mô tả rằng máy chủ web chấp nhận dữ liệu được bao gồm trong nội dung request POST thường được sử dụng để gửi dữ liệu do người dùng tạo đến máy chủ
Phương thức POST có các ưu điểm:
Trang 18Dữ liệu được truyền bằng phương thức POST sẽ không hiển thị trong các tham
số truy vấn trong URL trình duyệt
Các tham số của phương thức POST không được lưu trong lịch sử trình duyệt.Không có hạn chế trong việc gửi độ dài của dữ liệu
Gửi dữ liệu đến máy chủ an toàn hơn
Cách sử dụng phương thức POST để nhận dữ liệu:
app.post('/upload', async ( req , res ) => {
const data = req body;
console log(data);
const objects = data.objects;
const drawing_name = data.drawing_name;
res status ( 200).json({ message: 'Data uploaded successfully' });
4.7 Xử lý dữ liệu
Đầu tiên, để phân tích và xử lý dữ liệu, ta gán chuỗi JSON bằng biến json
Sau đó, sử dụng JSON.parse để có thể tách các phần tử trong mảng JSON
Trang 19var json =`{Chu i JSON}`; ỗ
var obj = JSON parse ( json );
Tiếp theo, ta bắt đầu xử lý dữ liệu với mục tiêu tạo ra chuỗi kết quả là một “Insert query” Một insert query gồm có ba thành phần chính là bảng, cột và dữ liệu cần thêm.Cách thức để tạo ra nó từ dữ liệu JSON đã tách là ghép từng value (giá trị) ứng với tên giá trị của nó (các tên giá trị ứng với tên cột) Điều đó được thể hiện qua lưu đồ thuật toán bên dưới
Trang 204.7.1 Kết quả sau khi xử lý
Kết quả thu được khi xử lý dữ liệu là những insert query sử dụng trong PostgreSQL để thêm các dữ liệu vào bảng public.object_details Dưới đây là ví dụ minh hoạ về dạng đối tượng lưu được geometric data và không lưu được kiểu dữ liệu này:
//Point: L u đ c, ST_GeomFronText l u d ng đi m có to đ (x, y)
insert into public.object_details (jsondata, className, closed, cad_id, layer,
linetype, linetype_scale, lineweight, material, thickness, transparency,
coords) values ('{"className":"AcDbPoint","coords":
insert into public.object_details (jsondata, className, closed, cad_id, layer,
linetype, linetype_scale, lineweight, material, thickness, transparency,
coords) values ('{"className":"AcDbLine","coords":
//Arc: Không l u đ ư ượ c đ ườ ng cong
insert into public.object_details (jsondata, className, closed, cad_id, layer,
linetype, linetype_scale, lineweight, material, thickness, transparency,
coords) values ('{"className":"AcDbArc","coordsRadAng":