0
我第一次使用shapefiles,我試圖創建一個數據庫,其中包含每個多邊形的邊界。到目前爲止,使用qgis和.dbf文件,我一直無法弄清楚如何做到這一點。有沒有辦法從shapefile中獲得邊界?從形狀文件中提取邊界信息
我使用人口普查局的郵政編碼shapefile。這是一個鏈接。 https://www.census.gov/geo/maps-data/data/cbf/cbf_zcta.html
感謝
我第一次使用shapefiles,我試圖創建一個數據庫,其中包含每個多邊形的邊界。到目前爲止,使用qgis和.dbf文件,我一直無法弄清楚如何做到這一點。有沒有辦法從shapefile中獲得邊界?從形狀文件中提取邊界信息
我使用人口普查局的郵政編碼shapefile。這是一個鏈接。 https://www.census.gov/geo/maps-data/data/cbf/cbf_zcta.html
感謝
對於邊界框,您可以通過PyQGIS或QGUIS GUI做到這一點。請記住,邊界框是演變成幾何最小矩形,所以它是由4個座標製成:
c1 = [x_min, y_min]
c2 = [x_min, y_max]
c3 = [x_max, y_min]
c4 = [x_max, y_max]
所以你需要x_min, x_max, y_min, y_max
構建這些座標。我會後的PyQGIS先回答(我們在StackOverflow的)用於提取此4個值:
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
對於QGIS界面,只需使用比上面的代碼相同的表達式中使用Field Calculator,創建4個新領域(使用雙作爲數據類型)爲:
字段1:x_min($geometry)
字段2:x_max($geometry)
字段3:y_min($geometry)
場4:y_max($geometry)
爲界限,你的意思[邊界框(https://en.m.wikipedia.org/wiki/Minimum_bounding_box)? –
是的,我試圖提取表示郵政編碼的多邊形的每個角落的GPS座標。 – Zlatan