さて、本日は「Arcpyでフィーチャクラスの座標系を一括で変換する」です。久しぶりにArcGISネタですね。なんとArcMap上ではフィーチャクラスごとにしか座標系の定義をすることができないので、フィーチャクラスが大量に存在している場合、座標系の変換はとても面倒です。そこで、今回は対象のフィーチャクラスの座標系を一括変換するスクリプトを書いてみました。前提条件としては以下です。
・対象のGDBを全て任意のフォルダに格納する
これだけです。とりあえずサンプルとしてこんな感じのフィーチャクラスを作成してみました。
座標系はすべて「平面直角座標系第11系(JGD2000)」としてフィーチャクラスを作成しました。
この座標系を「平面直角座標系第9系(JGD2000)」に変換したいと思います。
# -*- coding: utf-8 -*- import arcpy import os #対象のフォルダを設定 folder = u"C:\ArcPySample\座標系変換" #平面直角座標系第9系(JGD2000)にする projection ="PROJCS['JGD_2000_Japan_Zone_9',GEOGCS['GCS_JGD_2000',DATUM['D_JGD_2000',SPHEROID['GRS_1980',6378137.0,298.257222101]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]],PROJECTION['Transverse_Mercator'],PARAMETER['False_Easting',0.0],PARAMETER['False_Northing',0.0],PARAMETER['Central_Meridian',139.8333333333333],PARAMETER['Scale_Factor',0.9999],PARAMETER['Latitude_Of_Origin',36.0],UNIT['Meter',1.0]]" #対象フォルダ dir = os.listdir(folder) #gdbフォルダをリストに格納 gdb = [] #対象フォルダ内のgdbフォルダをリストに格納 for d in dir: if d.find('.gdb') > -1: gdb.append(d) #mdx情報を取得(これを入れるとArcMap上での実行が必要なので、削除してもOK) mxd = arcpy.mapping.MapDocument(r"CURRENT") #gdbの数分ループ for g in gdb: ws = os.path.join(folder , g) # ワークスペースの設定 arcpy.env.workspace = ws # フィーチャクラスのリストを取得 fcList = arcpy.ListFeatureClasses() # すべてのフィーチャクラスに対してループで実行 for fc in fcList: #投影法の定義 arcpy.DefineProjection_management(fc,projection) #いちいちマップに読み込んでしまうので一旦削除。ってか他にいい処理の仕方があるはず。 for df in arcpy.mapping.ListDataFrames(mxd): for lyr in arcpy.mapping.ListLayers(mxd, "", df): arcpy.mapping.RemoveLayer(df, lyr)
結果を見てみます。
「平面直角座標系第9系(JGD2000)」に変換することができました。
簡単ではありますが、本日は「Arcpyでフィーチャクラスの座標系を一括で変換する」でした。