Jak uzyskać wszystkie współrzędne Lat / Long, które definiują plik kształtu

9

Mam Shapefile z kilkoma kształtami w środku.

Za pomocą MapWindow udało mi się ustalić, że potrzebuję kształtu o kształcie shapeId 19.

Jak zapewne możesz powiedzieć, ogólnie mam bardzo małe doświadczenie z GIS, ale myślę, że przybyłem we właściwe miejsce, aby poprosić o pomoc.

Potrzebuję wyodrębnić wszystkie współrzędne geograficzne określające kształt.

Czy można to zrobić za pomocą MapWindow, czy muszę użyć innego oprogramowania?

Jeśli potrzebujesz więcej informacji, proszę o komentarz, a ja zaktualizuję jak najszybciej.

Każda pomoc jest doceniana, ponieważ doprowadza mnie to do szału!

Zebs
źródło

Odpowiedzi:

10

QGIS może pomóc. Sprawdź tę odpowiedź (część WKT) na podobne pytanie: Konwertowanie wielokątów mapy podatkowej z Shapefile na tabelę numeru mapy i współrzędnych narożnika

podmrok
źródło
Dziękuję Ci! Pobieram teraz QGIS i skomentuję wyniki!
Zebs,
Kopiowanie do edytora tekstu było bardzo łatwe. Moje uzupełniające pytanie brzmi: jak przekonwertować punkty na informacje o długości, długości i długości?
Zebs,
2
Otwórz oryginalny plik kształtu. Kliknij legendę prawym przyciskiem myszy i wybierz opcję „Zapisz jako ...”. Wybierz docelową nazwę pliku i układ współrzędnych EPSG: 4326 (WGS84). Załaduj nowy plik kształtu. Teraz możesz uzyskać współrzędne lat / lon.
podmroku
4
Whuber
źródło
Dzięki, czy wiesz, jak mogę przekonwertować wartości X, Y na lon / lat. Rozumiem, że potrzebuję projekcji, ale mogę ją pobrać z pliku kształtu, prawda?
Zebs,
@zebs Tak, wiem; nie, nie możesz tego zrobić tak, jak myślisz. Plik kształtu zawiera tylko współrzędne i atrybuty; brak metadanych. Czasami informacje o projekcji pojawiają się w pliku .prj (wspólna nazwa pliku shapefile). Jeśli nie, to musisz tylko wiedzieć. (Dostawca danych powinien ci powiedzieć.) Aby cofnąć współrzędne, potrzebujesz oprogramowania GIS lub równoważnego. Oznacza to konwersję pliku kształtu w GIS na inny plik kształtu (lub odpowiednik), a następnie eksportowanie nowych współrzędnych.
whuber
2

Poniżej znajduje się sposób na uzyskanie dostępu do współrzędnych kształtu i szerokości geograficznej ESRI, między innymi bitami informacji, takimi jak odniesienie przestrzenne, atrybuty pola, wartości pola itp., Za pomocą Pythona. Poniższy kod działa tylko dla wielokątów i punktów (ponieważ nie zająłem się pisaniem kodu dla polilinii). Zasadniczo zebrałem trochę kodu, który znalazłem rozrzucony wokół ArcGIS Desktop Help 9.3, dodałem trochę moich i połączyłem w jedną funkcję. Został napisany w ArcGIS 9.3. Powinieneś być w stanie przekazać plik kształtu wielokąta lub punktowego, a logika odpowiednio go pokieruje.

 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 małp
źródło