tengo un shapefile de país subdivisiones y me gustaría extraer una matriz de delimitación de lat y lon para cada división.. es posible hacer?
Respuestas
¿Demasiados anuncios?El uso de la ogr el módulo de Python OSGEO, en este ejemplo se le dará una tupla que contiene las coordenadas que definen un sobre para cada característica.
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
Aquí la versión "R", utilizando los datos del ejemplo de la rgdal paquete:
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,]))
}
En arcgis, aquí está el código de python. el resultado es una lista de 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
Una posible manera de proceder usando SAGA GIS http://www.saga-gis.org Después de abrir su archivo shapefile de ejecutar estos 3 módulos: 1. Módulos\Shapes\Tools\Conseguir Formas medida
Módulos\Shapes\Herramientas\Puntos\Puntos de las líneas [contrariamente a lo que el nombre lo sugiere también puede utilizar esto para obtener los puntos de un polígono]
Módulos\Shapes\Herramientas\Puntos\Agregar las Coordenadas de los puntos de Esto le dará una tabla que contiene las coordenadas x e y de las 4 esquinas de la caja de contorno del polígono de archivo.
Yo uso fiona y bien formada para ese tipo de tareas:
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]))