シェープファイルを定義するすべての緯度/経度座標を取得する方法


9

中にいくつかの形状があるShapefileがあります。

MapWindowを使用して、必要な形状がshapeId 19の形状であることを確認できました。

おそらくおわかりのように、私はGISについての経験はほとんどありませんが、助けを求めるために適切な場所に来たと思います。

必要なのは、形状を決定するすべての緯度/経度座標を抽出することです。

MapWindowを使用してこれを行うことは可能ですか、それとも他のソフトウェアを使用する必要がありますか?

さらに情報が必要な場合はコメントしてください。できるだけ早く更新します。

これが私を夢中にさせているので、どんな助けもありがとう!

回答:


10

QGISが役立ちます。同様の質問に対するこの回答(WKTの部分)を確認してください:税マップポリゴンをシェープファイルからマップ番号とコーナー座標のテーブルに変換しています


ありがとうございました!今QGISをダウンロードしています。結果についてコメントします。
Zebs 2011年

テキストエディタへのコピーは非常に簡単でした。私の補足的な質問は、ポイントを緯度、経度情報に変換する方法ですか?
Zebs

2
元のシェープファイルを開きます。凡例で右クリックし、[名前を付けて保存]を選択します。ターゲットファイル名と座標系EPSG:4326(WGS84)を選択しました。その新しいシェープファイルをロードします。これで、緯度/経度座標を取得できます。
アンダーダーク

4

ありがとう、X、Y値を経度/緯度に変換する方法を知っていますか。投影が必要なことはわかっていますが、シェープファイルから取得できますか?
Zebs

@zebsはい、知っています。いいえ、あなたはそれをあなたの考えている方法で行うことはできません。シェープファイルには座標と属性のみが含まれます。メタデータなし。投影情報が.prjファイルに表示される場合があります(シェープファイルのベース名を共有)。そうでない場合は、知っておく必要があります。(データプロバイダーから通知されます。)座標の投影を解除するには、GISソフトウェアまたは同等のソフトウェアが必要です。つまり、GIS内のシェープファイルを別のシェープファイル(または同等のファイル)に変換してから、その新しい座標をエクスポートします。
whuber

2

以下は、Pythonを使用して、空間参照、フィールド属性、フィールド値などの情報のビットの中でも特に、ESRIシェープファイルの緯度と経度の座標にアクセスする方法です。以下のコードは、ポリゴンとポイントに対してのみ機能します(ポリラインのコードを書くために私は慣れていないためです)。基本的に、ArcGIS Desktop Help 9.3の周りに散らばっているコードをいくつかまとめ、自分のコードをいくつか追加して、1つの関数にまとめました。これは、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.