Làm cách nào để thêm (và ánh xạ) bảng không gian vào QGIS từ SQLite?


8

Tôi có một tệp sqlite từ ứng dụng Wigle Android của tôi (tóc giả). Đây không phải là một tệp không gian, chỉ là các bảng có lat / lon và các dữ liệu khác.

Tôi có thể thêm các lớp spatialite tốt, nhưng dường như không thể tìm thấy cách thêm bảng này giống như cách tôi thêm một lớp văn bản được phân tách - làm thế nào để thực hiện điều này?

Làm rõ: Có thể thêm dưới dạng bảng (theo câu trả lời của @ Giovanni-Manghi bên dưới), HOẶC có thể xuất bảng dưới dạng CSV và sau đó thêm dưới dạng lớp văn bản được phân tách, nhưng lý tưởng nhất là tôi muốn một lớp điểm dựa trực tiếp trên bảng SQLite (giống như trong ArcGIS, tôi sẽ thêm một bảng sau đó nhấp chuột phải và "Hiển thị dữ liệu XY ...")

Câu trả lời:


9

Tôi không biết đây có phải là câu trả lời bạn muốn không, vì đây không phải là câu trả lời và nhấp chuột, nhưng đây là cách tôi có thể làm.

Trong Spatialite, thêm một cột hình học mới. Giả sử bạn muốn WGS84 (lat / lon)

AddGeometryColumn( yourTableName , geometryColumnName, 4326, 'POINT', 'XY')

Sau đó tạo hình học từ WKT được tạo từ tọa độ X / Y

update yourTableName set geometryColumnName = GeomFromText('POINT ('+latColumn=' '+lonColumn+')',4326)

Có lẽ có một cách để bọc nó thành một hàm qgis / spatialite / spatialite-gui, vì tôi dường như sử dụng điều này khá thường xuyên, và thật dễ để có dấu ngoặc kép sai.

BIÊN TẬP -----

Thực sự có một cách dễ dàng hơn mà tôi đã khám phá gần đây - cho việc sử dụng câu lệnh thứ hai:

update yourTableName set geometryColumnName = MakePoint(XColumn,YColumn,EPSG projectioncode)

InitSpatialMetadatađể chuyển đổi cơ sở dữ liệu sqlite3 đơn giản sang spatialite người ta xứng đáng được đề cập. Bạn có thể phải thực hiện giao dịch hoặc thêm đối số 1( select InitSpatialMetadata(1)), nếu không sẽ mất rất nhiều thời gian (nửa giờ trên máy tính của tôi).
Jan Hudec

Điều này hoạt động tốt - nhưng đối với những người như tôi ít quen thuộc với Spatialite / SQL thì đáng để thêm vào đó (tôi thấy rằng) câu lệnh đầu tiên yêu cầu 'CHỌN' trước nó. Vì vậy, CHỌN AddGeometryColumn (... vv ...). Ngoài ra, tên bảng và tên cột hình học có thể có (? Nên có?) Dấu ngoặc kép đơn xung quanh chúng - vì vậy yourtablename sẽ là 'yourtablename' và hình họcColumnName sẽ là 'hình họcColumnName'.
Rostranimin

4

Vì QGIS có thể đọc các lớp OGR, hãy thử sử dụng Định dạng ảo của OGR: http://gdal.org/ogr/drv_vrt.html .

Tạo một tệp văn bản với nội dung sau và mở nó dưới dạng lớp vectơ trong QGIS (Lớp -> Thêm lớp Vector). Chỉ cần thay thế tên bảng cũng như tên cột kinh độ và vĩ độ theo bảng cơ sở dữ liệu của bạn. Bạn nên lưu trữ tệp có hậu tố .vrt

<OGRVRTDataSource>
    <OGRVRTLayer name="table_name">
        <SrcDataSource>/path/to/your/sqlite.db</SrcDataSource> 
        <SrcLayer>table_name</SrcLayer> 
        <GeometryType>wkbPoint</GeometryType>
            <LayerSRS>WGS84</LayerSRS>
        <GeometryField encoding="PointFromColumns" x="lng" y="lat"/> 
    </OGRVRTLayer>
</OGRVRTDataSource>

1

Sử dụng hộp thoại "thêm vectơ ..." tiêu chuẩn hoặc kéo và thả tệp .db trong khung vẽ QGIS.


Nó chỉ hoạt động để thêm bảng dưới dạng một lớp không gian ... làm cách nào để vẽ các điểm như tôi có thể cho một lớp văn bản được phân tách, xác định các cột x / y (lon / lat)?
Simbamangu

1
Tôi không biết có cách nào để biến bất kỳ cột x / y nào trong một bảng bất kỳ thành một lớp điểm mới hay không, tôi không nghĩ vậy (đó sẽ là một tính năng mới hay). Trong khi đó, chỉ cần lưu bảng Sqlite của bạn vào csv và nhập lại, với plugin "xytools", bạn cũng có thể nhập các bảng xls và ods.
Giovanni Manghi

Tôi đồng ý rằng nó sẽ là một ý tưởng hay cho một plugin. Có nhiều người chỉ cần có một bảng sqlite và muốn sử dụng nó như hiện tại.
AndreJ

0

Cách nghệ nhân: a) @ Cách của Giovanni-Manghi, cộng với b) Nhập lại XYlayer vào SQlite của bạn, sau đó c) Xóa bảng trước đó trong SQlite của bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.