Cómo obtener todas las coordenadas lat / long que definen un shapefile

9

Tengo un Shapefile con varias formas dentro.

Usando MapWindow, he podido determinar que la forma que necesito es la que tiene shapeId 19.

Como probablemente pueda notar, tengo muy poca experiencia con SIG en general, pero creo que he venido al lugar correcto para pedir ayuda.

Lo que necesito es extraer todas las coordenadas lat / long que determinan la forma.

¿Es posible hacer esto usando MapWindow o necesito usar algún otro software?

Si se necesita más información para ayudar, comente y actualizaré lo antes posible.

Cualquier ayuda es apreciada ya que esto me está volviendo loco.

Zebs
fuente

Respuestas:

10

QGIS puede ayudar. Verifique esta respuesta (la parte WKT) a una pregunta similar: Convertir polígonos de mapa de impuestos de Shapefile a la tabla de número de mapa y coordenadas de esquina

bajo oscuro
fuente
¡Gracias! ¡Estoy descargando QGIS ahora mismo y comentaré los resultados!
Zebs
Fue muy fácil copiar a un editor de texto. Mi pregunta complementaria es cómo convertir los puntos a lat, información larga.
Zebs
2
Abra el archivo de forma original. Haga clic derecho en la leyenda y seleccione "Guardar como ...". Elija un nombre de archivo de destino y un sistema de coordenadas EPSG: 4326 (WGS84). Cargue ese nuevo archivo de forma. Ahora puede obtener coordenadas lat / lon.
oscuro
4
whuber
fuente
Gracias, ¿sabes cómo puedo convertir los valores X, Y a lon / lat? Entiendo que necesito la proyección, pero puedo obtenerla del archivo de forma, ¿verdad?
Zebs
@zebs Sí, lo sé; no, no puedes hacerlo como piensas. El archivo de forma contiene solo coordenadas y atributos; sin metadatos A veces, la información de proyección aparece en un archivo .prj (que comparte el nombre base del archivo de forma). Si no, entonces solo tienes que saberlo. (El proveedor de datos debe informarle). Necesita un software SIG, o el equivalente, para desproyectar las coordenadas. Esto significa convertir el archivo de forma dentro del SIG en otro archivo de forma (o el equivalente) y luego exportar sus nuevas coordenadas.
whuber
2

A continuación se muestra una forma de acceder a las coordenadas de latitud y longitud del archivo de forma ESRI, entre otros bits de información, como referencia espacial, atributos de campo, valores de campo, etc., utilizando Python. El siguiente código solo funciona para polígonos y puntos (porque no he podido escribir el código para polilíneas). Básicamente, improvisé algunos códigos que encontré dispersos por ArcGIS Desktop Help 9.3, agregué algunos de los míos y los reuní en una función. Fue escrito con ArcGIS 9.3. Debería poder pasar un archivo de forma de polígono o un archivo de forma de punto y la lógica lo dirigirá en consecuencia.

 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 )
9 monos
fuente