def register_boundary(layer_name,
                      nice_name,
                      tiger_name,
                      name_func,
                      id_func,
                      year=2014):
    update_dates = {
        2012: date(2012, 8, 17),
        2014: date(2012, 8, 19),
    }
    boundaries.register(
        '%d-%s' % (year, layer_name),
        name='United States - %s (%d)' % (nice_name, year),
        singular='United States - %s (%d)' % (nice_name, year),
        domain='United States',
        last_updated=update_dates[year],
        name_func=name_func,
        id_func=id_func,
        slug_func=id_func,
        label_point_func=get_innerpt,
        authority='United States Census',
        source_url='http://www.census.gov/geo/maps-data/data/tiger-line.html',
        #licence_url='',
        data_url='http://www2.census.gov/geo/tiger/TIGER%d/%s/tl_%d_us_%s.zip'
        % (year, tiger_name.upper(), year, tiger_name.lower()),
        #notes='',
        encoding='iso-8859-1',
    )
Example #2
0
def load_zcta_boundaries():

    # clear registry
    boundaries.registry = {}

    dl_path = _dl_path()
    today = datetime.date.today()

    for state in us.STATES:

        print state.name

        url = state.shapefile_urls('zcta')
        filename = url.split('/')[-1]
        (name, ext) = filename.rsplit('.', 1)

        extract_path = os.path.join(dl_path, name)
        if not os.path.exists(extract_path):

            os.mkdir(extract_path)

            zip_path = os.path.join(dl_path, filename)
            if not os.path.exists(zip_path):
                resp = requests.get(url)
                with open(zip_path, 'w') as outfile:
                    outfile.write(resp.content)

            with zipfile.ZipFile(zip_path, 'r') as archive:
                archive.extractall(extract_path)

            os.unlink(zip_path)

        boundaries.register(
            '%s-zcta' % state.name.lower().replace(' ', ''),
            singular='census-zcta',
            domain='US',
            file=extract_path,
            last_updated=today,
            name_func=name_func(state.name, 'ZCTA5CE10'),
            id_func=boundaries.attr('ZCTA5CE10'),
            slug_func=slug_func('ZCTA5CE10'),
            label_point_func=label_point_func,
            authority='United States Census Bureau',
            source_url='http://www.census.gov/cgi-bin/geo/shapefiles2010/main',
            data_url=url,
        )

    from django.core import management
    management.call_command('loadshapefiles')
Example #3
0
def load_zcta_boundaries():

    # clear registry
    boundaries.registry = {}

    dl_path = _dl_path()
    today = datetime.date.today()

    for state in us.STATES:

        print state.name

        url = state.shapefile_urls('zcta')
        filename = url.split('/')[-1]
        (name, ext) = filename.rsplit('.', 1)

        extract_path = os.path.join(dl_path, name)
        if not os.path.exists(extract_path):

            os.mkdir(extract_path)

            zip_path = os.path.join(dl_path, filename)
            if not os.path.exists(zip_path):
                resp = requests.get(url)
                with open(zip_path, 'w') as outfile:
                    outfile.write(resp.content)

            with zipfile.ZipFile(zip_path, 'r') as archive:
                archive.extractall(extract_path)

            os.unlink(zip_path)

        boundaries.register('%s-zcta' % state.name.lower().replace(' ', ''),
            singular='census-zcta',
            domain='US',
            file=extract_path,
            last_updated=today,
            name_func=name_func(state.name, 'ZCTA5CE10'),
            id_func=boundaries.attr('ZCTA5CE10'),
            slug_func=slug_func('ZCTA5CE10'),
            label_point_func=label_point_func,
            authority='United States Census Bureau',
            source_url='http://www.census.gov/cgi-bin/geo/shapefiles2010/main',
            data_url=url,
        )

    from django.core import management
    management.call_command('loadshapefiles')
