Created
July 11, 2017 23:28
-
-
Save stdavis/54fc408c1ce43093e5b7a073b178bfe6 to your computer and use it in GitHub Desktop.
Broadband Single Providers
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import arcpy | |
| from os.path import join | |
| base_folder = r'\\Mac\Documents\Projects\working\SingleProviderBroadbandAreas' | |
| fiber = join(base_folder, 'fiber.gdb') | |
| broadband = join(base_folder, 'broadband.gdb') | |
| output = join(base_folder, 'output.gdb') | |
| fiber_providers = join(fiber, 'Providers') | |
| bb_providers = join(broadband, 'BB_Providers_Table') | |
| hexagons = join(fiber, 'Hexagons_project') | |
| bb_service = join(broadband, 'BB_Service') | |
| all_providers = join(output, 'AllProviders') | |
| single_providers = join(output, 'SingleProviders') | |
| fldCode = 'Code' | |
| fldHexID = 'HexID' | |
| fldProvName = 'ProvName' | |
| fldUTProvCode = 'UTProvCode' | |
| fldNAME = 'NAME' | |
| ProviderServiceAreas = 'ProviderServiceAreas' | |
| def generate_master_dataset(): | |
| print('generating master dataset of all providers...') | |
| arcpy.management.TruncateTable(all_providers) | |
| providers_list = set() | |
| for table in [fiber_providers, bb_providers]: | |
| with arcpy.da.SearchCursor(table, [fldCode]) as cursor: | |
| for provider_code, in cursor: | |
| providers_list.add(provider_code) | |
| print('found {} unique providers'.format(len(providers_list))) | |
| providers_data = {} | |
| for provider_code in sorted(providers_list): | |
| print(provider_code) | |
| hex_query = '{0} IN (SELECT {0} FROM ProviderServiceAreas WHERE {1} = \'{2}\' AND ServiceClass = 1)'.format(fldHexID, fldProvName, provider_code) | |
| res_query = '{} = \'{}\' AND MAXADDOWN >= 25 AND TransTech <> 80'.format(fldUTProvCode, provider_code) | |
| for service_layer, query in [(hexagons, hex_query), (bb_service, res_query)]: | |
| layer = arcpy.management.MakeFeatureLayer(service_layer, 'service_layer', query) | |
| dissolved = arcpy.management.Dissolve(layer, 'in_memory/dissolved') | |
| with arcpy.da.SearchCursor(dissolved, ['Shape@']) as scursor: | |
| for shape, in scursor: | |
| if provider_code in providers_data: | |
| providers_data[provider_code] = providers_data[provider_code].union(shape) | |
| else: | |
| providers_data[provider_code] = shape | |
| #: clean up | |
| for delete_data in [layer, dissolved]: | |
| arcpy.management.Delete(delete_data) | |
| with arcpy.da.InsertCursor(all_providers, [fldNAME, 'Shape@']) as icursor: | |
| for provider in providers_data: | |
| icursor.insertRow((provider, providers_data[provider])) | |
| def generate_single_providers(): | |
| print('generating single providers') | |
| arcpy.management.TruncateTable(single_providers) | |
| arcpy.management.Append(all_providers, single_providers) | |
| with arcpy.da.UpdateCursor(single_providers, [fldNAME, 'Shape@']) as ucursor: | |
| for provider, shape in ucursor: | |
| print(provider) | |
| with arcpy.da.SearchCursor(all_providers, ['Shape@', fldNAME], '{} <> \'{}\''.format(fldNAME, provider)) as cursor: | |
| for cut_polygon, name in cursor: | |
| shape = shape.difference(cut_polygon) | |
| ucursor.updateRow((provider, shape)) | |
| generate_master_dataset() | |
| generate_single_providers() | |
| print('done') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment