Làm thế nào để tạo một lớp vectơ trống mới lập trình?


21

Tôi chưa quen với python và QGIS. Tôi đã xem xét một vài hướng dẫn về các kịch bản python cho QGIS. Tất cả chúng tạo ra các lớp vectơ và raster mới với một số nguồn dữ liệu hiện có. ví dụ. shapefile hoặc geotiff hoặc postgis bảng cơ sở dữ liệu.

Có thể tạo một lớp QGIS thông qua tập lệnh python, nơi tôi có thể tạo / thêm / sửa đổi các tính năng mới thông qua tập lệnh python, khi có nhu cầu. Nó thường là một lớp vectơ với dữ liệu điểm và ký hiệu tùy chỉnh.

Điều này sẽ có thể? Có một ví dụ tôi có thể nhìn vào?

Câu trả lời:


19

Hãy xem nhà cung cấp bộ nhớ như được mô tả trong PyQGIS Cookbook .

Nhà cung cấp bộ nhớ dự định sẽ được sử dụng chủ yếu bởi các nhà phát triển ứng dụng hoặc bên thứ 3. Nó không lưu trữ dữ liệu trên đĩa, cho phép các nhà phát triển sử dụng nó như một phần phụ trợ nhanh cho một số lớp tạm thời.

# To avoid 'QVariant' is not defined error
from PyQt4.QtCore import *

# create layer
vl = QgsVectorLayer("Point", "temporary_points", "memory")
pr = vl.dataProvider()

# Enter editing mode
vl.startEditing()

# add fields
pr.addAttributes( [ QgsField("name", QVariant.String),
                QgsField("age",  QVariant.Int),
                QgsField("size", QVariant.Double) ] )

# add a feature
fet = QgsFeature()
fet.setGeometry( QgsGeometry.fromPoint(QgsPoint(10,10)) )
fet.setAttributeMap( { 0 : QVariant("Johny"),
                   1 : QVariant(20),
                   2 : QVariant(0.3) } )
pr.addFeatures( [ fet ] )

# Commit changes
vl.commitChanges()

Cảm ơn bạn đã trả lời, nó chắc chắn là hữu ích. Tuy nhiên khi sử dụng tập lệnh tôi gặp lỗi sau. "NameError: tên 'QVariant' không được xác định" Tôi đã bỏ phần "addAttribution" và quản lý để đặt một dấu chấm trên bản đồ, để nó hoạt động, cảm ơn bạn. Tôi đang sử dụng Ubuntu 12.04 và QGIS 1.8.0-Lisboa Nhưng điều gì có thể gây ra lỗi được đề cập ở trên?
Theun Heydenrych

1
Có vẻ như đó setAttributeMapkhông còn là một phương thức của các lớp QssFeature, vì vậy giải pháp này không hoạt động cho QGIS gần đây nhất (năm 2016).
Spainedman

4

Nếu bạn muốn lưu một lớp vectơ mới (.shp) trong Đĩa cứng của mình, bạn phải sử dụng QssVectorFileWriter () . Phải mất một vài tham số, cách đơn giản nhất là sử dụng các tham số từ dự án bạn đang sử dụng. Có một cái nhìn đến trang web này .

   cLayer = qgis.utils.iface.mapCanvas().currentLayer()
   provider = cLayer.dataProvider()
   writer = QgsVectorFileWriter( "output_path_and_name.shp", provider.encoding(), provider.fields(),QGis.WKBPolygon, provider.crs() )

1
Nhưng điều này đang tạo .shpfile trống. Nếu tôi muốn lưu shapefile hiện tại vào đường dẫn đã chỉ định, làm thế nào tôi có thể làm điều đó?
dùng99
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.