Skip to content

katrina376/formosa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 

Repository files navigation

Formosa

Generating SVG Taiwan maps and coloring them using Python 3.

Features

  1. generate an SVG template map using the district boundary datasets (GML or SHP files) provided by NLSC
  2. render the template by specifying the district identification code and the color

Requirements

Data

  1. download the ZIP files and unzip:
  1. specify the paths to the unzipped *.gml files or *.shp files

Examples

Generate a map with default settings

from formosa.template import create

output = 'template.svg'
boundary_fp = '/PATH/TO/FILE.shp'
template.create(output, boundary_fp)

Generate a map with Penghu, Kinmen, and Matsu in floating boxes

from formosa.template import create_from_obj

class Config:
    AREA_FILE_PATH = '/PATH/TO/AREA/FILE'
    BORDER_FILE_PATH = '/PATH/TO/BORDER/FILE'
    
    SIZE = (1040, 1040)
    
    ASSIGN_RULES = [
        (lambda name: '金門縣' in name, 'Kinmen'),
        (lambda name: '連江縣' in name, 'Matsu'),
        (lambda name: '澎湖縣' in name, 'Penghu'),
    ]

    GROUPS = {
        'main': {
            'display_name': '',
            'position': (0, 0),
            'size': (1, 1),
            'border': (118.6, 120.6, 21.7, 25.5),
            'skip': 16,
        },
        'Penghu': {
            'display_name': '澎湖',
            'position': (0.02, 0.5),
            'size': (0.32, 0.48),
            'border': (119.3, 119.35, 23.14, 23.82),
            'skip': 4,
        },
        'Kinmen': {
            'display_name': '金門',
            'position': (0.02, 0.26),
            'size': (0.32, 0.2),
            'border': (118.1, 118.6, 24.28, 24.42),
            'skip': 4,
        },
        'Matsu': {
            'display_name': '連江',
            'position': (0.02, 0.02),
            'size': (0.32, 0.2),
            'border': (119.81, 120.01, 26.1, 26.3),
            'skip': 4,
        },
    }


output = 'template.svg'
create_from_obj(output, Config)

Render a template

from formosa.color import color

template = 'template.svg'

by_name = [{'code': '64000120', 'color': 'red'}]
by_hex = [{'code': '64000120', 'color': 'F00'}]
by_rgb = [{'code': '64000120', 'color': '255,0,0'}]

color(by_name, template, 'color_by_name.svg') # CSS color name
color(by_hex, template, 'color_by_hex.svg', 'hex')
color(by_rgb, template, 'color_by_rgb.svg', 'rgb')

Render a template using Taiwan town codes ver.103

from formosa.color import color
from formosa.utils.code import convert_TW103_to_MOI

template = 'template.svg'

data = [{'code': '6401200', 'color': 'red'}] # ver.103
for d in data:
    d.update({'code': convert_TW103_to_MOI(d.pop('code'))})

color(data, template, 'color_ver103_by_name.svg')

About

Generating SVG Taiwan maps and coloring them using Python 3.

Resources

Stars

Watchers

Forks