def define(division_id):
  ocdid_to_sgc_code_map = {v: k for k, v in sgc_code_to_ocdid().items()}

  slug, config = get_definition(division_id)
  if isinstance(slug, re._pattern_type):
    slug = re.sub('\\\[AZ]', '', slug.pattern)

  config['slug'] = slug
  config['last_updated'] = datetime.now().strftime('%Y, %-m, %-d')
  config['authority'] = config['authority'][-1]

  ocd_type, ocd_type_id = division_id.split('/')[-1].split(':')
  if ocd_type == 'country' and ocd_type_id == 'ca':
    config['geographic_code'] = '01'
  elif ocd_type in ('province', 'territory', 'cd', 'csd'):
    config['geographic_code'] = ocdid_to_sgc_code_map[division_id]
  else:
    raise Exception('%s: Unrecognized OCD type %s' % (division_id, ocd_type))

  print("""from datetime import date

import boundaries

boundaries.register(u'%(slug)s',
    domain=u'%(domain)s',
    last_updated=date(%(last_updated)s),
    name_func=boundaries.attr(''),
    id_func=boundaries.attr(''),
    authority=u'%(authority)s',
    encoding='iso-8859-1',
    metadata={'geographic_code': '%(geographic_code)s'},
)""" % config)
Example #5
0
def define(division_id):
    """
    Print the contents of a definition file.
    """
    slug, config = get_definition(division_id)
    if isinstance(slug, re._pattern_type):
        slug = re.sub(r'\\[AZ]', '', slug.pattern)

    config['slug'] = slug
    config['last_updated'] = datetime.now().strftime('%Y, %-m, %-d')
    config['authority'] = config['authority'][-1]
    config['division_id'] = division_id

    print("""from datetime import date

import boundaries

boundaries.register('%(slug)s',
    domain='%(domain)s',
    last_updated=date(%(last_updated)s),
    name_func=boundaries.attr(''),
    id_func=boundaries.attr(''),
    authority='%(authority)s',
    encoding='iso-8859-1',
    extra={'division_id': '%(division_id)s'},
)""" % config)
Example #6
0
def define(division_id):
    """
    Print the contents of a definition file.
    """
    slug, config = get_definition(division_id)
    if isinstance(slug, re._pattern_type):
        slug = re.sub(r'\\[AZ]', '', slug.pattern)

    config['slug'] = slug
    config['last_updated'] = datetime.now().strftime('%Y, %-m, %-d')
    config['authority'] = config['authority'][-1]
    config['division_id'] = division_id

    print("""from datetime import date

import boundaries

boundaries.register('%(slug)s',
    domain='%(domain)s',
    last_updated=date(%(last_updated)s),
    name_func=boundaries.attr(''),
    id_func=boundaries.attr(''),
    authority='%(authority)s',
    encoding='iso-8859-1',
    extra={'division_id': '%(division_id)s'},
)""" % config)
def define(division_id):
    ocdid_to_sgc_code_map = {v: k for k, v in sgc_code_to_ocdid().items()}

    slug, config = get_definition(division_id)
    if isinstance(slug, re._pattern_type):
        slug = re.sub('\\\[AZ]', '', slug.pattern)

    config['slug'] = slug
    config['last_updated'] = datetime.now().strftime('%Y, %-m, %-d')
    config['authority'] = config['authority'][-1]

    ocd_type, ocd_type_id = division_id.split('/')[-1].split(':')
    if ocd_type == 'country' and ocd_type_id == 'ca':
        config['geographic_code'] = '01'
    elif ocd_type in ('province', 'territory', 'cd', 'csd'):
        config['geographic_code'] = ocdid_to_sgc_code_map[division_id]
    else:
        raise Exception('%s: Unrecognized OCD type %s' %
                        (division_id, ocd_type))

    print("""from __future__ import unicode_literals

from datetime import date

import boundaries

boundaries.register('%(slug)s',
        domain='%(domain)s',
        last_updated=date(%(last_updated)s),
        name_func=boundaries.attr(''),
        id_func=boundaries.attr(''),
        authority='%(authority)s',
        encoding='iso-8859-1',
        metadata={'geographic_code': '%(geographic_code)s'},
)""" % config)
def register_boundary(layer_name, nice_name, tiger_name, name_func, id_func):
	boundaries.register('2012-%s' % layer_name,
		name='United States - %s (2012)' % nice_name,
		singular='United States - %s (2012)' % nice_name,
		domain='United States',
		last_updated=date(2012, 8, 17),
		name_func=name_func,
		id_func=id_func,
		slug_func=id_func,
		label_point_func=get_innerpt,
		authority='United States Census',
		source_url='http://www.census.gov/geo/maps-data/data/tiger-line.html',
		#licence_url='',
		data_url='http://www2.census.gov/geo/tiger/TIGER2012/%s/tl_2012_us_%s.zip' % (tiger_name.upper(), tiger_name.lower()),
		#notes='',
		encoding='iso-8859-1',
	)
Example #9
0
def register_boundary(layer_name, nice_name, tiger_name, name_func, id_func):
    boundaries.register(
        '2012-%s' % layer_name,
        name='United States - %s (2012)' % nice_name,
        singular='United States - %s (2012)' % nice_name,
        domain='United States',
        last_updated=date(2012, 8, 17),
        name_func=name_func,
        id_func=id_func,
        slug_func=id_func,
        label_point_func=get_innerpt,
        authority='United States Census',
        source_url='http://www.census.gov/geo/maps-data/data/tiger-line.html',
        #licence_url='',
        data_url=
        'http://www2.census.gov/geo/tiger/TIGER2012/%s/tl_2012_us_%s.zip' %
        (tiger_name.upper(), tiger_name.lower()),
        #notes='',
        encoding='iso-8859-1',
    )
from datetime import date

import boundaries

boundaries.register('Cambridge wards',
    domain='Cambridge, ON',
    last_updated=date(2013, 2, 20),
    name_func=boundaries.attr('WardName'),
    id_func=boundaries.attr('WardNumber'),
    authority='Regional Municipality of Waterloo',
    source_url='http://www.regionofwaterloo.ca/en/regionalGovernment/WardBoundaries.asp',
    licence_url='http://www.regionofwaterloo.ca/en/regionalGovernment/OpenDataLicence.asp',
    data_url='http://www.regionofwaterloo.ca/opendatadownloads/WardBoundaries.zip',
    encoding='iso-8859-1',
    metadata={'geographic_code': '3530010'},
    ogr2ogr='''-where "Municipali='Cambridge'"''',
)
from datetime import date

import boundaries

boundaries.register('Oakville wards',
    domain='Oakville, ON',
    last_updated=date(2018, 6, 11),
    name_func=lambda f: 'Ward %s' % f.get('Ward'),
    id_func=boundaries.attr('Ward'),
    authority='Town of Oakville',
    source_url='https://portal-exploreoakville.opendata.arcgis.com/datasets/toak::2018-ward-boundaries',
    licence_url='https://www.oakville.ca/data/open_data_licence.html',
    data_url='https://opendata.arcgis.com/datasets/36137fb86deb4431b53450cf16370a3b_0.zip',
    encoding='iso-8859-1',
    extra={'division_id': 'ocd-division/country:ca/csd:3524001'},
)
from datetime import date

import boundaries

boundaries.register("St. John's wards",
    domain="St. John's, NL",
    last_updated=date(2012, 8, 17),
    name_func=boundaries.attr('WARDNAME'),
    id_func=boundaries.attr('WARD'),
    authority="City of St. John's",
    encoding='iso-8859-1',
    extra={'division_id': 'ocd-division/country:ca/csd:1001519'},
    is_valid_func=lambda f: int(f.get('WARD')) != 0,
)
from datetime import date

import boundaries

