Як отримати всі лати / довгі координати, які визначають файл форми


9

У мене є Shapefile з декількома формами всередині нього.

Використовуючи MapWindow, я зміг визначити, що потрібна мені форма - це форма, яка має 19.

Як ви, напевно, можете сказати, у мене взагалі дуже мало досвіду роботи з ГІС, але я думаю, що я прийшов у потрібне місце, щоб попросити допомоги.

Що мені потрібно - це витягнути всі лат / довгі координати, які визначають форму.

Чи можливо це зробити за допомогою MapWindow або мені потрібно використовувати якесь інше програмне забезпечення?

Якщо вам потрібна додаткова інформація, будь ласка, прокоментуйте, і я якнайшвидше оновлю її.

Будь-яка допомога цінується, оскільки це зводить мене з розуму!

Відповіді:


10

QGIS може допомогти. Перевірте цю відповідь (частина WKT) на аналогічне запитання: Перетворення полігонів податкової карти з Shapefile у таблицю номера карти та кутових координат


Дякую! Я зараз завантажую QGIS, і я знову прокоментую свої результати!
Зебс

Копіювання в текстовий редактор було дуже просто. Моє додаткове запитання - як перетворити бали на лат, довгу інформацію?
Зебс

2
Відкрийте оригінальний файл форми. Клацніть правою кнопкою миші в легенді та виберіть "Зберегти як ...". Оберіть ім'я цільового файлу та систему координат EPSG: 4326 (WGS84). Завантажте це нове формат-файл. Тепер ви можете отримати координати lat / lon.
underdark

4

Спасибі, чи знаєте ви, як я можу конвертувати значення X, Y у lon / lat. Я беру на себе зобов’язання, що мені потрібна проекція, але я можу отримати це з форми файлу правильно?
Зебс

@zebs Так, я знаю; ні, ти не можеш зробити це так, як ти думаєш. Файл форми містить лише координати та атрибути; немає метаданих. Іноді інформація про проекцію з’являється у файлі .prj (спільне ім'я базового файлу форми). Якщо ні, то ви просто повинні знати. (Постачальник даних повинен вам сказати.) Для зняття проектів з координат вам потрібно програмне забезпечення GIS або його еквівалент. Це означає перетворення файлу форми в GIS в інший файл форми (або його еквівалент), а потім експортування його нових координат.
whuber

2

Нижче наведено спосіб отримати доступ до координат ширини та довготи ESRI, серед інших бітів інформації, таких як просторова посилання, атрибути поля, значення поля тощо за допомогою Python. Нижче наведений код працює лише для багатокутників і точок (оскільки я не встиг записати код для поліліній). Я в основному зчепив якийсь код, який я знайшов розкиданим навколо довідки ArcGIS Desktop Help 9.3, додав частину свого власного і об'єднав його в одну функцію. Це написано з ArcGIS 9.3. Ви повинні мати можливість передавати у формуле багатокутника формули або точкові файли форми, і логіка спрямовуватиме його відповідно.

 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 )
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.