2017-08-13 57 views
0

我第一次使用shapefiles,我試圖創建一個數據庫,其中包含每個多邊形的邊界。到目前爲止,使用qgis和.dbf文件,我一直無法弄清楚如何做到這一點。有沒有辦法從shapefile中獲得邊界?從形狀文件中提取邊界信息

我使用人口普查局的郵政編碼shapefile。這是一個鏈接。 https://www.census.gov/geo/maps-data/data/cbf/cbf_zcta.html

感謝

+0

爲界限,你的意思[邊界框(https://en.m.wikipedia.org/wiki/Minimum_bounding_box)? –

+0

是的,我試圖提取表示郵政編碼的多邊形的每個角落的GPS座標。 – Zlatan

回答

0

對於邊界框,您可以通過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)