boundaries.register('Pennsylvania Places',
    domain='Pennsylvania',
    last_updated=date(2012, 11, 29),
    name_func=boundaries.attr('NAME'),
    id_func=boundaries.attr('GEOID'),
    slug_func=boundaries.attr('GEOID'),
    authority='United States Census Bureau',
    source_url='http://www.census.gov/cgi-bin/geo/shapefiles2012/main',
    data_url='http://www2.census.gov/geo/tiger/TIGER2012/PLACE/tl_2012_42_place.zip',
)
Example #14
0
import boundaries

def ocd_id_func(feature):
    division = 'ocd-division/country:us/state:mn/place:st_paul'
    ward_number = feature.get('WARD').split('-')[1]
    return '{0}/ward:{1}'.format(division,
                                 ward_number)

def ward_namer(feature):
    ward_number = feature.get('WARD').split('-')[1]
    return 'st-paul-ward-{0}'.format(ward_number)

boundaries.register('st-paul-wards',  
    file='',
    last_updated=date(2015, 9, 15),
    name='Saint Paul Wards',
    singular='Saint Paul Ward',
    domain='Saint Paul',
    authority='City of Saint Paul',
    source_url='https://github.com/datamade/open-divisions/raw/master/ocd-division/country:us/state:mn/place:st_paul/wards/St_Paul_wards.zip',
    licence_url='',
    start_date=date(2015,5,1),
    end_date=None,
    notes='',
    name_func=ward_namer,
    id_func=ocd_id_func,
    is_valid_func=lambda feature: True,
    label_point_func=lambda feature: None,
)

Example #15
0
 def test_register(self):
     boundaries.registry = {}
     boundaries._basepath = '.'
     boundaries.register('foo', file='bar', last_updated=date(2000, 1, 1))
     self.assertEqual(boundaries.registry, {'foo': {'file': './bar', 'last_updated': date(2000, 1, 1)}})
from __future__ import unicode_literals

from datetime import date

import boundaries

boundaries.register(
    'London wards',
    domain='London, ON',
    last_updated=date(2016, 1, 4),
    name_func=lambda f: 'Ward %s' % f.get('WARDS'),
    id_func=boundaries.attr('WARDS'),
    authority='City of London',
    source_url=
    'http://www.london.ca/city-hall/open-data/Pages/Open-Data-Data-Catalogue.aspx',
    licence_url=
    'http://www.london.ca/city-hall/open-data/Pages/OpenData-TermsofUse.aspx',
    data_url=
    'http://apps.london.ca/OpenData/ShapeFiles_Zipped/2010_electoral_wards.zip',
    encoding='iso-8859-1',
    extra={'division_id': 'ocd-division/country:ca/csd:3539036'},
    prj='http://spatialreference.org/ref/epsg/26917/prj/',
)
from datetime import date

import boundaries

boundaries.register('Halifax districts',
    domain='Halifax, NS',
    last_updated=date(2014, 2, 28),
    name_func=boundaries.attr('DISTNAME'),
    id_func=boundaries.attr('DIST_ID'),
    authority='Halifax Regional Municipality',
    source_url='https://www.halifaxopendata.ca/Zoning/Polling-District/e7u6-by35',
    data_url='https://www.halifaxopendata.ca/api/geospatial/e7u6-by35?method=export&format=Shapefile',
    licence_url='https://www.halifaxopendata.ca/terms',
    encoding='iso-8859-1',
    metadata={'geographic_code': '1209034'},
)
from __future__ import unicode_literals

import re
from datetime import date

import boundaries

boundaries.register(
    'Charlottetown wards',
    domain='Charlottetown, PE',
    last_updated=date(2013, 7, 19),
    name_func=boundaries.attr('NAME'),
    id_func=lambda f: re.sub(r'\D', '', f.get('KEY')),
    authority='Elections Prince Edward Island',
    source_url='http://www.electionspei.ca/municipalities/charlottetown',
    data_url=
    'http://www.electionspei.ca/municipal/details/gis/shp/charlottetown_wards.zip',
    licence_url='http://www.electionspei.ca/apilicense',
    encoding='iso-8859-1',
    extra={'division_id': 'ocd-division/country:ca/csd:1102075'},
)
from datetime import date

import boundaries

boundaries.register(
    'Polygons',
    last_updated=date(2000, 1, 1),
    name_func=boundaries.attr('str'),
)
Example #20
0
# encoding: utf-8
from datetime import date

import boundaries

boundaries.register(u'San José Council Districts',
    domain=u'San José, CA',
    last_updated=date(2012, 12, 4),
    name_func=lambda f: 'District %s' % f.get('DISTRICTS'),
    id_func=boundaries.attr('DISTRICTS'),
    authority=u'City of San José',
    source_url='http://www.sanjoseca.gov/index.aspx?NID=3308',
    data_url='http://www.sanjoseca.gov/DocumentCenter/View/9266',
    notes='Boundaries change every 10 years according to the census.',
)
Example #21
0
# coding: utf-8
from __future__ import unicode_literals

from datetime import date

import boundaries

boundaries.register(
    'Kirkland districts',
    domain='Kirkland, QC',
    last_updated=date(2013, 10, 6),
    name_func=boundaries.clean_attr('NOM_DISTRI'),
    authority='Ville de Montréal',
    source_url=
    'http://donnees.ville.montreal.qc.ca/dataset/elections-2009-districts-electoraux',
    licence_url=
    'http://donnees.ville.montreal.qc.ca/licence/licence-texte-complet/',
    data_url=
    'http://donnees.ville.montreal.qc.ca/storage/f/2013-10-06T16:49:49.153Z/elections-2009-districts-multi-poly.zip',
    encoding='iso-8859-1',
    extra={'division_id': 'ocd-division/country:ca/csd:2466102'},
    ogr2ogr='''-where "MONTREAL='0' AND NUM_ARR='3'"''',
)
from datetime import date

import boundaries

