Como obter todas as cordas lat / long que definem um shapefile


9

Eu tenho um Shapefile com várias formas dentro dele.

Usando o MapWindow, fui capaz de determinar que a forma de que preciso é aquela com shapeId 19.

Como você provavelmente pode dizer, tenho muito pouca experiência com SIG em geral, mas acho que vim ao lugar certo para pedir ajuda.

O que eu preciso é extrair todas as coordenadas lat / long que determinam a forma.

É possível fazer isso usando o MapWindow ou preciso usar outro software?

Se mais informações forem necessárias para ajudar, comente e eu atualizarei o mais rápido possível.

Qualquer ajuda é apreciada, pois isso está me deixando louco!

Respostas:


10

O QGIS pode ajudar. Verifique esta resposta (a parte WKT) para uma pergunta semelhante: Convertendo polígonos de mapa de imposto de Shapefile em tabela de número de mapa e coordenadas de canto


Obrigado! Estou baixando o QGIS agora e comentarei os resultados!
Zebs 4/03/11

Foi muito fácil copiar para um editor de texto. Minha pergunta complementar é como converter os pontos em informações longas e latinas?
Zebs 4/03/11

2
Abra o shapefile original. Clique com o botão direito do mouse na legenda e selecione "Salvar como ...". Escolha um nome de arquivo de destino e sistema de coordenadas EPSG: 4326 (WGS84). Carregue esse novo shapefile. Agora você pode obter coordenadas lat / lon.
Subterrâneo

4

Obrigado, você sabe como posso converter os valores X, Y em lon / lat. Entendo que preciso da projeção, mas posso obtê-la no shapefile, certo?
Zebs 4/03/11

@ zebs Sim, eu sei; não, você não pode fazer da maneira que pensa. O shapefile contém apenas coordenadas e atributos; sem metadados. Às vezes, as informações da projeção são exibidas em um arquivo .prj (compartilhando o nome base do shapefile). Se não, então você só precisa saber. (O provedor de dados deve informar.) Você precisa do software GIS, ou equivalente, para não projetar as coordenadas. Isso significa converter o shapefile dentro do GIS em outro shapefile (ou o equivalente) e exportar suas novas coordenadas.
whuber

2

Abaixo está uma maneira de acessar as coordenadas de latitude e longitude do arquivo shap ESRI, entre outras informações, como referência espacial, atributos de campo, valores de campo etc. usando Python. O código abaixo funciona apenas para polígonos e pontos (porque não comecei a escrever o código para polilinhas). Basicamente, juntei alguns códigos que encontrei espalhados pela Ajuda do ArcGIS Desktop 9.3, adicionei alguns dos meus e os reuni em uma única função. Está escrito com o ArcGIS 9.3. Você deve passar um shapefile de polígono ou shapefile de ponto e a lógica o direcionará de acordo.

 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 )
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.