comment puis-je convertir un fichier de formes en limites lat et lon?

12

j'ai un shapefile de subdivisions de pays et je voudrais extraire un tableau de délimitation lat et lon pour chaque division .. est-il possible de faire?

mossplix
la source
Veuillez clarifier: avez-vous un fichier de formes ou un fichier Excel ?
whuber
1
Le titre ne reflète pas vraiment votre question, pensez à le modifier.
DavidF
j'ai un shapefile
mossplix

Réponses:

25

En utilisant le module ogr Python d'OSGEO, cet exemple vous donnera un tuple contenant les cordes qui définissent une enveloppe pour chaque fonctionnalité.

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
la source
2
... et du python géospatial gratuit à cela; /
DavidF
4

Une façon possible de continuer à utiliser SAGA GIS http://www.saga-gis.org Après avoir ouvert votre fichier de formes, exécutez ces 3 modules: 1. Modules \ Shapes \ Tools \ Get Shapes extend

  1. Modules \ Formes \ Outils \ Points \ Points à partir de lignes [contrairement à ce que le nom suggère, vous pouvez également l'utiliser pour obtenir des points à partir d'un polygone]

  2. Modules \ Formes \ Outils \ Points \ Ajouter des coordonnées aux points Cela vous donnera un tableau qui contient les coordonnées x et y des 4 coins de la boîte englobante de votre fichier polygonal.

johanvdw
la source
4

Dans arcgis, voici le code python. le résultat est une liste 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
la source
4

Voici une version R, utilisant des exemples de données du package 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
la source
1

J'utilise fiona et bien fait pour ce genre de tâches:

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
la source
Cela ne fournit PAS Lat / Lon.
harvpan
La sortie ressemble à ceci, ce sont les coordonnées lat / lon: -124.72583900000001,45.544321, -116.915989,49.002494 -82.626182,37.202467, -77.71951899999999,40.638801 -111.056888,40.996345999999996.699.106.699
Matej