Lập trình GIS Xây dựng công cụ nắn chỉnh bản đồ

11 2 0
Lập trình GIS  Xây dựng công cụ nắn chỉnh bản đồ

Đ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

Hai phép biến đổi được sử dụng phổ biến để tính chuyển giữa hai hệ tọa độ và nắn chỉnh tọa độ trong bản đồ là Helmert và Affine. Trong phạm vi của bài tiểu luận này, tácgiả chọn phép Affine để áp dụng xây dựng công cụ thực hiện nắn chỉnh bản đồ thông qua ngôn ngữ lập trình Python được tích hợp và hỗ trợ trong phần mềm ArcGIS.

ĐẠI HỌC QUỐC GIA TP HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA  XÂY DỰNG CÔNG CỤ NẮN CHỈNH BẢN ĐỒ (thơng qua ngơn ngữ lập trình Python kết hợp với ArcObjects) Mơn: Lập trình GIS Giảng viên PGS.TS Trần Trọng Đức Học viên thực Huỳnh Thị Mai Đình Mã số học viên 12103003 Tp.HCM, ngày 21 tháng 06 năm 2013 Mục lục Đặt vấn đề Giải vấn đề 2.1 Cơ sở lý thuyết 2.2 Xây dựng cơng cụ tính chuyển tọa độ nắn chỉnh đồ 2.3 Kiểm nghiệm kết thực Kết luận Đặt vấn đề Với mạnh khả lưu trữ, quản lý, truy xuất phân tích khơng gian, công nghệ GIS (Geography Information System) ứng dụng phổ biến hầu hết lĩnh vực Tuy nhiên, để ứng dụng GIS, đòi hỏi tư liệu đồ thành lập sử dụng trước phải số hóa để lưu trữ, quản lý, phân tích nhờ hỗ trợ phần mềm chuyên dụng Một khó khăn việc ứng dụng công nghệ Việt Nam việc không thống tư liệu đồ Vấn đề xuất phát từ hai nguyên nhân sau đây:  Lịch sử phát triển đồ Việt Nam trải qua nhiều giai đoạn thay đổi hệ tọa độ hệ quy chiếu trình thành lập đồ Cho nên tư liệu đồ có khơng thống hệ tọa độ, đặc biệt hai HN – 72 VN – 2000 (hệ VN – 2000 hệ tọa độ áp dụng thống để xây dựng đồ nay)  Do thành lập đồ không đồng đơn vị, dẫn đến không trùng khớp lớp đồ khu vực Kết hai nguyên nhân gây khó khăn q trình hợp lớp đồ, đặc biệt ứng dụng để giải tốn khơng gian Biểu dễ nhận thấy tình trạng hai lớp đồ bị lệch nhau, cần thực nắn chỉnh đồ lớp đồ khác – mà chọn làm đồ gốc Hai phép biến đổi sử dụng phổ biến để tính chuyển hai hệ tọa độ nắn chỉnh tọa độ đồ Helmert Affine Trong phạm vi tiểu luận này, tác giả chọn phép Affine để áp dụng xây dựng công cụ thực nắn chỉnh đồ thơng qua ngơn ngữ lập trình Python tích hợp hỗ trợ phần mềm ArcGIS Giải vấn đề 2.1 Cơ sở lý thuyết Phép biến đổi Affine (Affine Transforms) phép biến đổi tuyến tính, khả nghịch Phép biến đổi bảo tồn tính song song đường thẳng bảo tồn tính tỉ lệ khoảng cách đoạn thẳng Tuy nhiên, hạn chế phép biến đổi không bảo tồn góc nghiêng chiều dài đoạn thẳng, khơng đảm bảo tính đồng dạng hai hệ tọa độ Cơng thức phép biến đổi Affine có dạng sau: { (1) Trong đó: a,b,c,d,e,f tham số chuyển đổi tọa độ, để xác định tham số phải biết trước điểm song trùng hai hệ tọa độ Khi n > xác định theo phương pháp số bình phương nhỏ Hệ (1) viết lại dạng ma trận sau: Trong đó: ; [ ] ; [ ] [ ] Hệ phương trình (1) viết lại dạng: Và điều kiện , sau phép biến đổi, vector nghiệm X xác định là: Ở đây, ma trận trọng số P xem ma trận đơn vị I (xem trọng số 1), nên X là: Sau xác định tham số a1, a2, b1, b2, c1, c2, dựa vào biểu thức (1) để chuyển đổi hàng loạt từ hệ sang hệ Xây dựng công cụ tính chuyển tọa độ nắn chỉnh đồ 2.2 Dữ liệu GIS gồm có ba dạng: điểm (Point), đường (Polygon) vùng (Polygon) Trong tiểu luận này, công cụ nắn chỉnh đồ thực với liệu dạng điểm Công cụ xây dựng ngơn ngữ lập trình Python kết hợp với ArcObject, tích hợp vào Arcgis sử dụng công cụ hộp ArcTool Box Đoạn mã viết cho công cụ sau: import numpy as np import arcpy try: arcpy.env.overwriteOutput=1 arcpy.env.workspace=arcpy.GetParameterAsText(0) f=arcpy.GetParameterAsText(1) # Mo file toa diem song trung giua hai toa td=open(f,'r') lst=td.readlines() le=len(lst) le2=le*2 i=0 j=1 A=np.zeros((le2,6)) L=np.zeros((le2,1)) for row in lst: row=row.split() A[i,0]=row[2] A[i,1]=row[3] A[i,2]=1 A[i,3]=0 A[i,4]=0 A[i,5]=0 A[j,0]=0 A[j,1]=0 A[j,2]=0 A[j,3]=row[2] A[j,4]=row[3] A[j,5]=1 L[i,0]=float(row[0]) L[j,0]=float(row[1]) i=i+2 j=j+2 X=np.dot(np.linalg.inv(np.dot(np.transpose(A),A)),np.dot(np.transpose(A),L)) Feat_trans=arcpy.GetParameterAsText(2) # Mo lop can chuyen doi desc = arcpy.Describe(Feat_trans) typedesc=desc.shapeType if typedesc=='Point': # Kiem tra kieu du lieu ptar=arcpy.UpdateCursor(Feat_trans) row=ptar.next() while row: geom=row.shape point=geom.getPart() point.X=(X[0,0]*point.X)+(X[1,0]*point.Y)+X[2,0] point.Y=(X[3,0]*point.X)+(X[4,0]*point.Y)+X[5,0] row.shape=point ptar.updateRow(row) row=ptar.next() td.close() del row del ptar arcpy.AddMessage('Cac tham so chuyen doi: '+'\n'+'a= '+str(X[0,0])+', '+'b= '+str(X[1,0])+', '+'c= '+str(X[2,0])+'\n'+'d= '+str(X[3,0])+', '+'e= '+str(X[4,0])+'f= '+str(X[5,0])) else: arcpy.AddError('Chi thuc hien nan chinh voi du lieu dang diem') except arcpy.ExecuteError: arcpy.AddError(arcpy.GetMessage(0)) print arcpy.GetMessage(0) 2.3 Kiểm nghiệm kết thực Để kiểm nghiệm kết sau xây dựng công cụ nắn chỉnh đồ, đề tài tạo hai lớp liệu dạng điểm: Point_Org.shp Point_Trans.shp Giả định tình rằng: lớp điểm khu vực, lý (do khác hệ tọa độ hay sai lệch nguồn gốc thành lập…) mà hai lớp điểm lệch hình đây: Lệch hai lớp đồ Yêu cầu thực nắn chỉnh lớp Point_Trans.shp lớp Point_Org.shp Như trình bày phần [2.1], để xác định tham số ẩn theo phương pháp giải phép biến đổi Affine cần có liệu điểm trùng với tối thiểu điểm song trùng Tọa độ điểm song trùng tạo tập tin với định dạng txt , sau: 33801354.69 28753272.63 39707044.53 47882685.89 40490291.02 33473063.34 22255766.81 10159100.2 -4763429.643 4999714.883 8672712.069 9411367.614 -12734245.18 -17782327.25 -6828555.339 1347086.012 -6045308.857 -13062536.54 8207283.834 -3889382.779 -18811912.62 -9048768.098 -5375770.911 -4637115.366 Với hai cột ban đầu tọa độ X Y lớp liệu Point_Org.shp hai cột sau tọa độ X Y lớp liệu Point_Trans.shp Cơng cụ tích hợp vào hộp ArcToolbox ArcGIS sau: Dữ liệu đưa vào để thực nắn chỉnh Kết thực nắn chỉnh sau: Bảng thông báo sau thực nắn Kết nắn chỉnh chỉnh thành cơng Vì cơng cụ thực với liệu dạng điểm nên chương trình báo lỗi đưa kiểu liệu khác vào (đường, vùng) Dữ liệu dạng đường đưa vào chương Bảng thơng báo lỗi trình Kết luận Nắn chỉnh liệu đồ nhu cầu cần thiết tình trạng thành lập tư liệu đồ không thống Để đáp ứng nhu cầu này, đề tài tìm hiểu sử dụng phép biến đổi Affine để từ xây dựng cơng cụ hỗ trợ nắn chỉnh đồ Công cụ thực ngôn ngữ lập trình Python kết hợp với ArcObject Tuy nhiên, cơng cụ thực với liệu dạng điểm Để đáp ứng tốt nhu cầu nắn chình đồ thực tế, cần nghiên cứu chương trình mở rộng thêm với hai dạng lại đường vùng Tài liệu tham khảo Trần Trọng Đức Bài giảng mơn Lập trình GIS Vũ Thị Hà Nghiên cứu số tốn tính chuyển tọa độ trắc địa cơng trình http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Welcome_to_the_A rcGIS_Help_Library/00r90000001n000000/

Ngày đăng: 17/06/2023, 04:36

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

Tài liệu liên quan