awips2/deltaScripts/16.2.2/DR5348/replaceCountyNamesLpi.py

81 lines
3.2 KiB
Python
Raw Normal View History

2022-05-05 12:34:50 -05:00
#!/usr/bin/env python
# DR 5348 - This script will replace references to us_county.lpi in a bundle or procedure with
# references to the new county_names view in the maps database
import sys
import xml.etree.ElementTree as ET
xsitype = '{http://www.w3.org/2001/XMLSchema-instance}type'
def upgradeBundle(inputFile, outputFile):
tree = ET.parse(inputFile)
root = tree.getroot()
iterpath = 'bundles/bundle/displayList/displays/descriptor/resource'
if root.tag == 'bundle':
iterpath = 'displayList/displays/descriptor/resource'
if checkResources(root, iterpath):
with open(outputFile, 'w') as out:
tree.write(out, encoding='UTF-8', xml_declaration=True)
def checkResources(element, iterPath):
updated = False
for resource in element.iterfind(iterPath):
resourceData = resource.find('resourceData')
type = resourceData.get(xsitype)
if type == 'mapResourceGroupData':
updated |= checkResources(resourceData, 'resource')
elif type == 'lpiResourceData':
filename = resourceData.find('filename')
if filename.text == 'us_county.lpi':
convertResource(resource)
updated |= True
return updated
def convertResource(resource):
# convert resourceData to dpPointMapResourceData
resourceData = resource.find('resourceData')
resourceData.set(xsitype,'dbPointMapResourceData')
resourceData.remove(resourceData.find('filename'))
table = ET.SubElement(resourceData, 'table')
table.text = 'mapdata.county_names'
# remove the outlineCapability, densityCapability, and labelableCapability
loadProperties = resource.find('loadProperties')
capabilities = loadProperties.find('capabilities')
for capability in capabilities.findall('capability'):
if capability.get(xsitype) in ['outlineCapability', 'densityCapability', 'labelableCapability']:
capabilities.remove(capability)
# set density to max so all county names are displayed
densityCapability = ET.SubElement(capabilities, 'capability')
densityCapability.set(xsitype, 'densityCapability')
densityCapability.set('density', '9999')
labelableCapability = ET.SubElement(capabilities, 'capability')
labelableCapability.set(xsitype, 'labelableCapability')
labelableCapability.set('labelField', 'name')
# set pdProps to only display county names when counties are displayed in States/County Boundaries
properties = resource.find('properties')
if properties == None:
properties = ET.SubElement(resource, 'properties')
properties.set('isSystemResource', 'false')
properties.set('isBlinking', 'false')
properties.set('isMapLayer', 'true')
properties.set('isHoverOn', 'false')
properties.set('isVisible', 'true')
pdProps = properties.find('pdProps')
if pdProps == None:
pdProps = ET.SubElement(properties, 'pdProps')
pdProps.set('minDisplayWidth', '0')
pdProps.set('maxDisplayWidth', '750000')
if __name__ == '__main__':
if len(sys.argv) < 3:
print "Usage:\n", sys.argv[0], "inputFile outputFile"
sys.exit(1)
upgradeBundle(sys.argv[1], sys.argv[2])