Wie kann ich ein Shapefile in Lat- und Lon-Grenzen konvertieren?

12

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?

Mossplix
quelle
Bitte klären Sie: Haben Sie ein Shapefile oder eine Excel- Datei?
whuber
1
Der Titel spiegelt Ihre Frage nicht wirklich wider. Bitte denken Sie darüber nach, ihn zu bearbeiten.
DavidF
Ich habe ein Shapefile
Mossplix

Antworten:

25

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
DavidF
quelle
2
... und dazu noch freie Geodatenpython; /
DavidF
4

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

  1. Module \ Shapes \ Tools \ Points \ Punkte aus Linien [entgegen dem Namen können Sie dies auch verwenden, um Punkte aus einem Polygon zu erhalten]

  2. 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.

johanvdw
quelle
4

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
Gotchula
quelle
4

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

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]))
Matej
quelle
Das bietet NICHT Lat / Lon.
Harvpan
Die Ausgabe sieht folgendermaßen aus: Dies sind die Lat / Lon-Koordinaten: -124,72583900000001,45,544321, -116,915989,49,002494 -82,626182,37,202467, -77,71951899999999,40,638801 -111,056888,40,993
Matej