Thanks you for the reply. I will try and implement this into my current project. FOr myself, the feature classes are already created in a FileGDB. I would like to take the WKT field in my SQLite DB and map it to the shape field in the feature classes. I would then like to map 2 other fields from the DB to the feature classes. I will let you know how this works out.
Although you can use arcpy.FromWKT() there is a much more elegant token on arcpy.da.InsertCursor() than enables you to load a wkt text string straight into a featureclass.
Here is an example loading from a CSV file into a geodatabase with the geometry as a wkt string, but the same thing would apply for a sqlite database source if you iterated through the records. If you have upgraded the sqlite database to a spatialite database then you could convert the string wkt field into the geometry field, but there is a bug that crashes da.Update(row) on a geopackage at the moment (10.3 pre-release) but the da.InsertCursor(row) works ok. Of course it works normally if your target is a filegeodatabase.
def create_new(rcl): ''' create a new featureclass from scratch''' # arcpy.management.CreateFeatureclass(ws, rcl, template='rcl_changeset_template', spatial_reference=sr) arcpy.management.CreateFeatureclass(ws, rcl, 'POLYLINE', spatial_reference=sr) arcpy.management.AddField(rcl, 'FID', 'LONG') # actually not a long but a complex string arcpy.management.AddField(rcl, 'CHANGE', 'TEXT', field_length=16) arcpy.management.AddField(rcl, 'ID', 'LONG') arcpy.management.AddField(rcl, 'ALT_ID', 'LONG') arcpy.management.AddField(rcl, 'STATUS', 'TEXT', field_length=4) arcpy.management.AddField(rcl, 'NON_CADASTRAL_RD', 'TEXT', field_length=1) arcpy.management.AddField(rcl, 'AUDIT_ID', 'LONG') arcpy.management.AddField(rcl, 'SE_ROW_ID', 'LONG') desc = arcpy.Describe(rcl) print "target fc:", rcl, desc.shapeType, desc.spatialReference.name, desc.featureType # create a buffer list without objectid and shape_length and rename shape field to a token buf = [f.name.upper() for f in desc.fields] print "Desc fields in target:",buf buf.remove('OBJECTID') # buf.remove('SHAPE_LENGTH') buf[buf.index("SHAPE")] = 'SHAPE@WKT' # shape field in cursor name MUST be one of special tokens so use SHAPE@WKT dBuf = {f.upper():buf.index(f) for f in buf} print "dBuf:", dBuf # insert records into the featureclass # maybe for speed we could use arcpy.da.Editor for bulk commits? debug = False icur = arcpy.da.InsertCursor(rcl, buf) # shape called SHAPE@ or SHAPE@WKT with open(csv_file,'r') as f: reader = csv.reader(f) n = 0 for row in reader: if reader.line_num == 1: print "header:", len(row),row rowCSV = [r.upper().replace('__','') for r in row] # get rid of double underscores in __change__ print "CSV header:",rowCSV rowCSV[rowCSV.index("SHAPE")] = 'SHAPE@WKT' dCSV = {r.upper():rowCSV.index(r) for r in rowCSV} print "dCSV:", dCSV for f in dBuf.keys(): try: print "Field: {} Buf {}, CSV {} ".format(f, dBuf, dCSV) except: print "Field name dictionaries do not match", f sys.exit(1) print print '-------------------- BEGIN --------------------------' else: n+=1 # fieldmapping by name dictionaries # initialise a new buffer feat = [None] * len(buf) for f in buf: # iterate over field names # just poke shape straight into buffer field as a WKT string! if row[dCSV]: # populate if not an empty data element, otherwise leave as null if f == 'FID': feat[dBuf] = int(row[dCSV].split('.')[-1]) # print f,feat[dBuf] else: feat[dBuf] = row[dCSV] icur.insertRow(feat) del icur deltaTime = datetime.datetime.now() - start print n,"Well Done", deltaTime return
Hello,
I believe I am trying to do something similar here. I have an SQLite table with multiple files. One of the columns in the table is WKT. I would like to take the WKT from all the files within the table and populate the "SHAPE" field in a feature class. Any ideas?
Thanks
# convert well known text to geometry, and compile shapes into a single feature class... # 11/15/2012 import arcpy File = "Y:\\Projects\\Ryan\\Analysis\\CNickerson\\OK\\OKraw.mdb\\OK_AgparcelsWKT" # dimension the WKT string field and poly ID field... # the field holding the WKT string... field1 = "coord_1" # the field holding the unique ID... field2 = "fidfips" # set up the empty list... featureList = [] # iterate on table row... cursor = arcpy.SearchCursor(File) row = cursor.next() while row: print (row.getValue(field2)) WKT = row.getValue(field1) # this is the part that converts the WKT string to geometry... temp = arcpy.FromWKT(WKT, "") # append the current geometry to the list... featureList.append(temp) row = cursor.next() # copy all geometries in the list to a feature class... arcpy.CopyFeatures_management(featureList, "Y:\\Projects\\Ryan\\Analysis\\CNickerson\\OK\\AgParcelShapes.shp") # clean up... del row, temp, WKT, File, field1, featureList, cursor
# Append to the list of Polygon objects # featureList.append(polygon) # Create a copy of the Polygon objects, by using featureList as input to # the CopyFeatures tool. # arcpy.CopyFeatures_management(featureList, "c:/geometry/polygons.shp")
Los miembros registrados pueden publicar, seguir actualizaciones y más. ¿Nuevo aquí? Regístrate gratis.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.