def process_kml(kml): the_map = kml.features().next() print "Map: %s" % (the_map.name) layers = the_map.features() segment_records = { 'name': [], 'description': [], 'polyline': [], 'district': [], 'difficulty': [], 'difficulty_code': [] } for layer in layers: print("Layer: %s" % (layer.name)) try: segments = layer.features() except: continue for segment in segments: print "Segment: %s" % (segment.name) try: polyline = [(g.y, g.x) for g in segment.geometry.geoms] segment_records['name'].append(segment.name) segment_records['description'].append(segment.description) segment_records['polyline'].append(polyline) segment_records['district'].append(layer.name) segment_records['difficulty'].append(UNCLASSIFIED) segment_records['difficulty_code'].append('u') # if 'Multi use Trail' == segment.description or \ # 'Enhanced Street' == segment.description: # segment_records['difficulty'].append(ALL_ABILITIES) # segment_records['difficulty_code'].append('e') # elif 'In street major separation' == segment.description: # segment_records['difficulty'].append(INTERMEDIATE) # segment_records['difficulty_code'].append('i') # elif 'Sharrows' == segment.description or \ # 'In street minor separation': # segment_records['difficulty'].append(DIFFICULT) # segment_records['difficulty_code'].append('d') # else: # segment_records['difficulty'].append(UNCLASSIFIED) # segment_records['difficulty_code'].append('u') except: print "no geometry" segment_df = pd.DataFrame(segment_records) return segment_df
def process_kml(kml): the_map = kml.features().next() print "Map: %s" % (the_map.name) layers = the_map.features() segment_records = { 'name' : [], 'description' : [], 'polyline': [], 'district' : [], 'difficulty' : [], 'difficulty_code' : [] } for layer in layers: print("Layer: %s" % (layer.name)) try: segments = layer.features() except: continue for segment in segments: print "Segment: %s" % (segment.name) try: polyline = [(g.y, g.x) for g in segment.geometry.geoms] segment_records['name'].append(segment.name) segment_records['description'].append(segment.description) segment_records['polyline'].append(polyline) segment_records['district'].append(layer.name) segment_records['difficulty'].append(UNCLASSIFIED) segment_records['difficulty_code'].append('u') # if 'Multi use Trail' == segment.description or \ # 'Enhanced Street' == segment.description: # segment_records['difficulty'].append(ALL_ABILITIES) # segment_records['difficulty_code'].append('e') # elif 'In street major separation' == segment.description: # segment_records['difficulty'].append(INTERMEDIATE) # segment_records['difficulty_code'].append('i') # elif 'Sharrows' == segment.description or \ # 'In street minor separation': # segment_records['difficulty'].append(DIFFICULT) # segment_records['difficulty_code'].append('d') # else: # segment_records['difficulty'].append(UNCLASSIFIED) # segment_records['difficulty_code'].append('u') except: print "no geometry" segment_df = pd.DataFrame(segment_records) return segment_df
if re.search(' fm ', operator, re.I): return 'broadcast' return None k = kml.KML() with open(sys.argv[1], 'rb') as f: k.from_string(f.read()) kml = list(k.features())[0] with engine.begin(): for stmt in CREATE: conn.execute(text(stmt)) for folder in kml.features(): res = conn.execute(text('''INSERT INTO microwave_operator(name, type) VALUES (:name, :type) RETURNING id'''), name=folder.name, type=categorise(folder.name)) operator = res.fetchone()[0] for feat in folder.features(): conn.execute(text( '''INSERT INTO microwave_link (ref, operator, geometry) VALUES (:ref, :operator, ST_Transform(ST_SetSRID(ST_GeomFromText(:geometry), 4326), 3857) ) '''), ref=feat.name, operator=operator, geometry=feat.geometry.wkt)
print '\tAdjusting lat/lon by ' + str(camp['latitude'] - lat) + ' / ' + str(camp['longitude'] - lon) camp['latitude'] = lat camp['longitude'] = lon # Loose string match score above this value results in auto-match AUTO_MATCH_THRESHOLD = .9 # Loose string match score above this value results in human prompt POSSIBLE_MATCH_THRESHOLD = .5 readFile = open('camps_geocoded.json') camps = json.load(readFile) readFile = open('burnermaps_camps_8_11_14.kml') kml = kml.KML() kml.from_string(readFile.read()) kml_features = list(kml.features()) # Load Unofficial Burning Man Map KML into dictionary # of name.lower() -> coordinates camp_to_loc = {} for feature in kml_features: for folder in list(feature.features()): if folder.name == 'Theme Camps': #print str(len(list(folder.features()))) + ' camps' for camp in list(folder.features()): camp_to_loc[camp.name.strip().lower()] = (camp.geometry.y, camp.geometry.x) #print camp.name.strip() + ' ' + str(camp.geometry.y) + ', ' + str(camp.geometry.x) # A map of official camp name -> unofficial name # populated by fuzzy string matching. If the match is exact