¿Cómo puedo convertir un shapefile a límites lat y lon?

12

Tengo un shapefile de subdivisiones de país y me gustaría extraer una serie de límites de longitud y longitud para cada división ... ¿es posible hacerlo?

mossplix
fuente
Por favor aclare: ¿tiene un archivo shape o un archivo Excel ?
whuber
1
El título realmente no refleja su pregunta, por favor piense en editarlo.
DavidF
tengo un shapefile
mossplix

Respuestas:

25

Usando el módulo ogr Python de OSGEO, este ejemplo 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
DavidF
fuente
2
... y pitón geoespacial libre en eso; /
DavidF
4

Una posible forma de proceder usando SAGA GIS http://www.saga-gis.org Después de abrir su archivo shape, ejecute estos 3 módulos: 1. Extensión Módulos \ Formas \ Herramientas \ Obtener formas

  1. Módulos \ Formas \ Herramientas \ Puntos \ Puntos de líneas [al contrario de lo que sugiere el nombre, también puede usar esto para obtener puntos de un polígono]

  2. Módulos \ Formas \ Herramientas \ Puntos \ Agregar coordenadas a puntos Esto le dará una tabla que contiene las coordenadas x e y de las 4 esquinas del cuadro delimitador de su archivo poligonal.

johanvdw
fuente
4

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
gotchula
fuente
4

Aquí hay una versión R, que usa datos de ejemplo del paquete rgdal:

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,]))    
}
mdsumner
fuente
1

Yo uso fiona y bien proporcionado 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]))
Matej
fuente
Eso NO proporciona Lat / Lon.
harvpan
Las miradas de salida de este tipo, esas son las coordenadas Lat / Lon: -124.72583900000001,45.544321, -116.915989,49.002494 -82.626182,37.202467, -77.71951899999999,40.638801 -111.056888,40.996345999999996, -104.052287,45.005904 -67.955811,17.913769, -65.22156799999999,18.511706
Matej