Come ottenere tutti i coord lat / long che definiscono uno shapefile


9

Ho uno Shapefile con diverse forme al suo interno.

Usando MapWindow sono stato in grado di determinare che la forma di cui ho bisogno è quella con shapeId 19.

Come probabilmente puoi dire, ho poca esperienza con i GIS in generale, ma penso di essere arrivato nel posto giusto per chiedere aiuto.

Ciò di cui ho bisogno è estrarre tutte le coordinate lat / long che determinano la forma.

È possibile farlo usando MapWindow o devo usare qualche altro software?

Se sono necessarie ulteriori informazioni per aiutare, si prega di commentare e aggiornerò il prima possibile.

Qualsiasi aiuto è apprezzato perché questo mi sta facendo impazzire!

Risposte:


10

QGIS può aiutare. Controlla questa risposta (la parte WKT) a una domanda simile: conversione di poligoni delle mappe fiscali da Shapefile in tabella del numero di mappa e coordinate d'angolo


Grazie! Sto scaricando QGIS in questo momento e commenterò i risultati!
Zebs

È stato molto facile copiare su un editor di testo. La mia domanda complementare è come convertire i punti in lat, informazioni lunghe?
Zebs

2
Apri lo shapefile originale. Fai clic destro nella legenda e seleziona "Salva con nome ...". Scegliere un nome file di destinazione e coordinare il sistema EPSG: 4326 (WGS84). Carica quel nuovo shapefile. Ora puoi ottenere le coordinate lat / lon.
underdark

4

Grazie, sai come posso convertire i valori X, Y in lon / lat. Capisco che ho bisogno della proiezione, ma posso ottenerlo dal file di forma, giusto?
Zebs

@zebs Sì, lo so; no, non puoi farlo come pensi. Lo shapefile contiene solo coordinate e attributi; nessun metadata. A volte le informazioni sulla proiezione vengono visualizzate in un file .prj (condividendo il nome di base del file di forma). Altrimenti, devi solo saperlo. (Il fornitore di dati dovrebbe dirtelo.) È necessario il software GIS, o equivalente, per non proiettare le coordinate. Ciò significa convertire lo shapefile all'interno del GIS in un altro shapefile (o equivalente) e quindi esportare le sue nuove coordinate.
whuber

2

Di seguito è riportato un modo per accedere alle coordinate di latitudine e longitudine dello shapefile ESRI, tra le altre parti di informazioni come riferimento spaziale, attributi di campo, valori di campo, ecc., Usando Python. Il codice seguente funziona solo per poligoni e punti (perché non sono riuscito a scrivere il codice per le polilinee). Fondamentalmente ho messo insieme alcuni dei codici che ho trovato sparsi in ArcGIS Desktop Help 9.3, ne ho aggiunti alcuni e li ho riuniti in un'unica funzione. È stato scritto con ArcGIS 9.3. Dovresti essere in grado di passare un file di forma poligonale o un file di forma punto e la logica lo indirizzerà di conseguenza.

 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 )
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.