Example #1
0
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
Example #2
0
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,
        }
    }
Example #3
0
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'],
        }
    }
Example #4
0
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'],
        }
    }
Example #5
0
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']
        }
    }
Example #6
0
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']
        }
    }
Example #7
0
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', [])
        }
    }
Example #8
0
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
        },

    }
Example #9
0
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'],
            }
        }