So erhalten Sie alle Lat / Long-Koordinaten, die ein Shapefile definieren


9

Ich habe ein Shapefile mit mehreren Formen darin.

Mit MapWindow konnte ich feststellen, dass die benötigte Form die mit shapeId 19 ist.

Wie Sie wahrscheinlich sehen können, habe ich im Allgemeinen nur sehr wenig Erfahrung mit GIS, aber ich glaube, ich bin an der richtigen Stelle, um um Hilfe zu bitten.

Ich muss alle Lat / Long-Koordinaten extrahieren, die die Form bestimmen.

Ist dies mit MapWindow möglich oder muss ich eine andere Software verwenden?

Wenn weitere Informationen benötigt werden, kommentieren Sie bitte und ich werde so schnell wie möglich aktualisieren.

Jede Hilfe wird geschätzt, da dies mich verrückt macht!

Antworten:


10

QGIS kann helfen. Überprüfen Sie diese Antwort (den WKT-Teil) auf eine ähnliche Frage: Konvertieren von Steuerkartenpolygonen von Shapefile in eine Tabelle mit Kartennummern und Eckkoordinaten


Vielen Dank! Ich lade gerade QGIS herunter und werde die Ergebnisse kommentieren!
Zebs

Das Kopieren in einen Texteditor war sehr einfach. Meine ergänzende Frage ist, wie man die Punkte in lat, lange Informationen umwandelt.
Zebs

2
Öffnen Sie das ursprüngliche Shapefile. Klicken Sie in der Legende mit der rechten Maustaste darauf und wählen Sie "Speichern unter ...". Wählen Sie einen Zieldateinamen und ein Koordinatensystem EPSG: 4326 (WGS84). Laden Sie das neue Shapefile. Jetzt können Sie Lat / Lon-Koordinaten erhalten.
Underdark

4

Danke, wissen Sie, wie ich die X-, Y-Werte in lon / lat konvertieren kann? Ich verstehe, dass ich die Projektion brauche, aber ich kann das aus dem Shapefile bekommen, oder?
Zebs

@zebs Ja, ich weiß es; Nein, du kannst es nicht so machen, wie du denkst. Das Shapefile enthält nur Koordinaten und Attribute. keine Metadaten. Manchmal werden die Projektionsinformationen in einer PRJ-Datei angezeigt (wobei der Basisname des Shapefiles gemeinsam genutzt wird). Wenn nicht, dann musst du es einfach wissen. (Der Datenprovider sollte es Ihnen mitteilen.) Sie benötigen GIS-Software oder eine gleichwertige Software, um die Projektionen aufzuheben. Dies bedeutet, dass das Shapefile innerhalb des GIS in ein anderes Shapefile (oder ein gleichwertiges) konvertiert und anschließend seine neuen Koordinaten exportiert werden.
whuber

2

Im Folgenden finden Sie eine Möglichkeit, mit Python auf Breiten- und Längenkoordinaten von ESRI-Shapefiles zuzugreifen, unter anderem auf Informationen wie Raumbezug, Feldattribute, Feldwerte usw. Der folgende Code funktioniert nur für Polygone und Punkte (weil ich nicht dazu gekommen bin, den Code für Polylinien zu schreiben). Ich habe im Grunde genommen einen Code zusammengeschustert, den ich in der ArcGIS Desktop-Hilfe 9.3 verstreut gefunden habe, einen eigenen hinzugefügt und ihn in einer Funktion zusammengefasst. Es wurde mit ArcGIS 9.3 geschrieben. Sie sollten in der Lage sein, ein Polygon-Shapefile oder ein Punkt-Shapefile zu übergeben, und die Logik leitet es entsprechend.

 def get_shapefile( shape_file ):
    # Import native arcgisscripting module
    import arcgisscripting

    # Create the geoprocessor object
    gp = arcgisscripting.create(9.3)

    # Identify the geometry field
    desc = gp.Describe( shape_file )
    shapefieldname = desc.ShapeFieldName

    # Get shapefile Name
    print
    print 'Shapefile Name: ', desc.Name

    # Get the spatial reference
    spatial_reference = desc.SpatialReference.Name
    print 'Spatial Reference: ', spatial_reference
    print

    # Create search cursor
    rows = gp.SearchCursor( shape_file )
    row = rows.Next()

    # Enter while loop for each feature/row
    while row:

        # Create the geometry object
        feat = row.GetValue(shapefieldname)

        print '*' * 30
        print

        print 'Geometry related Information'
        print
        # Get Geometry Type
        geometry_Type = feat.Type
        print 'Geometry Type: ', geometry_Type

        # Get the area of the feature
        geometry_Area = feat.Area
        print 'geometry_Area; ', geometry_Area

        # Get the centroid for the feature
        geometry_Centroid = feat.Centroid
        print 'geometry_Centroid:', geometry_Centroid

        # Get the extent for the feature
        geometry_Extent = feat.Extent
        print 'geometry_extent: ', geometry_Extent

        print
        print 'Get Attribute Table Information'

        # Get all the fields for the feature class
        fields = desc.Fields

        total_number_of_fields = len( fields )
        print 'Total number of fields: ', total_number_of_fields
        print

        print 'List attribute table related information:'
        print

        field_num_cntr = 0

        # Loop through all the fields in the feature class
        for field in fields:

            print '*'*5, field_num_cntr, '*'*5
            print
            print 'field Type: ', field.Type
            print 'Scale: ', str(field.Scale)
            print 'Precision: ', str(field.Precision)
            print field.Name, '=> ', row.GetValue( field.Name )
            print

            field_num_cntr += 1


        if geometry_Type == 'polygon':

            # Variable to keep track of how many multipart polygons are in
            # featureclass
            partnum = 0 

            # Count the number of points in the current multipart feature
            partcount = feat.PartCount

            print
            print 'Number of polygons in feature class: ', partcount
            print

            # Enter while loop for each part in the feature (if a singlepart feature
            # this will occur only once)
            while partnum < partcount:

                # Print the part number
                print "Part ", str(partnum), "of", partcount, ":"
                print
                part = feat.GetPart(partnum)
                pnt = part.Next()

                pntcount = 0

                # Enter while loop for each vertex
                while pnt:

                    # Print x,y coordinates of current point
                    print 'X coord:', pnt.x, 'Y coord:', pnt.y
                    pnt = part.Next()
                    pntcount += 1

                    # If pnt is null, either the part is finished or there is an interior ring
                    if not pnt:
                        pnt = part.Next()
                        if pnt:
                            print "Interior Ring:"
                partnum += 1

                print
                print 'Number of coordinates in feature class: ', pntcount - 1
                print

        elif geometry_Type == 'point':

            feat = row.GetValue(shapefieldname)

            # Get coords
            pnt = feat.GetPart()

            # Print x,y coordinates of current point object
            print 'X coord:', pnt.x, 'Y coord:', pnt.y


        row = rows.Next()


 your_shapefile = 'Path\To\Your\Shapefile.shp'
 get_shapefile( your_shapefile )
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.