Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

have location mention nearby islands #39

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions pacific-factbook/__main__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import random
from string import Template

from . import name, flag, coordinate
from . import name, flag, coordinate, islands

report_template = Template(
"""
Expand Down Expand Up @@ -103,7 +103,9 @@
<circle cx="100" cy="100" r="40" stroke="#E8D9C5" stroke-width="4" fill="#E8D9C5" />
</svg>
""",
"location": "The Pacific ocean.",
"location": "The Pacific ocean. Close to "
+ ", ".join(islands.nearby_islands(pos))
+ ".",
"coordinates": coords,
"coastline": f"{random.randint(100, 1_000)} km",
"climate": "Tropical; hot and humid; wet season May to November.",
Expand Down
10 changes: 9 additions & 1 deletion pacific-factbook/coordinate.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
from random import uniform
from typing import NamedTuple
import math
import numbers
from random import uniform


class Coordinate(NamedTuple):
latitude: numbers.Real
longitude: numbers.Real


def distance(p1: Coordinate, p2: Coordinate) -> numbers.Real:
# FIXME
return math.sqrt(
(p1.latitude - p2.latitude) ** 2 + (p1.longitude - p2.longitude) ** 2
)


def generate() -> Coordinate:
latitude = uniform(-28.3417, -3.6754)
longitude = uniform(153.6868, 180 + 3.6754)
Expand Down
47 changes: 47 additions & 0 deletions pacific-factbook/islands.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
from typing import NamedTuple, Iterable
from functools import partial
from heapq import nsmallest

from . import coordinate
from .coordinate import Coordinate


def nearby_islands(pos: Coordinate) -> Iterable[str]:
dist = partial(coordinate.distance, pos)
candidates = nsmallest(3, islands, key=lambda x: dist(x.position))
return [x.name for x in candidates]


class Island(NamedTuple):
name: str
position: Coordinate


def _parse(s: str) -> Coordinate:
lat, ns, lon, ew = s.split("_")
lat = int(lat)
lon = int(lon)
if ns == "S":
lat = -lat
if ew == "w":
lon = -lon
return Coordinate(latitude=lat, longitude=lon)


islands = {
Island(name="American Samoa", position=_parse("14_S_170_W")),
Island(name="Cook Islands", position=_parse("21_S_159_W")),
Island(name="Easter Island", position=_parse("27_S_109_W")),
Island(name="French Polynesia", position=_parse("17_S_149_W")),
Island(name="Hawaii", position=_parse("21_N_157_W")),
Island(name="New Zealand", position=_parse("42_S_173_E")),
Island(name="Niue", position=_parse("19_S_169_W")),
Island(name="Norfolk Island", position=_parse("29_S_167_E")),
Island(name="Pitcairn Islands", position=_parse("25_S_130_W")),
Island(name="Samoa", position=_parse("13_S_172_W")),
Island(name="Tokelau", position=_parse("9_S_171_W")),
Island(name="Tonga", position=_parse("20_S_175_W")),
Island(name="Tuvalu", position=_parse("8_S_179_E")),
Island(name="Wallis and Futuna", position=_parse("13_S_176_W")),
Island(name="Rotuma", position=_parse("12_S_177_E")),
}