Well-known text(WKT) is a text markup language for reprensenting vector geometry objects on a map, spatial reference systems of spatial objects and transformations between spatial refrence systems. A binaru equivalent, known as well-known binary(WKB), is used to transfer and store information on databases.
运行环境:
ArcGIS 10.4
import os
import arcpy
import traceback
import time
def GetNowTime():
return time.strftime("%Y-%m-%d %H:%M:%S")
def main():
filePath = raw_input("Please input the filePath: ").lstrip()
while not os.path.exists(filePath):
filePath=raw_input("Please input a valid filePath: ").lstrip()
print "Start at",GetNowTime()
#read all .mdb
for sub ,mid ,fnames in os.walk(filePath):
try:
for fname in fnames:
if os.path.splitext(fname)[-1] == ".mdb":
try:
arcpy.env.workspace = os.sep.join([sub,fname])
#print arcpy.env.workspace ,"..."
tabs =arcpy.ListFeatureClasses()
#print tabs
for tab in tabs:
#print tab,
fields = [f.name for f in arcpy.ListFields(tab)]
if "WKB" not in fields :
arcpy.AddField_management(tab,"WKB","BLOB")
with arcpy.da.UpdateCursor(tab,['SHAPE@','WKB']) as cursor:
for row in cursor:
row[1]=row[0].WKB
cursor.updateRow(row)
#print "next..."
except arcpy.ExecuteError:
er = '\n----------error----------\n'
print er,arcpy.GetMessages(),er
continue
except:
er = '\n----------Error----------\n'
print er,arcpy.env.workspace,tab,er
continue
print "\nEnd at",GetNowTime()
if __name__=="__main__":
main()
做成插件运行时,以下语句报错:
if "WKB" not in fields :
arcpy.AddField_management(tab,"WKB","BLOB")
WKB字段创建后不能被读取,所以进行创建字段,但提示“WKB”字段已存在。原因未知。
作此记录。