From d926f017456e7b87a629bbb725fe7c9005a1c716 Mon Sep 17 00:00:00 2001 From: C Moore Date: Thu, 28 May 2015 10:39:13 -0400 Subject: [PATCH] Removing these end-user-focused tools & moving Moving to repo military-feature-toolbox v.next branch --- .../Military Feature Tools.tbx | Bin 59392 -> 0 bytes .../scripts/CalculateSidcField.py | 206 ---------- .../WriteGeoMessageFileFromFeatureClass.py | 357 ------------------ 3 files changed, 563 deletions(-) delete mode 100644 data/mil2525d/utilities/military-features-utilities/military-features-toolbox/Military Feature Tools.tbx delete mode 100644 data/mil2525d/utilities/military-features-utilities/military-features-toolbox/scripts/CalculateSidcField.py delete mode 100644 data/mil2525d/utilities/military-features-utilities/military-features-toolbox/scripts/WriteGeoMessageFileFromFeatureClass.py diff --git a/data/mil2525d/utilities/military-features-utilities/military-features-toolbox/Military Feature Tools.tbx b/data/mil2525d/utilities/military-features-utilities/military-features-toolbox/Military Feature Tools.tbx deleted file mode 100644 index 443a2eb70c94fad5747903d288fc744e43caac13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59392 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 diff --git a/data/mil2525d/utilities/military-features-utilities/military-features-toolbox/scripts/CalculateSidcField.py b/data/mil2525d/utilities/military-features-utilities/military-features-toolbox/scripts/CalculateSidcField.py deleted file mode 100644 index 4032ff4..0000000 --- a/data/mil2525d/utilities/military-features-utilities/military-features-toolbox/scripts/CalculateSidcField.py +++ /dev/null @@ -1,206 +0,0 @@ -#---------------------------------------------------------------------------------- -# Copyright 2015 Esri -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -#---------------------------------------------------------------------------------- -# CalculateSidcField.py -# Description: Calculates SIDC Field from attributes -# Requirements: ArcGIS Desktop -#---------------------------------------------------------------------------------- - -import arcpy -import os -import traceback -import uuid - -def symbolIdCodeAttributesToCode(attributes) : - - # Digits (1 & 2) (Version = "10" = 2525D.0) - symbolIdCode = '10' - - # Digit 3 (RealExerciseSimulation) - if 'context' in attributes : - symbolIdCode += attributes['context'] - else : - symbolIdCode += '0' - - # Digit 4 (Affiliation) - if 'identity' in attributes : - symbolIdCode += attributes['identity'] - else : - symbolIdCode += '0' - - # Digit 5-6 - if 'symbolset' in attributes : - symbolIdCode += attributes['symbolset'].zfill(2) - else : - symbolIdCode += '00' - - # Digit 7 (Status) - if 'operationalcondition' in attributes : - symbolIdCode += attributes['operationalcondition'] - else : - symbolIdCode += '0' - - # Digit 8 (HQ_TF_FD) - if 'indicator' in attributes : - symbolIdCode += attributes['indicator'] - else : - symbolIdCode += '0' - - # Digit 9-10 - # Tricky can come from 1 of 3 different attributes - if 'echelon' in attributes : - symbolIdCode += attributes['echelon'].zfill(2) - else : - if 'mobility' in attributes : - symbolIdCode += attributes['mobility'].zfill(2) - else : - if 'array' in attributes : - symbolIdCode += attributes['array'].zfill(2) - else : - symbolIdCode += '00' - - # Digit 11-16 - if 'entity' in attributes : - symbolIdCode += attributes['entity'].zfill(6) - else : - symbolIdCode += '000000' - - # Digit 17-18 - if 'modifier1' in attributes : - symbolIdCode += attributes['modifier1'].zfill(2) - else : - symbolIdCode += '00' - - # Digit 19-20 - if 'modifier2' in attributes : - symbolIdCode += attributes['modifier2'].zfill(2) - else : - symbolIdCode += '00' - - # Final Check: - symbolIdCodeLength = len(symbolIdCode) - if symbolIdCodeLength != 20 : - arcpy.AddWarning("Unexpected Length: Symbol ID Code: " + \ - symbolIdCode + ", Length: " + str(symbolIdCodeLength)) - - return symbolIdCode - -### calculateSidcField - Calculates a Symbol ID Code field for a Military Feature Class -### -### Params: -### 0 - input_feature_class (FeatureClass) - input Military Feature Class -### 1 - sidc_field (String) - field to store SIDC value -### -def calculateSidcField() : - - try : - arcpy.AddMessage('Starting: CalculateSidcField') - - currentPath = os.path.dirname(__file__) - defaultDataPath = os.path.normpath(os.path.join(currentPath, r'Data/')) - - # 0 : Get input feature class - inputFC = arcpy.GetParameter(0) - if (inputFC == '') or (inputFC is None): - inputFC = os.path.normpath(os.path.join(defaultDataPath, r'MilitaryOverlay.gdb/MilitaryFeatures/Units')) - - try : - desc = arcpy.Describe(inputFC) - except : - desc = None - - if desc == None : - arcpy.AddError('Could not read Input Feature Class: ' + str(inputFC)) - return - - # 1: sidcField - sidcField = arcpy.GetParameterAsText(1) - - if (sidcField == '') or (sidcField is None): - sidcField = 'staffcomment' - - arcpy.AddMessage('Running with Parameters:') - arcpy.AddMessage('0 - Input Military Feature Class: ' + str(inputFC)) - arcpy.AddMessage('1 - SIDC Field: ' + sidcField) - - SYMBOL_ID_FIELD_LIST = ['context', 'identity', 'symbolset', 'entity', 'modifier1', 'modifier2', 'echelon', \ - 'mobility', 'array', 'indicator', 'operationalcondition' ] - - # Get a list of available feature class fields (we use this in a few places) - fieldNameList = [] - - for field in desc.Fields: - fieldNameList.append(field.name) - if field.name == sidcField : - if field.type != 'String' : - arcpy.AddError('SIDC Field: ' + sidcField + ' is not of type string/text, type: ' + field.type) - return - - if not (sidcField in fieldNameList) : - arcpy.AddError('Could not find field: ' + sidcField) - return - - # Open an update cursor (if possible) - try : - fieldNameListAsString = ','.join(fieldNameList) # Change into format expected by UpdateCursor - features = arcpy.gp.UpdateCursor(inputFC, '', None, fieldNameListAsString) - except Exception as err: - arcpy.AddError('Could not open Input Feature Class ' + str(inputFC)) - arcpy.AddError(traceback.format_exception_only(type(err), err)[0].rstrip()) - return - - featureCount = 0 - - for feature in features : - - featureCount += 1 - arcpy.AddMessage('Processing feature/message: ' + str(featureCount)) - - symbolIdCodeAttributes = {} - - # Get all field attributes - for field in fieldNameList: - try : - featureVal = feature.getValue(field) - except : - arcpy.AddWarning('Could not get feature value for field: ' + field) - featureVal = None - - if featureVal is not None: - - if field in SYMBOL_ID_FIELD_LIST : - fieldValAsString = str(feature.getValue(field)) - symbolIdCodeAttributes[field] = fieldValAsString - - symbolIdCode = symbolIdCodeAttributesToCode(symbolIdCodeAttributes) - - try : - feature.setValue(sidcField, symbolIdCode) - - features.updateRow(feature) - except : - arcpy.AddError('Could not update feature value for field: ' + sidcField) - - except Exception as err: - arcpy.AddError(traceback.format_exception_only(type(err), err)[0].rstrip()) - - finally : - if feature : - del feature - - if features : - del features - -if __name__ == '__main__': - calculateSidcField() \ No newline at end of file diff --git a/data/mil2525d/utilities/military-features-utilities/military-features-toolbox/scripts/WriteGeoMessageFileFromFeatureClass.py b/data/mil2525d/utilities/military-features-utilities/military-features-toolbox/scripts/WriteGeoMessageFileFromFeatureClass.py deleted file mode 100644 index e2017e7..0000000 --- a/data/mil2525d/utilities/military-features-utilities/military-features-toolbox/scripts/WriteGeoMessageFileFromFeatureClass.py +++ /dev/null @@ -1,357 +0,0 @@ -#---------------------------------------------------------------------------------- -# Copyright 2015 Esri -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -#---------------------------------------------------------------------------------- -# WriteGeoMessageFileFromFeatureClass.py -# Description: Converts Military Feature Class to XML file -# Requirements: ArcGIS Desktop -#---------------------------------------------------------------------------------- - -import arcpy -import os -import traceback -import uuid - -def parsePartToControlPoints(part): - controlPoints = '' - sep = '' - - try : - - for subpart in part: - try: - # assume it's a point - subpartStr = str(subpart.X) + ',' + str(subpart.Y) - controlPoints = controlPoints + sep + subpartStr - sep = ';' - except AttributeError: - # it's an array of parts, i.e. a part - controlPoints = controlPoints + sep + parsePartToControlPoints(subpart) - sep = ';' - - except : - print('Exception in parsePartToControlPoints') - - return controlPoints - -def parseGeometryToControlPoints(geom): - try: - # assume it's a point - return str(geom.X) + ',' + str(geom.Y) - except AttributeError: - # it's not a point - try: - controlPoints = '' - sep = '' - for i in range(geom.partCount): - part = geom.getPart(i) - # part is an array - for subpart in part: - controlPoints = controlPoints + sep + parsePartToControlPoints(part) - sep = ';' - return controlPoints - except AttributeError: - # it's a part - return parsePartToControlPoints(geom) - -def symbolIdCodeAttributesToCode(attributes) : - - # Digits (1 & 2) (Version = "10" = 2525D.0) - symbolIdCode = '10' - - # Digit 3 (RealExerciseSimulation) - if 'context' in attributes : - symbolIdCode += attributes['context'] - else : - symbolIdCode += '0' - - # Digit 4 (Affiliation) - if 'identity' in attributes : - symbolIdCode += attributes['identity'] - else : - symbolIdCode += '0' - - # Digit 5-6 - if 'symbolset' in attributes : - symbolIdCode += attributes['symbolset'].zfill(2) - else : - symbolIdCode += '00' - - # Digit 7 (Status) - if 'operationalcondition' in attributes : - symbolIdCode += attributes['operationalcondition'] - else : - symbolIdCode += '0' - - # Digit 8 (HQ_TF_FD) - if 'indicator' in attributes : - symbolIdCode += attributes['indicator'] - else : - symbolIdCode += '0' - - # Digit 9-10 - # Tricky can come from 1 of 3 different attributes - if 'echelon' in attributes : - symbolIdCode += attributes['echelon'].zfill(2) - else : - if 'mobility' in attributes : - symbolIdCode += attributes['mobility'].zfill(2) - else : - if 'array' in attributes : - symbolIdCode += attributes['array'].zfill(2) - else : - symbolIdCode += '00' - - # Digit 11-16 - if 'entity' in attributes : - symbolIdCode += attributes['entity'].zfill(6) - else : - symbolIdCode += '000000' - - # Digit 17-18 - if 'modifier1' in attributes : - symbolIdCode += attributes['modifier1'].zfill(2) - else : - symbolIdCode += '00' - - # Digit 19-20 - if 'modifier2' in attributes : - symbolIdCode += attributes['modifier2'].zfill(2) - else : - symbolIdCode += '00' - - # Final Check: - symbolIdCodeLength = len(symbolIdCode) - if symbolIdCodeLength != 20 : - arcpy.AddWarning("Unexpected Length: Symbol ID Code: " + \ - symbolIdCode + ", Length: " + str(symbolIdCodeLength)) - - return symbolIdCode - -### writeMessageFile - Converts a Feature Class to an XML file -### -### Params: -### 0 - input_feature_class (FeatureClass) -### 1 - output_message_file (File) - XML Files to export to -### 2 - message_type_field (String) -### 3 - use_domain_codes (Boolean) - Use Domain Codes (instead of Domain Descriptions) -### 4 - include_symbol_id_code (Boolean) - Include Symbol ID Code -### 5 - sort_fields (string) (ex: sort_fields='STATE_NAME A; POP2000 D') see: -### http://resources.arcgis.com/en/help/main/10.1/index.html#//018v00000050000000) -### -def writeMessageFile() : - - try : - arcpy.AddMessage('Starting: Write Message File') - - currentPath = os.path.dirname(__file__) - defaultDataPath = os.path.normpath(os.path.join(currentPath, r'Data/')) - - # 0 : Get input feature class - inputFC = arcpy.GetParameter(0) - if (inputFC == '') or (inputFC is None): - inputFC = os.path.normpath(os.path.join(defaultDataPath, r'MilitaryOverlay.gdb/MilitaryFeatures/Units')) - - try : - desc = arcpy.Describe(inputFC) - except : - desc = None - - if desc == None : - arcpy.AddError('Could not read Input Feature Class: ' + str(inputFC)) - return - - shapeType = desc.shapeType - - # 1: Get output filename - outputFile = arcpy.GetParameterAsText(1) - - if (outputFile == '') or (outputFile is None): - outputFile = os.path.normpath(os.path.join(defaultDataPath, r'UnitsMessages.xml')) - - # Open Output File for writing (if possible) - try : - messageFile=open(outputFile, 'w') - except : - arcpy.AddError('Could not open Output File for writing: ' + str(outputFile)) - return - - # 2: Message Type Field - messageTypeField = arcpy.GetParameterAsText(2) - - # 3: useDomainCodes (Boolean) - Use Domain Codes (instead of Domain Descriptions) - useDomainCodes = arcpy.GetParameterAsText(3) - - if (useDomainCodes == '') or (useDomainCodes is None): - useDomainCodes = False - - # 4: includeSymbolIdCode - Include Symbol Id Code (Boolean) - includeSymbolIdCode = arcpy.GetParameterAsText(4) - - if (includeSymbolIdCode == '') or (includeSymbolIdCode is None): - includeSymbolIdCode = False - - # 5: Sort Order - orderBy = arcpy.GetParameterAsText(5) - - arcpy.AddMessage('Running with Parameters:') - arcpy.AddMessage('0 - Input Military Feature Class: ' + str(inputFC)) - arcpy.AddMessage('1 - Output Message XML File: ' + str(outputFile)) - arcpy.AddMessage('2 - MessageTypeField: ' + messageTypeField) - arcpy.AddMessage('3 - UseDomainCodes: ' + str(useDomainCodes)) - arcpy.AddMessage('4 - IncludeSymbolIdCode: ' + str(includeSymbolIdCode)) - arcpy.AddMessage('5 - orderBy: ' + orderBy) - - # TODO add any other fields/attributes to exclude from XML export - FIELD_EXCLUDE_LIST = [desc.ShapeFieldName, desc.OIDFieldName, \ - 'SHAPE_Length', 'SHAPE_Area' ] - - SYMBOL_ID_FIELD_LIST = ['context', 'identity', 'symbolset', 'entity', 'modifier1', 'modifier2', 'echelon', \ - 'mobility', 'array', 'indicator', 'operationalcondition' ] - - # Get a list of available feature class fields (we use this in a few places) - # Also keep a dictionary of domains used - fieldNameList = [] - fieldNameToDomainName = {} - domainNameToDomainValues = {} - CODE_FIELD_NAME = "code" - DESCRIPTION_FIELD_NAME = "description" - - for field in desc.Fields: - fieldNameList.append(field.name) - - if useDomainCodes : - # don't do the rest if we are using the domain codes only (and not descriptions) - # so we don't need to query the GDB for these descriptions - continue - - # Generate domains descriptions (needed later to convert domain numbers/values to strings) - if (field.domain is not None and field.domain != ""): - fieldNameToDomainName[field.name] = field.domain - dataPath = desc.path - # Strip off any FeatureDatasets from the name (TODO: this only works with GDBs for now) - gdbPath = dataPath.split(".gdb")[0] - gdbPath += ".gdb" - arcpy.DomainToTable_management(gdbPath, field.domain, "in_memory/" + field.domain, CODE_FIELD_NAME, DESCRIPTION_FIELD_NAME) - - domainValueToDomainDescriptions = {} - - domainRows = arcpy.gp.SearchCursor("in_memory/" + field.domain) - for domainRow in domainRows: - code = str(domainRow.getValue(CODE_FIELD_NAME)) - description = domainRow.getValue(DESCRIPTION_FIELD_NAME) - domainValueToDomainDescriptions[code] = description - - domainNameToDomainValues[field.domain] = domainValueToDomainDescriptions - - wkid = desc.spatialReference.factoryCode - - # Open a search cursor (if possible) - try : - fieldNameListAsString = ','.join(fieldNameList) # Change into format expected by SearchCursor - features = arcpy.gp.SearchCursor(inputFC, '', None, fieldNameListAsString, orderBy) - except Exception as err: - arcpy.AddError('Could not open Input Feature Class ' + str(inputFC)) - arcpy.AddError(traceback.format_exception_only(type(err), err)[0].rstrip()) - return - - featureCount = 0 - - # In case version/format needed: - # messageFile.write('\n') - - messageFile.write('\n') - - for feature in features : - - featureCount += 1 - arcpy.AddMessage('Processing feature/message: ' + str(featureCount)) - - symbolIdCodeAttributes = {} - - # Get shape as string in message control point format x1, y1; x2, y2; - shape = feature.shape.getPart(0) - controlPointsString = parseGeometryToControlPoints(shape) - - uniqueId = '{%s}' % str(uuid.uuid4()) - messageType = 'position_report' - messageAction = 'update' - - # Try to get a message type from field if 1) the parameter is set and 2) the field exists - if not ((messageTypeField == '') or (messageTypeField is None)): - try : - messageType = feature.getValue(MilitaryUtilities.MessageTypeField) - except : - messageType = 'position_report' # or (pass) - - messageFile.write('\t\n') - messageFile.write('\t\t<_id>%s\n' % uniqueId) - messageFile.write('\t\t<_type>%s\n' % messageType) - messageFile.write('\t\t<_wkid>%i\n' % wkid) - messageFile.write('\t\t<_action>%s\n' % messageAction) - messageFile.write('\t\t<_control_points>%s\n' % controlPointsString) - - # Write out all fields as Tag attributes - for field in fieldNameList: - try : - # Don't inlcude any on the "Exclude" list (shape, OID, etc.) - if field in FIELD_EXCLUDE_LIST : - featureVal = None - else : - featureVal = feature.getValue(field) - except : - arcpy.AddWarning('Could not get feature value for field: ' + field) - featureVal = None - - if featureVal is not None: - - fieldValAsString = str(feature.getValue(field)) - - if field in SYMBOL_ID_FIELD_LIST : - symbolIdCodeAttributes[field] = fieldValAsString - - # if we want to expand the domain code into a description... - if not useDomainCodes : - # convert code to description if its a field with a domain - if field in fieldNameToDomainName: - domain = fieldNameToDomainName[field] - if domain in domainNameToDomainValues : - domainValues = domainNameToDomainValues[domain] - description = domainValues[fieldValAsString] - fieldValAsString = description # now replace code with description - - messageFile.write('\t\t<'+field+'>' + fieldValAsString + '\n') - - if includeSymbolIdCode : - if "sidc" in fieldNameList : - pass # it has already been included, don't need to calculate - else : - symbolIdCode = symbolIdCodeAttributesToCode(symbolIdCodeAttributes) - messageFile.write('\t\t%s\n' % symbolIdCode) - - messageFile.write('\t\n') - - messageFile.write('') - - except Exception as err: - arcpy.AddError(traceback.format_exception_only(type(err), err)[0].rstrip()) - - finally : - if feature : - del feature - - if features : - del features - -if __name__ == '__main__': - writeMessageFile() \ No newline at end of file