boundaries.register(
    'Oshawa wards',
    domain='Oshawa, ON',
    last_updated=date(2018, 10, 19),
    name_func=lambda f: 'Ward %s' % f.get('WARDNUMBER'),
    id_func=boundaries.attr('WARDNUMBER'),
    authority='City of Oshawa',
    source_url=
    'https://city-oshawa.opendata.arcgis.com/datasets/oshawa-2018-ward-boundaries',
    licence_url=
    'https://map.oshawa.ca/OpenData/Open%20Government%20Licence%20version%202.0%20-%20Oshawa.pdf',
    data_url=
    'https://opendata.arcgis.com/datasets/a9257f99b2d941a3bff928f4a19d6f9d_11.zip',
    encoding='iso-8859-1',
    extra={'division_id': 'ocd-division/country:ca/csd:3518013'},
)
from __future__ import unicode_literals

import re
from datetime import date

import boundaries

boundaries.register(
    'Clarington wards',
    domain='Clarington, ON',
    last_updated=date(2012, 11, 15),
    name_func=boundaries.attr('WARD'),
    id_func=lambda f: re.sub(r'\D', '', f.get('WARD')),
    authority='Municipality of Clarington',
    encoding='iso-8859-1',
    extra={'division_id': 'ocd-division/country:ca/csd:3518017'},
)
        return int(f.get('NO_DIS'))


for geographic_code, (name, type) in sets.items():
    geographic_codes = [geographic_code]

    boundaries.register(
        '%s %s' % (name, type),
        domain='%s, QC' % name,
        last_updated=date(2017, 11, 30),
        name_func=district_namer,
        id_func=district_ider,
        authority='Directeur général des élections du Québec',
        licence_url=
        'https://www.electionsquebec.qc.ca/francais/conditions-d-utilisation-de-notre-site-web.php',
        encoding='utf-8',
        extra={
            'division_id':
            'ocd-division/country:ca/csd:24%05d' % geographic_code
        },
        is_valid_func=lambda f, geographic_codes=geographic_codes: int(
            f.get('CO_MUNCP')) in geographic_codes,
        notes=
        'Load the shapefile manually:\nfab alpheus update_boundaries:args="-r --merge combine -d data/shapefiles/public/boundaries/ca_qc_districts"',
    )

boundaries.register(
    'Paroisse de Plessisville districts',
    domain='Plessisville, QC',
    last_updated=date(2017, 11, 30),
    name_func=district_namer,
from datetime import date

import boundaries

boundaries.register(
    '',
    domain='',
    last_updated=date(),
    name_func=boundaries.attr(''),
    id_func=boundaries.attr(''),
    authority='',
    source_url='',
    licence_url='',
    data_url='',
    encoding='iso-8859-1',
    metadata={'geographic_code': ''},
)
from datetime import date

import boundaries

boundaries.register(
    'Newmarket wards',
    domain='Newmarket, ON',
    last_updated=date(2016, 8, 6),
    name_func=lambda f: 'Ward %s' % f.get('WARD'),
    id_func=boundaries.attr('WARD'),
    authority='Town of Newmarket',
    encoding='iso-8859-1',
    source_url=
    'http://open.newmarket.ca/opendata/navigo/#/show/4e404ea7c3cb6e3c?disp=6b625f5',
    licence_url=
    'https://www.newmarket.ca/TownGovernment/Documents/Newmarket_OpenData_Licence.pdf',
    extra={'division_id': 'ocd-division/country:ca/csd:3519048'},
)
    '1314019': ['Kedgwick', 'Kedgwick'],
    '1314025': ['Belledune', 'Belledune'],
    '1315027': ['Bas-Caraquet', 'Bas-Caraquet'],
    '1315028': ['Caraquet', 'Caraquet'],
}

for geographic_code, (name, machine_name) in sets.items():
    boundaries.register(
        '%s wards' % name,
        file='%s.shp' % name,
        domain='%s, NB' % name,
        last_updated=date(2014, 3, 24),
        name_func=lambda f: 'Ward %s' % f.get('WARD_ID'),
        id_func=boundaries.attr('WARD_ID'),
        authority='Her Majesty the Queen in Right of New Brunswick',
        source_url=
        'http://geonb.snb.ca/ArcGIS/rest/services/ElectionsNB/GeoNB_ENB_MunicipalWards/MapServer/0',
        licence_url=
        'http://geonb.snb.ca/downloads/documents/geonb_license_e.pdf',
        encoding='iso-8859-1',
        metadata={'geographic_code': geographic_code},
        ogr2ogr='''-where "MUN_NAME='%s'"''' % machine_name,
        base_file='OGRGeoJSON.shp',
    )

