Ich habe ein Shapefile von Länderunterteilungen und möchte eine Reihe von Begrenzungslat und Lon für jede Abteilung extrahieren. Ist das möglich?
Ich habe ein Shapefile von Länderunterteilungen und möchte eine Reihe von Begrenzungslat und Lon für jede Abteilung extrahieren. Ist das möglich?
Antworten:
Mit dem ogr Python-Modul von OSGEO erhalten Sie in diesem Beispiel ein Tupel mit den Koordinaten, die für jedes Feature eine Hüllkurve definieren.
from osgeo import ogr
ds = ogr.Open("mn_counties.shp")
lyr = ds.GetLayerByName("mn_counties")
lyr.ResetReading()
for feat in lyr:
# get bounding coords in minx, maxx, miny, maxy format
env = feat.GetGeometryRef().GetEnvelope()
# get bounding coords in minx, miny, maxx, maxy format
bbox = [env[0], env[2], env[1], env[3]]
print env
print bbox
print
Eine Möglichkeit, mit SAGA GIS fortzufahren http://www.saga-gis.org Führen Sie nach dem Öffnen Ihres Shapefiles die folgenden 3 Module aus: 1. Module \ Shapes \ Tools \ Get Shapes
Module \ Shapes \ Tools \ Points \ Punkte aus Linien [entgegen dem Namen können Sie dies auch verwenden, um Punkte aus einem Polygon zu erhalten]
Module \ Shapes \ Tools \ Points \ Koordinaten zu Punkten hinzufügen Hiermit erhalten Sie eine Tabelle, die die x- und y-Koordinaten der 4 Ecken des Begrenzungsrahmens Ihrer Polygondatei enthält.
In Arcgis ist hier Python-Code. Ergebnis ist eine Liste von minx, miny, maxx, maxy, minM, maxM, minZ, maxZ (
import arcpy
for feat in arcpy.SearchCursor(r"c:\data\f.gdb\counties"):
print feat.Shape.extent
-2.66852727251546 49.4265363633626 -2.52848181818121 49.5079454546192 NaN NaN NaN NaN
-10.463336363782 51.4455454544593 -6.01305454583045 55.3799909091533 NaN NaN NaN NaN
-4.77778181827614 54.0555454544593 -4.35347272688468 54.4100000000002 NaN NaN NaN NaN
Hier ist eine R-Version, die Beispieldaten aus dem rgdal-Paket verwendet:
library(rgdal)
dsn <- system.file("vectors/ps_cant_31.MIF", package = "rgdal")[1]
d <- readOGR(dsn = dsn, layer="ps_cant_31")
## transform if this is not longlat
if (is.projected(d)) d <- spTransform(d, CRS("+proj=longlat +ellps=WGS84"))
for (i in 1:nrow(d)) {
print(bbox(d[i,]))
}
Ich benutze Fiona und formschön für diese Art von Aufgaben:
import fiona
from shapely.geometry import shape
with fiona.open(r'd:\Projects\_00_Data\_USstates\fe_2007_us_state00.shp', 'r') as features:
for i, feat in enumerate(features):
geom = shape(feat['geometry'])
name = feat['properties']['NAME00']
print ','.join((name,) + tuple([str(i) for i in geom.bounds]))