Cập nhật tọa độ trên gói địa lý với shapefile
Tôi có một tệp đóng gói địa lý có tất cả thông tin về một số mục nhất định nhưng tọa độ cần được cập nhật. Tôi đang sử dụng một chiếc Leica 1200 GPS cũ để lấy tọa độ mới và cung cấp cùng một ID cho những điểm này mà chúng có trong gói địa lý.
Cách tốt nhất để cập nhật tọa độ trong gói địa lý với tọa độ từ tệp hình dạng do GPS tạo ra khi biết rằng ID sẽ giống nhau, tôi đã sử dụng hàm VLOOKUP của excel cho việc này nhưng muốn biết có cách nào không để làm điều đó bên trong QGIS.
Trả lời
Có thể nhưng không phải là tầm thường để làm điều đó với ogr2ogr và ogrinfo. Tệp hình dạng phải được chèn vào GeoPackage trước nhưng nó có thể bị xóa sau khi hình học được cập nhật.
Nguồn dữ liệu
Jointest1 chứa 2 điểm
ID (Integer) = 11
POINT (77 33)
ID (Integer) = 22
POINT (15 35)
Jointest2 cũng chứa hai điểm
ID (Integer) = 22
POINT (5 25)
ID (Integer) = 0
POINT (3 2)
Mục đích là cập nhật tính năng 22 -> POINT (5 25) và giữ tính năng 11 là POINT (77 33). Không nên thêm tính năng có ID = 0 không tồn tại trong Jointest1.
Lớp Jointest1 nằm trong GeoPackage "Jointest.gpkg" và Jointest2 là shapefile. Lần nhập đầu tiên cũng là Jointest2 vào GeoPackage.
ogr2ogr -append -update -f gpkg jointest.gpkg jointest2.shp
Tiếp theo, sử dụng ogrinfo với tham số -sql để chạy lệnh cập nhật. Cú pháp của lệnh được lấy từhttps://stackoverflow.com/questions/19270259/update-with-join-in-sqlite.
ogrinfo -sql "update jointest1 set geom=(select geom from jointest2 where ID=jointest1.ID) where exists (select geom from jointest2 where ID=jointest1.ID)" jointest.gpkg
Kiểm tra những gì chúng tôi có bây giờ trong doanh1
ogrinfo jointest.gpkg jointest1
…
ID (Integer) = 11
POINT (77 33)
ID (Integer) = 22
POINT (5 25)
Bây giờ chúng ta có thể thả bảng Jointest2 và hút cơ sở dữ liệu. Nếu bạn chỉ thả bảng khỏi cơ sở dữ liệu SQLite, kích thước tệp vẫn giữ nguyên cho đến khi bạn hút sạch cơ sở dữ liệu. Sẽ không nguy hiểm nếu bạn không hút bụi, bạn sẽ có tệp cơ sở dữ liệu lớn hơn một chút trên đĩa.
ogrinfo jointest.gpkg -sql "drop table jointest2"
ogrinfo jointest.gpkg -sql "vacuum"
Việc cập nhật tọa độ rất khó và có thể sẽ yêu cầu một số thao tác nâng cao. Thay vào đó, tôi muốn giới thiệu:
- Mở cả hai tệp trong QGIS
- Nối các thuộc tính từ lớp GeoPackage vào lớp Shapefile bằng ID
- Lưu lớp đó dưới dạng GeoPackage mới
Bằng cách đó, bạn không phải chạm vào xử lý hình học mà chỉ cần dữ liệu thuộc tính, dễ dàng hơn.