我第一次使用shapefile,我正在尝试创建一个包含每个多边形边界的数据库。到目前为止,使用qgis和.dbf文件,我一直无法弄清楚如何做到这一点。有没有办法从shapefile中获取边界?
我正在使用人口普查局的邮政编码shapefile。这是一个链接。 https://www.census.gov/geo/maps-data/data/cbf/cbf_zcta.html
由于
答案 0 :(得分:0)
对于边界框,您可以通过PyQGIS或QGUIS GUI完成。请记住,边界框是演变几何体的最小矩形,因此它由4个坐标构成:
mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()
所以你需要c1 = [x_min, y_min]
c2 = [x_min, y_max]
c3 = [x_max, y_min]
c4 = [x_max, y_max]
来构建这些坐标。我将首先发布PyQGIS答案(我们在StackOverflow中)以提取这4个值:
x_min, x_max, y_min, y_max
对于QGIS GUI,只需使用与上述代码相同的表达式Field Calculator,创建4个新字段(使用double作为数据类型):
第1栏:from qgis.core import *
from qgis.utils import *
from PyQt4.QtCore import QVariant
# Import layer
layer = QgsVectorLayer('/path/to/cb_2016_us_zcta510_500k.shp','census_boundaries','ogr')
if not layer.isValid():
print "Layer failed to load!"
else:
print "Layer was loaded successfully!"
# add to the canvas
QgsMapLayerRegistry.instance().addMapLayer(layer)
# start editing
layer.startEditing()
# for field name and expression
fields = 'x_min','x_max','y_min','y_max'
for i in range(0,4):
field = QgsField( fields[i], QVariant.Double ) # create field
layer.dataProvider().addAttributes([field])
layer.updateFields()
idx = layer.fieldNameIndex(fields[i]) # extract field index
e = QgsExpression(fields[i]+ '($geometry)' ) # use a field expression to calculate value. ie: x_min($geometry)
e.prepare( layer.pendingFields() )
for f in layer.getFeatures(): # fo it for all field
f[idx] = e.evaluate( f )
layer.updateFeature( f )
layer.commitChanges() #save changes
第2栏:x_min($geometry)
第3栏:x_max($geometry)
第4栏:y_min($geometry)