boundaries.register(
    'Beresford wards',
    file='Beresford.shp',
    domain='Beresford, NB',
    last_updated=date(2014, 3, 24),
    name_func=lambda f: 'Ward B' if f.get('OBJECTID') == 52 else 'Ward A',
import boundaries


def namer(f):
    import boundaries
    n = boundaries.clean_attr('FEDENAME')(f)
    # @see http://www.parl.gc.ca/HousePublications/Publication.aspx?Language=E&Mode=1&DocId=6684609&File=4
    if n == 'Western Arctic':
        return 'Northwest Territories'
    else:
        return n


boundaries.register(
    'Federal electoral districts (2003 Representation Order)',
    singular='Federal electoral district',
    domain='Canada',
    last_updated=date(2011, 11, 28),
    name_func=namer,
    id_func=boundaries.attr('FEDUID'),
    slug_func=boundaries.attr('FEDUID'),
    authority='Her Majesty the Queen in Right of Canada',
    source_url=
    'https://open.canada.ca/data/en/dataset/48f10fb9-78a2-43a9-92ab-354c28d30674',
    licence_url='https://open.canada.ca/en/open-government-licence-canada',
    data_url=
    'https://www12.statcan.gc.ca/census-recensement/2011/geo/bound-limit/files-fichiers/gfed000a11a_e.zip',
    encoding='iso-8859-1',
    extra={'division_id': 'ocd-division/country:ca'},
)
def valid_ward(feature):
    if feature.get('WARD') != 'OUT':
        return True
    return False

def ocd_id_func(feature):
    return 'ocd-division/country:us/state:il/place:chicago/ward:{0}'.format(feature.get('WARD'))

def ward_namer(feature):
    return 'chicago-ward-{0}'.format(feature.get('WARD'))

boundaries.register('chicago-wards-2003',  
    file='',
    last_updated=date(2015, 4, 2),
    name='Chicago Wards 2003',
    singular='Chicago Ward 2003',
    domain='Chicago',
    authority='City of Chicago',
    source_url='https://data.cityofchicago.org/api/geospatial/xt4z-bnwh?method=export&format=Original',
    licence_url='',
    start_date=date(2003,5,1),
    end_date=date(2015,4,30),
    notes='',
    name_func=ward_namer,
    id_func=ocd_id_func,
    is_valid_func=valid_ward,
    label_point_func=lambda feature: None,
)

Example #30
0
# coding: utf-8
from datetime import date

import boundaries

boundaries.register(
    'Quebec electoral districts (2011)',
    singular='Quebec electoral district',
    domain='Quebec',
    last_updated=date(2012, 2, 24),
    name_func=boundaries.clean_attr('NM_CEP'),
    id_func=boundaries.attr('CO_CEP'),
    authority='Directeur général des élections du Québec',
    source_url=
    'https://www.electionsquebec.qc.ca/francais/provincial/carte-electorale/geometrie-des-circonscriptions-provinciales-du-quebec.php',
    licence_url=
    'https://www.electionsquebec.qc.ca/francais/conditions-d-utilisation-de-notre-site-web.php',
    data_url=
    'https://www.electionsquebec.qc.ca/documents/zip/circonscriptions-electorales-2011-shapefile-v2.zip',
    encoding='windows-1252',
    extra={'division_id': 'ocd-division/country:ca/province:qc'},
)
from datetime import date

import boundaries


def namer(f):
    import boundaries
    n = boundaries.clean_attr('ELEC_DISTR')(f)
    if n == 'Ths Isles of Notre Dame':
        return u'The Isles of Notre Dame'
    return n

boundaries.register('Newfoundland and Labrador electoral districts',
    domain='Newfoundland and Labrador',
    last_updated=date(2012, 9, 27),
    name_func=namer,
    authority='Her Majesty the Queen in Right of Newfoundland and Labrador',
    source_url='http://www.elections.gov.nl.ca/elections/ElectoralBoundaries/index.html',
    data_url='http://www.elections.gov.nl.ca/elections/ElectoralBoundaries/Distibution_2011.zip',
    encoding='iso-8859-1',
    metadata={'geographic_code': '10'},
)
from datetime import date

import boundaries

boundaries.register('British Columbia electoral districts',
    domain='British Columbia',
    last_updated=date(2011, 12, 12),
    name_func=boundaries.attr('edname'),
    id_func=boundaries.attr('edabbr'),
    authority='Elections BC',
    source_url='http://www.elections.bc.ca/index.php/voting/electoral-maps-profiles/geographic-information-system-spatial-data-files-2011/',
    data_url='http://www.elections.bc.ca/docs/map/redis11/GIS/ED_Province.exe',
    encoding='iso-8859-1',
)
# coding: utf-8
import re
from datetime import date

import boundaries

boundaries.register('Summerside wards',
    domain='Summerside, PE',
    last_updated=date(2013, 7, 19),
    name_func=boundaries.dashed_attr('NAME'),
    id_func=lambda f: re.sub(r'\D', '', f.get('KEY')),
    authority='Elections Prince Edward Island',
    source_url='http://www.electionspei.ca/index.php?number=1051954&lang=F',
    data_url='http://www.electionspei.ca/municipal/details/gis/shp/summerside_wards.zip',
    licence_url='http://www.electionspei.ca/apilicense',
    encoding='iso-8859-1',
    extra={'division_id': 'ocd-division/country:ca/csd:1103025'},
)
# coding: utf-8
from datetime import date

import boundaries

boundaries.register(u'Westmount districts',
    domain=u'Westmount, QC',
    last_updated=date(2013, 10, 6),
    name_func=lambda f: 'District %s' % re.sub(r'\D', '', f.get('NOM_DISTRI')),
    id_func=lambda f: re.sub(r'\D', '', f.get('NOM_DISTRI')),
    authority=u'Ville de Montréal',
    source_url='http://donnees.ville.montreal.qc.ca/dataset/elections-2009-districts-electoraux',
    licence_url='http://donnees.ville.montreal.qc.ca/licence/licence-texte-complet/',
    data_url='http://donnees.ville.montreal.qc.ca/storage/f/2013-10-06T16:49:49.153Z/elections-2009-districts-multi-poly.zip',
    encoding='iso-8859-1',
    metadata={'geographic_code': '2466032'},
    ogr2ogr='''-where "MONTREAL='0' AND NUM_ARR='4'"''',
)
Example #35
0
def get_anc_name(mode):
	def g(feature):
		if mode == "name": return "ANC " + feature.get("SMD_ID")[0:2]
		if mode == "id": return feature.get("SMD_ID")[0:2]
		if mode == "slug": return feature.get("SMD_ID")[0:2]
		return True
	return g

boundaries.register('dc-smd-2013',
    name='DC Single Member Districts (2013)',
    singular='DC Single Member District (2013)',
    domain='District of Columbia, United States',
    last_updated=date(2012, 10, 19),
    is_valid_func=get_smd_name("is_valid"),
    name_func=get_smd_name("name"),
    id_func=get_smd_name("id"),
    slug_func=get_smd_name("slug"),
    authority='DC OCTO/DC GIS/DC OP',
    source_url='http://data.dc.gov/Metadata.aspx?id=3090',
    #data_url='',
    #encoding='iso-8859-1',
)

boundaries.register('dc-anc-2013',
    name='DC Advisory Neighborhood Commissions (2013)',
    singular='DC Advisory Neighborhood Commission (2013)',
    domain='District of Columbia, United States',
    last_updated=date(2012, 10, 19),
    is_valid_func=get_anc_name("is_valid"),
    name_func=get_anc_name("name"),
    id_func=get_anc_name("id"),
#coding: utf-8
from datetime import date

import boundaries

boundaries.register(u'Montréal boroughs',
    domain=u'Montréal, QC',
    last_updated=date(2013, 8, 9),
    name_func=boundaries.clean_attr('ARROND'),
    authority=u'Ville de Montréal',
    source_url='http://donnees.ville.montreal.qc.ca/fiche/polygones-arrondissements/',
    licence_url='http://donnees.ville.montreal.qc.ca/licence/licence-texte-complet/',
    data_url='http://depot.ville.montreal.qc.ca/polygones-arrondissements/data.zip',
    notes='The Ahuntsic-Cartierville borough is split into two features. We merge them using Quantum GIS.',
    encoding='iso-8859-1',
    metadata={'geographic_code': '2466023'},
)
def namer(f):
    import boundaries
    if f.get('CO_MUNCP') == 43027:
        return {
            'Le Mont-Bellevue': 'Mont-Bellevue',
            'Rock Rorest--Saint-lie--Deauville': 'Rock Forest—Saint-Élie—Deauville',
        }.get(f.get('NM_ARON'), boundaries.clean_attr('NM_ARON')(f))
    elif f.get('CO_MUNCP') == 66023:
        return {
            'Le Plateau-Mont-Royal': 'Plateau-Mont-Royal',
            'Le Sud-Ouest': 'Sud-Ouest',
            'Pierrefond-Roxboro': 'Pierrefonds-Roxboro',
            'Rosemont--La-Petite-Patrie': 'Rosemont—La Petite-Patrie',
        }.get(f.get('NM_ARON'), boundaries.clean_attr('NM_ARON')(f))
    else:
        return boundaries.clean_attr('NM_ARON')(f)

for geographic_code, name in sets.items():
    boundaries.register('%s boroughs' % name,
        file='%s.shp' % unidecode(name),
        domain='%s, QC' % name,
        last_updated=date(2014, 2, 28),
        name_func=namer,
        id_func=lambda f: int(f.get('NO_ARON')),
        authority='Directeur général des élections du Québec',
        licence_url='http://www.electionsquebec.qc.ca/francais/conditions-d-utilisation-de-notre-site-web.php',
        encoding='iso-8859-1',
        metadata={'geographic_code': '24%05d' % geographic_code},
    )
# coding: utf-8
from datetime import date

import boundaries

boundaries.register('Quebec electoral districts (2011)',
    singular='Quebec electoral district',
    domain='Quebec',
    last_updated=date(2012, 2, 24),
    name_func=boundaries.clean_attr('NM_CEP'),
    id_func=boundaries.attr('CO_CEP'),
    authority='Directeur général des élections du Québec',
    source_url='https://www.electionsquebec.qc.ca/francais/provincial/carte-electorale/geometrie-des-circonscriptions-provinciales-du-quebec.php',
    licence_url='https://www.electionsquebec.qc.ca/francais/conditions-d-utilisation-de-notre-site-web.php',
    data_url='https://www.electionsquebec.qc.ca/documents/zip/circonscriptions-electorales-2011-shapefile-v2.zip',
    encoding='windows-1252',
    extra={'division_id': 'ocd-division/country:ca/province:qc'},
)
from datetime import date

import boundaries

boundaries.register('Thunder Bay wards',
    domain='Thunder Bay, ON',
    last_updated=date(2014, 3, 25),
    name_func=boundaries.clean_attr('WARD_NAME'),
    id_func=lambda f: f.get('WARD_NO').replace('00', ''),
    authority='City of Thunder Bay',
    encoding='iso-8859-1',
    metadata={'geographic_code': '3558004'},
)
from __future__ import unicode_literals

import re
from datetime import date

import boundaries

boundaries.register(
    'Fredericton wards',
    domain='Fredericton, NB',
    last_updated=date(2013, 11, 26),
    name_func=lambda f: re.sub(' / ', '/', f.get('Ward')),
    id_func=boundaries.attr('Ward_Num'),
    authority='City of Fredericton',
    source_url='http://www.fredericton.ca/en/citygovernment/DataMain.asp',
    licence_url='http://www.fredericton.ca/en/citygovernment/TermsOfUse.asp',
    data_url='http://files.fredericton.ca/data/GISData/wards.zip',
    encoding='iso-8859-1',
    extra={'division_id': 'ocd-division/country:ca/csd:1310032'},
)
import re
from datetime import date

import boundaries

boundaries.register('Halton Hills wards',
    domain='Halton Hills, ON',
    last_updated=date(2017, 1, 16),
    name_func=boundaries.attr('WARD'),
    id_func=lambda f: re.sub(r'\D+', '', f.get('WARD')),
    authority='Town of Halton Hills',
    encoding='iso-8859-1',
    extra={'division_id': 'ocd-division/country:ca/csd:3524015'},
)
from datetime import date

import boundaries

boundaries.register('Moncton wards',
    domain='Moncton, NB',
    last_updated=date(2012, 8, 21),
    name_func=lambda f: 'Ward %s' % f.get('WARDNUMB'),
    id_func=boundaries.attr('WARDNUMB'),
    authority='City of Moncton',
    encoding='iso-8859-1',
    metadata={'geographic_code': '1307022'},
)
Example #43
0
from datetime import date

import boundaries

boundaries.register(
    'British Columbia electoral districts (2008 Redistribution)',
    singular='British Columbia electoral district',
    domain='British Columbia',
    last_updated=date(2016, 11, 30),
    name_func=boundaries.attr('ED_NAME'),
    id_func=boundaries.attr('ED_ABBREV'),
    authority='Her Majesty the Queen in Right of British Columbia',
    source_url=
    'https://catalogue.data.gov.bc.ca/dataset/provincial-electoral-districts-electoral-boundaries-redistribution-2008',
    licence_url='https://www.elections.bc.ca/docs/EBC-Open-Data-Licence.pdf',
    data_url=
    'https://catalogue.data.gov.bc.ca/dataset/c864f294-d302-4630-bde3-a0551735b309/resource/dc567bfb-488b-4765-b544-6bd02f61f736/download/edsre2008.zip',
    encoding='iso-8859-1',
    extra={'division_id': 'ocd-division/country:ca/province:bc'},
)
from datetime import date

import boundaries

boundaries.register('Census divisions',
    domain='Canada',
    last_updated=date(2011, 11, 28),
    name_func=boundaries.attr('CDNAME'),
    id_func=boundaries.attr('CDUID'),
    slug_func=boundaries.attr('CDUID'),
    authority='Her Majesty the Queen in Right of Canada',
    source_url='http://data.gc.ca/data/en/dataset/515dbfa9-9069-4877-8fe8-177edaa4ca76',
    licence_url='http://data.gc.ca/eng/open-government-licence-canada',
    data_url='http://www12.statcan.gc.ca/census-recensement/2011/geo/bound-limit/files-fichiers/gcd_000a11a_e.zip',
    encoding='iso-8859-1',
)
Example #45
0
from datetime import date

import boundaries

def ocd_id_func(feature):
    return 'ocd-division/country:us/state:il/sldu:{0}'.format(feature.get('District_1'))

def district_namer(feature):
    return 'il-senate-district-{0}'.format(str(feature.get('District_1')).zfill(3))

boundaries.register('illinois-upper-2011',  
    file='',
    last_updated=date(2011, 5, 26),
    name='Illinois Senate Districts',
    singular='Illinois Senate District',
    domain='Illinois',
    authority='State of Illinois',
    source_url='http://ilhousedems.com/redistricting/2011-maps/Legislative_Districts_Public_Act/House%20and%20Senate%20shape%20files.zip',
    licence_url='',
    start_date=date(2011,5,1),
    end_date=None,
    notes='',
    name_func=district_namer,
    id_func=ocd_id_func,
    is_valid_func=lambda feature: True,
    label_point_func=lambda feature: None,
)

from __future__ import unicode_literals

from datetime import date

import boundaries

boundaries.register(
    'Northwest Territories electoral districts',
    domain='Northwest Territories',
    last_updated=date(2014, 4, 9),
    name_func=boundaries.attr('ED'),
    id_func=lambda f: int(f.get('EDNWTF_ID')),
    authority='Her Majesty the Queen in Right of Northwest Territories',
    encoding='iso-8859-1',
    extra={'division_id': 'ocd-division/country:ca/territory:nt'},
)
from datetime import date

import boundaries

boundaries.register('Census subdivisions',
    domain='Canada',
    last_updated=date(2011, 11, 28),
    name_func=boundaries.attr('CSDNAME'),
    id_func=boundaries.attr('CSDUID'),  # Census subdivision names are not unique across provinces and territories
    slug_func=boundaries.attr('CSDUID'),
    authority='Her Majesty the Queen in Right of Canada',
    source_url='http://data.gc.ca/data/en/dataset/8b577e89-8c56-4048-b4db-b9d5c753d419',
    licence_url='http://data.gc.ca/eng/open-government-licence-canada',
    data_url='http://www12.statcan.gc.ca/census-recensement/2011/geo/bound-limit/files-fichiers/gcsd000a11a_e.zip',
    encoding='iso-8859-1',
)
from datetime import date

import boundaries

boundaries.register('Census subdivisions',
    domain='Canada',
    last_updated=date(2011, 11, 28),
    name_func=boundaries.attr('CSDNAME'),
    id_func=boundaries.attr('CSDUID'),
    slug_func=boundaries.attr('CSDUID'),
    authority='Statistics Canada',
    source_url='http://www12.statcan.gc.ca/census-recensement/2011/geo/bound-limit/bound-limit-eng.cfm',
    licence_url='http://www.statcan.gc.ca/reference/licence-eng.html',
    data_url='http://www12.statcan.gc.ca/census-recensement/2011/geo/bound-limit/files-fichiers/gcsd000a11a_e.zip',
    notes='Census subdivision names are not unique across provinces.',
    encoding='iso-8859-1',
)
            'St-Henri-Petite-Bourgogne-Pte-St-Charles': 'Saint-Henri—Petite-Bourgogne—Pointe-Saint-Charles',
            'Étienne-Desmarteaux': 'Étienne-Desmarteau',
        }.get(f.get('NM_DIS'), f.get('NM_DIS'))
    else:
        return {
            'Le Plateau-Mont-Royal': 'Plateau-Mont-Royal',
            'Le Sud-Ouest': 'Sud-Ouest',
            'Pierrefond-Roxboro': 'Pierrefonds-Roxboro',
            'Rosemont--La-Petite-Patrie': 'Rosemont—La Petite-Patrie',
        }.get(f.get('NM_ARON'), boundaries.clean_attr('NM_ARON')(f))


def ider(f):
    if f.get('NO_DIS'):
        return f.get('NO_DIS')
    else:
        return int(f.get('NO_ARON'))


boundaries.register('Montréal boroughs and districts',
    domain='Montréal, QC',
    last_updated=date(2017, 11, 30),
    name_func=namer,
    id_func=ider,
    authority='Directeur général des élections du Québec',
    licence_url='https://www.electionsquebec.qc.ca/francais/conditions-d-utilisation-de-notre-site-web.php',
    encoding='utf-8',
    extra={'division_id': 'ocd-division/country:ca/csd:2466023'},
    notes='''rm -f boundaries/ocd-division/country:ca/csd:2466023/merge.*\nogr2ogr -f "ESRI Shapefile" boundaries/ocd-division/country:ca/csd:2466023/merge.shp boundaries/ca_qc_districts/Districts_Mun_2017_11_30.shp -where "CO_MUNCP='66023'" -select NM_ARON,NO_ARON\nogr2ogr -f "ESRI Shapefile" boundaries/ocd-division/country:ca/csd:2466023/merge.shp boundaries/ca_qc_districts/Districts_Mun_2017_11_30.shp -where "CO_MUNCP='66023'" -append -addfields\nLoad the shapefile manually:\nfab alpheus update_boundaries:args="-r --merge combine -d data/shapefiles/public/boundaries/ocd-division/country:ca/csd:2466023"''',
)
from datetime import date

import boundaries

boundaries.register('Empty',
  last_updated=date(2000, 1, 1),
  name_func=boundaries.attr('id'),
  file='../../fixtures/empty.zip',
)
Example #51
0
def get_ward_name(mode):
	def g(feature):
		if mode == "name": return "Ward " + feature.get("SMD_ID")[0]
		if mode == "id": return feature.get("SMD_ID")[0]
		if mode == "slug": return feature.get("SMD_ID")[0]
		return True
	return g

boundaries.register('dc-smd-2013',
    name='DC Single Member Districts (2013)',
    singular='DC Single Member District (2013)',
    domain='District of Columbia, United States',
    last_updated=date(2012, 10, 19),
    is_valid_func=get_smd_name("is_valid"),
    name_func=get_smd_name("name"),
    id_func=get_smd_name("id"),
    slug_func=get_smd_name("slug"),
    authority='DC OCTO/DC GIS/DC OP',
    source_url='http://data.dc.gov/Metadata.aspx?id=3090',
    #data_url='',
    #encoding='iso-8859-1',
)

boundaries.register('dc-anc-2013',
    name='DC Advisory Neighborhood Commissions (2013)',
    singular='DC Advisory Neighborhood Commission (2013)',
    domain='District of Columbia, United States',
    last_updated=date(2012, 10, 19),
    is_valid_func=get_anc_name("is_valid"),
    name_func=get_anc_name("name"),
    id_func=get_anc_name("id"),
# coding: utf-8
from datetime import date

import boundaries

boundaries.register(u'Sainte-Foy–Sillery–Cap-Rouge districts',
    domain=u'Sainte-Foy–Sillery–Cap-Rouge, Québec, QC',
    last_updated=date(2014, 3, 1),
    name_func=lambda f: re.sub(u'–', u'—', f.get('NOM')), # unknown character, m-dash
    id_func=boundaries.attr('CODE'),
    authority=u'Ville de Québec',
    source_url='http://donnees.ville.quebec.qc.ca/donne_details.aspx?jdid=2',
    licence_url='https://creativecommons.org/licenses/by/4.0/legalcode',
    data_url='http://donnees.ville.quebec.qc.ca/Handler.ashx?id=43&f=SHP',
    encoding='iso-8859-1',
    metadata={'ocd_division': u'ocd-division/country:ca/csd:2423027/borough:3'},
    ogr2ogr='''-where "DATE_FIN='2017/11/05' AND ARROND='Sainte-Foy–Sillery–Cap-Rouge'"''',
)
#coding: utf-8
from datetime import date

import boundaries

boundaries.register(u'Québec boroughs',
    domain=u'Québec, QC',
    last_updated=date(2013, 8, 20),
    name_func=boundaries.clean_attr('NOM'),
    id_func=boundaries.attr('CODE'),
    authority=u'Ville de Québec',
    source_url='http://donnees.ville.quebec.qc.ca/donne_details.aspx?jdid=2',
    licence_url='http://donnees.ville.quebec.qc.ca/licence.aspx',
    data_url='http://donnees.ville.quebec.qc.ca/Handler.ashx?id=2&f=SHP',
    encoding='iso-8859-1',
    metadata={'geographic_code': '2423027'},
    prj='http://spatialreference.org/ref/epsg/4326/prj/',
)
from datetime import date

import boundaries

boundaries.register('Peterborough wards',
    domain='Peterborough, ON',
    last_updated=date(2012, 9, 05),
    name_func=boundaries.attr('NAME'),
    id_func=boundaries.attr('WARD_ID'),
    authority='City of Peterborough',
    encoding='iso-8859-1',
    metadata={'geographic_code': '3515014'},
)
from datetime import date

import boundaries

boundaries.register('Strathcona County wards',
    domain='Strathcona County, AB',
    last_updated=date(2012, 10, 11),
    name_func=lambda f: 'Ward %s' % f.get('Ward'),
    id_func=boundaries.attr('Ward'),
    authority='Strathcona County',
    notes='We use a shapefile received via email.',
    encoding='iso-8859-1',
)
from __future__ import unicode_literals

from datetime import date

import boundaries

boundaries.register(
    'Calgary wards',
    domain='Calgary, AB',
    last_updated=date(2016, 1, 4),
    name_func=boundaries.clean_attr('LABEL'),
    id_func=boundaries.attr('WARD_NUM'),
    authority='City of Calgary',
    source_url=
    'https://data.calgary.ca/OpenData/Pages/DatasetDetails.aspx?DatasetID=PDC0-99999-99999-00009-P%28CITYonlineDefault%29',
    licence_url='https://data.calgary.ca/OpenData/Pages/TermsofUse.aspx',
    data_url=
    'https://data.calgary.ca/_layouts/OpenData/DownloadDataset.ashx?Format=SHP&DatasetId=PDC0-99999-99999-00009-P(CITYonlineDefault)&VariantId=3(CITYonlineDefault)',
    encoding='iso-8859-1',
    extra={'division_id': 'ocd-division/country:ca/csd:4806016'},
)