Как получить все координаты широты / долготы, которые определяют шейп-файл

9

У меня есть шейп-файл с несколькими фигурами внутри.

Используя MapWindow, я смог определить, что мне нужна форма с shapeId 19.

Как вы, вероятно, можете сказать, у меня очень мало опыта работы с ГИС, но я думаю, что пришел в нужное место, чтобы попросить о помощи.

Что мне нужно, это извлечь все координаты широты / долготы, которые определяют форму.

Можно ли сделать это с помощью MapWindow или мне нужно использовать какое-то другое программное обеспечение?

Если требуется дополнительная информация, пожалуйста, прокомментируйте, и я обновлю как можно скорее.

Любая помощь приветствуется, так как это сводит меня с ума!

Zebs
источник

Ответы:

10

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

Подземье
источник
Спасибо! Я сейчас скачиваю QGIS и прокомментирую результаты!
Зебс
Это было очень легко скопировать в текстовый редактор. Мой дополнительный вопрос заключается в том, как преобразовать точки в лат, длинную информацию?
Зебс
2
Откройте оригинальный шейп-файл. Щелкните правой кнопкой мыши по легенде и выберите «Сохранить как ...». Выберите имя целевого файла и систему координат EPSG: 4326 (WGS84). Загрузите этот новый шейп-файл. Теперь вы можете получить координаты широты / долготы.
Подземье
4
Whuber
источник
Спасибо, вы знаете, как я могу преобразовать значения X, Y в долг / лат. Я предполагаю, что мне нужна проекция, но я могу получить это из шейп-файла, верно?
Зебс
@zebs Да, я знаю; нет, ты не можешь делать это так, как думаешь. Шейп-файл содержит только координаты и атрибуты; нет метаданных. Иногда информация о проекции появляется в файле .prj (совместно с базовым именем шейп-файла). Если нет, то ты просто должен знать. (Поставщик данных должен сообщить вам.) Вам необходимо программное обеспечение ГИС или эквивалент, чтобы отменить проекцию координат. Это означает преобразование шейп-файла в ГИС в другой шейп-файл (или его эквивалент), а затем экспорт его новых координат.
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 )
9monkeys
источник