Comment obtenir tous les accords lat / long qui définissent un fichier de formes


9

J'ai un Shapefile avec plusieurs formes à l'intérieur.

En utilisant MapWindow, j'ai pu déterminer que la forme dont j'ai besoin est celle avec shapeId 19.

Comme vous pouvez probablement le constater, j'ai très peu d'expérience avec le SIG en général, mais je pense que je suis venu au bon endroit pour demander de l'aide.

Ce dont j'ai besoin, c'est d'extraire toutes les coordonnées lat / long qui déterminent la forme.

Est-il possible de le faire en utilisant MapWindow ou dois-je utiliser un autre logiciel?

Si plus d'informations sont nécessaires pour vous aider, veuillez commenter et je mettrai à jour dès que possible.

Toute aide est appréciée car cela me rend fou!

Réponses:


10

QGIS peut vous aider. Vérifiez cette réponse (la partie WKT) à une question similaire: Conversion des polygones de carte fiscale de Shapefile en table de numéro de carte et de coordonnées de coin


Je vous remercie! Je télécharge QGIS en ce moment et je commenterai les résultats!
Zebs

C'était très facile de copier dans un éditeur de texte. Ma question complémentaire est de savoir comment convertir les points en lat, infomration longue?
Zebs

2
Ouvrez le fichier de formes d'origine. Faites un clic droit dessus dans la légende et sélectionnez "Enregistrer sous ...". Choisissez un nom de fichier cible et un système de coordonnées EPSG: 4326 (WGS84). Chargez ce nouveau fichier de formes. Vous pouvez maintenant obtenir les coordonnées lat / lon.
underdark

4

Merci, savez-vous comment je peux convertir les valeurs X, Y en lon / lat. Je comprends que j'ai besoin de la projection, mais je peux l'obtenir du fichier de formes, n'est-ce pas?
Zebs

@zebs Oui, je sais; non, vous ne pouvez pas le faire comme vous le pensez. Le fichier de formes contient uniquement des coordonnées et des attributs; pas de métadonnées. Parfois, les informations de projection apparaissent dans un fichier .prj (partageant le nom de base du fichier de formes). Sinon, alors tu dois juste savoir. (Le fournisseur de données devrait vous le dire.) Vous avez besoin d'un logiciel SIG ou équivalent pour dé-projeter les coordonnées. Cela signifie convertir le fichier de formes dans le SIG en un autre fichier de formes (ou l'équivalent), puis exporter ses nouvelles coordonnées.
whuber

2

Vous trouverez ci-dessous un moyen d'accéder aux coordonnées de latitude et de longitude du fichier de formes ESRI, entre autres bits d'informations tels que la référence spatiale, les attributs de champ, les valeurs de champ, etc., à l'aide de Python. Le code ci-dessous ne fonctionne que pour les polygones et les points (car je n'ai pas encore écrit le code pour les polylignes). J'ai essentiellement bricolé du code que j'ai trouvé éparpillé dans l'aide d'ArcGIS Desktop 9.3, ajouté quelques-unes des miennes et rassemblé dans une seule fonction. Il a été écrit avec ArcGIS 9.3. Vous devriez pouvoir passer un fichier de formes polygonal ou un fichier de formes ponctuelles et la logique le dirigera en conséquence.

 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 )
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.