shapefile을 정의하는 모든 위도 / 경도를 얻는 방법


9

내부에 여러 모양이있는 Shapefile이 있습니다.

MapWindow를 사용하여 필요한 모양이 shapeId 19 인 모양인지 확인할 수있었습니다.

당신은 아마 GIS에 대한 경험이 거의 없다고 말할 수 있지만, 도움을 요청하기 위해 올바른 곳으로 왔다고 생각합니다.

내가 필요한 것은 모양을 결정하는 모든 위도 / 경도 좌표를 추출하는 것입니다.

MapWindow를 사용하여이 작업을 수행 할 수 있습니까? 아니면 다른 소프트웨어를 사용해야합니까?

도움이 필요한 추가 정보가 필요한 경우 의견을 보내 주시면 최대한 빨리 업데이트하겠습니다.

이것이 나를 미치게 해주므로 어떤 도움을 주셔서 감사합니다!

답변:


10

QGIS가 도울 수 있습니다. 이 답변 (WKT 부분)을 비슷한 질문으로 확인하십시오. 세금 맵 다각형을 Shapefile에서 맵 번호 및 모서리 좌표 테이블로 변환


감사합니다! 지금 QGIS를 다운로드 중이며 결과에 대해 다시 언급하겠습니다!
Zebs

텍스트 편집기로 매우 쉽게 복사 할 수있었습니다. 내 보완적인 질문은 포인트를 위도, 긴 정보로 변환하는 방법입니다.
Zebs

2
원본 모양 파일을 엽니 다. 범례에서 마우스 오른쪽 버튼을 클릭하고 "다른 이름으로 저장 ..."을 선택하십시오. 대상 파일 이름과 좌표계 EPSG : 4326 (WGS84)을 선택하십시오. 새 모양 파일을로드하십시오. 이제 위도 / 경도 좌표를 얻을 수 있습니다.
underdark

4

감사합니다. X, Y 값을 lon / lat로 변환하는 방법을 알고 있습니까? 나는 투영이 필요하다는 것을 이해하지만 shapefile에서 올바르게 얻을 수 있습니까?
Zebs

@zebs 예, 알고 있습니다. 아니, 당신은 당신이 생각하는 방식으로 그것을 할 수 없습니다. shapefile에는 좌표와 속성 만 포함됩니다. 메타 데이터가 없습니다. 때로는 투영 정보가 .prj 파일에 나타납니다 (셰이프 파일의 기본 이름을 공유 함). 그렇지 않다면, 당신은 알아야만합니다. 좌표를 투영하지 않으려면 GIS 소프트웨어 또는 이와 동등한 소프트웨어가 필요합니다. 이것은 GIS 내의 shapefile 을 다른 shapefile (또는 동등한 파일)로 변환 한 다음 새 좌표를 내보내는 것을 의미합니다.
whuber

2

다음은 Python을 사용하여 공간 참조, 필드 속성, 필드 값 등과 같은 다른 정보 비트 중에서 ESRI shapefile 위도 및 경도 좌표에 액세스하는 방법입니다. 아래 코드는 다각형과 점에만 작동합니다 (폴리 라인 코드 작성에 익숙하지 않기 때문에). 나는 기본적으로 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 )
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.