ArcPy図形出力


レイヤをCSV形式で出力したい。
図形はWKTかJSONで。

で書いてみたが、CSVモジュールが桁あふれか何かで面とか線がでない。。
流石Python簡単です…。いや初心者ってこんなもんなのか文字コードも面倒だし。

エスケープ面倒だけど普通にTextWritingしてくかなぁ。。

以下、点のみ(SINGLE)はうまくいくのコード

import os.path
import arcpy
import csv

# Python ツールボックスのツール動作のカスタマイズ
# http://resources.arcgis.com/ja/help/main/10.1/index.html#//00150000002m000000
class Toolbox(object):
    def __init__(self):
        """Define the toolbox (the name of the toolbox is the name of the
        .pyt file)."""
        self.label = "MyToolbox"
        self.alias = ""

        # ツールのリスト設定 ( クラス設定 )
        self.tools = [WktCsvTool]

# データドリブン画像化
class WktCsvTool(object):
    def __init__(self):
        self.label = "WKT出力"
        self.description = "WKT出力"
        self.canRunInBackground = False

    def getParameterInfo(self):
        # Python ツールボックスでのパラメータの定義
        # http://resources.arcgis.com/ja/help/main/10.1/index.html#//001500000028000000
        # getParameterの型一覧
        # http://resources.arcgis.com/ja/help/main/10.1/index.html#//001500000035000000
        # パラメータリファレンス
        # http://resources.arcgis.com/ja/help/main/10.1/index.html#//018z00000063000000

        # レイヤ
        param0 = arcpy.Parameter(
        displayName="入力レイヤ",
        name="in_layer",
        datatype="GPFeatureLayer",
        parameterType="Required",
        direction="Input")
        # 出力タイプ
        param1 = arcpy.Parameter(
        displayName="出力タイプ",
        name="in_geomType",
        datatype="GPString",
        parameterType="Required",
        direction="Input")

        param1.filter.type = "ValueList"
        param1.filter.list = ["WKT", "JSON"]
        param1.value = "WKT"

        # 出力CSVファイル
        param2 = arcpy.Parameter(
        displayName="出力ファイル",
        name="out_file",
        datatype="DETextfile",
        parameterType="Required",
        direction="Output ")

        return [param0, param1, param2]

    def isLicensed(self):
        """Set whether tool is licensed to execute."""
        return True

    def updateParameters(self, parameters):
        """Modify the values and properties of parameters before internal
        validation is performed.  This method is called whenever a parameter
        has been changed."""
        return

    def updateMessages(self, parameters):
        """Modify the messages created by internal validation for each tool
        parameter.  This method is called after internal validation."""
        return

    def execute(self, parameters, messages):
        # Python ツールボックスでのメッセージの書き込み
        # http://resources.arcgis.com/ja/help/main/10.1/index.html#//001500000036000000

        layer = parameters[0].value
        outType = parameters[1].valueAsText
        out_csv = parameters[2].valueAsText

        messages.addMessage("入力レイヤ名:{0}".format(layer.name))
        messages.addMessage("図形出力タイプ:{0}".format(outType))
        messages.addMessage("出力ファイル:{0}".format(out_csv))
        fields = arcpy.ListFields(layer)

        with open(out_csv, 'w') as csvfile:
            csvWriter = csv.writer(csvfile, delimiter=',', lineterminator='\n')
            list = []
            for f in fields:
                list.append(f.name)
            csvWriter.writerow(list)
            del list

            cursor = arcpy.SearchCursor(layer)
            for row in cursor:
                list = []
                for f in fields:
                    val = row.getValue(f.name)
                    if isinstance(val , arcpy.Geometry):
                        if outType == "JSON":
                            val = val.JSON
                        else:
                            val = val.WKT

                    if isinstance(val , unicode):
                        val = val.encode('cp932')
                    else:
                        val = str(val)

                    list.append(val)
                    #print row.getValue(f.name)
                #list = [ unicode(str(v),'cp932').encode('utf8') for v in list ]
                csvWriter.writerow(list)
                del list
            del cursor

        return
カテゴリー: 開発 タグ: パーマリンク