てつふみはブログ

プログラミングなどの失敗記録

Arcpy フィールドの削除について


DeleteFields_management()
の第二引数はフィールドオブジェクトではなく、フィールドの名前を指定する。

フィールドオブジェクトを指定すると、なんか変なRuntimeErrorが返ってくる。

ホームページには引数はフィールドオブジェクトと書いてあるし、なんじゃこりゃ。
http://help.arcgis.com/ja/arcgisdesktop/10.0/help/index.html#//00170000004n000000
まぁ、下のサンプルコードを見れば分かるから、自分の見落としなんだけれども…

リストへの追加:appendとextend


■リストに整数をappendする。
>>> list=[]
>>> list.append(1)
>>> print(list)
[1]
リストが一つ増えた。

■リストに整数をextendする。
>>> list.extend(2)
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
TypeError: 'int' object is not iterable
ダメみたい。繰り返しできないってどういうことだろうか。


■リストにリストをextendする。
>>> list.extend([2])
>>> print(list)
[1, 2]
リストなら要素が一つでもok


■リストにリストをappendする。
>>> list.append([3])
>>> print(list)
[1, 2, [3]]
リストの中にリストが作られてしまう。

■リストにリストをextendする。
>>> list.extend([4,5,6])
>>> print(list)
[1, 2, [3], 4, 5, 6]
リストが長くなる。

■リストにリストをappendする。
>>> list.append([7,8,9])
>>> print(list)
[1, 2, [3], 4, 5, 6, [7, 8, 9]]
リストの中にリストができる。

変数の適用範囲


変数はどこまで適用されるのか

■関数の外部で定義した変数は、関数内で使用できるのか?
→使用可能。
def function(text):
    print(aaa)
    print(text)

aaa="HELLO"
function("WORLD")

>>>
HELLO
WORLD


■内部でも同じ変数を定義していた場合はどうなるか?
→内部の変数が優先される。
def function(text):
    aaa="See you!"
    print(aaa)
    print(text)

aaa="HELLO"
function("WORLD")


>>>
See you!
WORLD


■ひょっとして上のコードだと外部の中身も変わってる?
→外部までは影響しない。
def function(text):
    aaa="See you!"
    print(aaa)
    print(text)

aaa="HELLO"
function("WORLD")
print(aaa)


>>>
See you!
WORLD
HELLO

【疑問】空間参照のプロパティを変更する方法がわからない。


どうすればプロパティを変更できるのか?

##            #空間参照のプロパティを変更する方法
##            #しかし、距離単位が変わらない・・・
##            sr.linearUnitName="Meter"
##            sr.linearUnitCode=9001
##
##            print"*******変更結果********"
##            print sr.linearUnitCode
##            print sr.linearUnitName
##            print sr.exportToString().encode("shift_jis")
##            print sr.GCS
##            print"***********************"
##
##            arcpy.DefineProjection_management(os.path.join(os.path.dirname(outLocation),"temporaryFeatureClass"),sr.exportToString())

プログラム テスト組立の要点


プログラムのテスト仕様を組み立てるうえで、何に注意すればいいのか?

項目立ての注意点
・仕様に沿っているか?
・出力データはどんなデータであって欲しいか?
・入力される可能性のあるデータはどんなデータか?

シナリオを作成する上での注意点
・誰が見てもシナリオを実行できるか?
・シナリオの前提条件は明確にしたか?
・シナリオの実行結果は曖昧な言葉でないか?

距離単位が定義されていない時のXY座標精度


距離単位が定義されていない時のXY座標精度
→投影座標が定義されていないshpをフィーチャクラスに変換した時、単位がメートルであるとしてXY座標精度が扱われる。

例)
Point = arcpy.Point(12.34567,89.01234)を作成
arcpy.Describe(Point).spatialReference.linearUnitCode=0である
arcpy.env.XYResolution = "0.001 Meters"とした上で
arcpy.FeatureClassToFeatureClass_conversion(Point,[Directry],"pointFeature")
するとpointFeatureの(x,y)は(12.346,89.012)となる


おまけ)
・・・なぜか4桁目以下にも数値がつく場合がある。
ex) XY座標精度を小数点3桁までとして変換した後の座標値が(12.346025,89.012025)
しかし、他のレコードすべてに0.000025が足されていたりするため、丸めた後の値が小数点以下3桁きっかりの値ではなく、+0.000025した値のために4桁目以降の値も付いているのかと思われる。
こうなる原因、解決策は分からない。非常に小さい値なので、今のところ放置する。