1

Using ArcGIS 10.3 for desktop.

For our noxious weed surveys, we have some features recorded as polygons, some as lines, and some as points. I would like to convert everything to points, and then merge it all into one feature class for each species. I have minimal python experience, but am willing to try.

It is currently set up so that there are three file geodatabases. NoxiousWeeds_points.gdb, NoxiousWeeds_poly.gdb, and NoxiousWeeds_lines.gdb. Within each geodatabase is a separate feature class for each species. E.g., "HimalayanBlackberry_points" or "ReedCanarygrass_poly," etc. Names are consistent between the three geodatabases, the only thing that varies is the suffix.

What I'm Trying to Do:

I would like to be able to simply point arc to the three geodatabases and have it automatically convert the line and polygon feature classes to points, then merge with the matching point feature class based on the name, and then saved to a fourth, separate geodatabase with a slightly modified name. For example, "Knotweed_poly" and "knotweed_line" would both be converted to points, merged with the existing "knotweed_points," and then saved as "Knotweed_merged" in a fourth, separate geodatabase named "NoxiousWeeds_merged." Ideally I could simply point arc to the geodatabases that contain all these files and it would go through this whole process for each species by itself without me having to manually select each file. Note that I would also like the original source files to remain unaltered.

I suspect this is possible through some combination of python and ModelBuilder. If so, how would you recommend I go about it?

PolyGeo
65.5k29 gold badges115 silver badges350 bronze badges
asked Aug 12, 2015 at 22:22
3
  • Definitely possible...I'd see how much of this post you can follow first and then coming back here if you have a more specific questions or it's not working: gis.stackexchange.com/questions/108113/… Commented Aug 13, 2015 at 0:38
  • What do you expect as output when you convert your polys and lines to points? Centroids, vertices...? Commented Aug 13, 2015 at 1:12
  • try 'spatial join' your line, point and polygon features with features having new names and attributes, without converting their geometry into points. Commented Aug 13, 2015 at 9:51

1 Answer 1

1

I suggest populating a python dictionary. The key would be your category, and the values would be a python list of your feature classes to merge. Use a for loop to iterate through your geodatabases, and another to iterate through your feature classes. Check each feature class to determine if it contains points. If not, perform a Feature To Point conversion. Something like this (untested):

#-Locals
#List of GDBs
gdbs = [r"c:\test\NoxiousWeeds_points.gdb",
 r"c:\test\NoxiousWeeds_poly.gdb",
 r"c:\test\NoxiousWeeds_lines.gdb"]
#Merge GDB
mergeGdb = r"c:\test\NoxiousWeeds_merged.gdb"
#Workspace
#Use "in_memory" or workspace geodatabase on disk
workspace = "in_memory"
#-End Locals
#Import modules
from arcpy import *
import os
#dictionary to be populated with list of all feature classes
fcsDi = {}
#Garbage for deleting created feature classes
garbage = []
#Iterate through three GDBs
for gdb in gdbs:
 print "Iterating", gdb
 #Set workspace to GDB
 env.workspace = gdb
 #List feature classes in gdb
 fcs = ListFeatureClasses ()
 #Iterate through feature classes
 for fc in fcs:
 #Check if feature class is points
 shape = Describe (fc).shapeType
 if shape != "Point":
 #Feature to point
 outFile = os.path.join (workspace, fc + "_point")
 FeatureToPoint_management (fc, outFile, "INSIDE")
 garbage += [outFile]
 else:
 outFile = os.path.join (gdb, fc)
 #Remove unwanted text to determine merge
 fcCategory = fc.replace ("_poly", "").replace ("_lines", "").replace ("_points", "")
 #Check if category is in dictionary
 if fcCategory in fcsDi:
 fcsDi [fcCategory] += [outFile]
 #If not in dictionary
 else:
 fcsDi [fcCategory] = [outFile]
#Iterate through dictionary keys
for category in fcsDi:
 print "Merging", category
 #Path to merge feature class
 outFc = os.path.join (mergeGdb, category + "_merged")
 #Get list of feature classes from dictionary
 fcs = fcsDi [category]
 #Merge
 print "Created:", outFc
 Merge_management (fcs, outFc)
#Clean up
for trash in garbage:
 Delete_management (trash)
answered Aug 13, 2015 at 16:26
7
  • Holy moly! I owe you a beer! I'll try this out tomorrow at work and report back! Thank you! One more component that would be nice to have...do you think there's any easy way for a script/model to merge ONLY new/changed values into an existing _merged.gdb? So, it would take only the values in the regular gdb's that had been changed/added since the the merged.gdb was created/last merged...and then merge those changes - overwriting values in the corresponding _merged feature classes that had changed/adding values that were brand new? We do use editor tracking, if that helps. Commented Aug 14, 2015 at 1:17
  • I hope it works for you! Let us know if you have any issues. It sounds like you have a second question, so that should be addressed in a new post. Commented Aug 14, 2015 at 15:34
  • Do you know if this script would automatically overwrite any feature classes already in the database if they share a name? Commented Aug 14, 2015 at 19:30
  • That's an environmental setting. arcpy.env.overwriteOutput = True. Setting this variable to true will copy over existing data when procedures such as CopyFeatures_management or FeatureClassToFeatureClass_management are performed. Commented Aug 14, 2015 at 20:02
  • Thanks! Where would I put this? Near the beginning of the script, not indented? Commented Aug 14, 2015 at 21:26

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.