def zone_to_feature(zone, keys): '''Serialize a zone into a GeoJSON feature''' properties = { 'level': zone['level'], 'code': zone['code'], 'name': unicodify(zone['name']), 'wikipedia': unicodify(zone.get('wikipedia', '')) or None, 'dbpedia': unicodify(zone.get('dbpedia', '')) or None, 'population': int(zone.get('population', 0)), 'area': int(zone.get('area', 0)), 'flag': unicodify(zone.get('flag', '')) or None, 'blazon': unicodify(zone.get('blazon', '')) or None, 'keys': zone.get('keys', {}), 'parents': zone.get('parents', []) } if keys is not None: for unwanted_key in set(properties.keys()) - set(keys): del properties[unwanted_key] feature = { 'id': zone['_id'], 'type': 'Feature', 'geometry': zone['geom'], 'properties': properties } if keys is not None and 'geometry' not in keys: del feature['geometry'] return feature
def extract_french_arrondissements(polygon): ''' Extract a french arrondissements informations from a MultiPolygon. Based on data from http://www.data.gouv.fr/datasets/decoupage-administratif-communal-francais-issu-d-openstreetmap/ ''' props = polygon['properties'] code = props['insee'].lower() return { 'code': code, 'name': unicodify(props['nom']), 'wikipedia': unicodify(props['wikipedia']), 'area': int(props['surf_ha']), 'parents': ['country/fr', 'country-group/ue', 'country-group/world'], 'keys': { 'insee': code, } }
def extract_french_county(polygon): ''' Extract a french county informations from a MultiPolygon. Based on data from http://www.data.gouv.fr/datasets/contours-des-departements-francais-issus-d-openstreetmap/ ''' props = polygon['properties'] name = props['nom'] code = props['code_insee'].lower() return { 'code': code, 'name': unicodify(name), 'wikipedia': unicodify(props['wikipedia']), 'parents': ['country/fr', 'country-group/ue', 'country-group/world'], 'keys': { 'insee': code, 'nuts3': props['nuts3'], } }
def extract_french_region(polygon): ''' Extract a french region informations from a MultiPolygon. Based on data from http://www.data.gouv.fr/datasets/contours-des-regions-francaises-sur-openstreetmap/ ''' props = polygon['properties'] code = props['code_insee'].lower() return { 'code': code, 'name': unicodify(props['nom']), 'area': props['surf_km2'], 'wikipedia': unicodify(props['wikipedia']), 'parents': ['country/fr', 'country-group/ue', 'country-group/world'], 'keys': { 'insee': code, 'nuts2': props['nuts2'], 'iso3166_2': props['iso3166_2'], } }
def extract_french_epci(polygon): ''' Extract a french EPCI informations from a MultiPolygon. Based on data from http://www.data.gouv.fr/datasets/contours-des-epci-2014/ ''' props = polygon['properties'] siren = props['siren_epci'].lower() return { 'code': siren, 'name': unicodify(props.get('nom_osm') or props['nom_epci']), 'population': props['ptot_epci'], 'area': props['surf_km2'], 'wikipedia': unicodify(props['wikipedia']), 'parents': ['country/fr', 'country-group/ue', 'country-group/world'], 'keys': { 'siren': siren, 'osm': props['osm_id'], 'type_epci': props['type_epci'] } }
def extract_french_canton(polygon): ''' Extract a french canton informations from a MultiPolygon. Based on data from http://www.data.gouv.fr/fr/datasets/contours-osm-des-cantons-electoraux-departementaux-2015/ ''' props = polygon['properties'] code = props['ref'].lower() county_code = props['dep'].lower() county_id = 'fr/county/{0}'.format(county_code) return { 'code': code, 'name': unicodify(props['nom']), 'population': props['population'], 'wikipedia': unicodify(props['wikipedia']), 'parents': ['country/fr', 'country-group/ue', 'country-group/world', county_id], 'keys': { 'ref': code, 'jorf': props['jorf'] } }
def zone_to_feature(zone): '''Serialize a zone into a GeoJSON feature''' return { 'id': zone['_id'], 'type': 'Feature', 'geometry': zone['geom'], 'properties': { 'level': zone['level'], 'code': zone['code'], 'name': unicodify(zone['name']), 'wikipedia': unicodify(zone.get('wikipedia', '')) or None, 'dbpedia': unicodify(zone.get('dbpedia', '')) or None, 'population': zone.get('population', None), 'area': zone.get('area', None), 'flag': unicodify(zone.get('flag', '')) or None, 'blazon': unicodify(zone.get('blazon', '')) or None, 'keys': zone.get('keys', {}), 'parents': zone.get('parents', []) } }
def extract_iris(polygon): ''' Extract French IrisBased on data from http://professionnels.ign.fr/contoursiris ''' props = polygon['properties'] code = props['DCOMIRIS'] town_code = props['DEPCOM'].lower() town_id = 'fr/town/{0}'.format(town_code) name = unicodify(props['NOM_IRIS']).title() return { 'code': code, 'name': name, 'parents': ['country/fr', 'country-group/ue', 'country-group/world', town_id], '_type': props['TYP_IRIS'], 'keys': { 'iris': code }, }
def extract_overseas_county(polygon): ''' Extract overseas county from their WorldBorder country. Based on data from http://thematicmapping.org/downloads/world_borders.php ''' props = polygon['properties'] iso = props['ISO2'].lower() if iso in OVERSEAS: code, name = OVERSEAS[iso] return { 'code': code, 'name': unicodify(name), 'population': props['POP2005'], 'area': int(props['AREA']), 'parents': ['country/fr', 'country-group/ue', 'country-group/world'], 'keys': { 'insee': code, 'iso2': iso, 'iso3': props['ISO3'].lower(), 'un': props['UN'], } }