.github/workflows | ||
.gitignore | ||
devbox.json | ||
devbox.lock | ||
playground.ipynb | ||
poetry.lock | ||
pyproject.toml | ||
README.md | ||
requirements.txt | ||
surplus.py | ||
test.py | ||
UNLICENCE |
surplus
Warning
this is surplus
2.0.0
.
surplus is being rewritten to better incorporate with sandplus. sandplus is surplus's Android application accompaniment, written in Kotlin with Jetpack Compose.you are on the
future
branch. if you see this warning, that means code is not finalised and ready to be used.
want the old, stable, working codebase? see themain
branch.
surplus is a Python script to convert Google Maps Plus Codes to iOS Shortcuts-like shareable text.
- installation
- command-line usage
- developer's guide
- contributor's guide
- output technical details
- licence
$ surplus 9R3J+R9 Singapore
TODO CLI DEMO
>>> from surplus import surplus, Localcode
>>> Localcode(code="8RPQ+JW", locality="Singapore").full_length()
TODO API DEMO
installation
Note
python 3.11 or later is required due to a bug in earlier versions. (python/cpython#88089)
install surplus directly from the repository using pip:
pip install git+https://github.com/markjoshwel/surplus.git@future
command-line usage
usage: surplus [-h] [-d] [-v] [-c {pluscode,localcode,latlong,string}]
[query ...]
Google Maps Plus Code to iOS Shortcuts-like shareable text
positional arguments:
query full-length Plus Code (6PH58QMF+FX), shortened
Plus Code/'local code' (8QMF+FX Singapore),
latlong (1.3336875, 103.7749375), or string
query (e.g., 'Wisma Atria')
options:
-h, --help show this help message and exit
-d, --debug prints lat, long and reverser response dict to
stderr
-v, --version prints version information to stderr and exits
-c {pluscode,localcode,latlong,shareabletext},
--convert-to {pluscode,localcode,latlong,shareabletext}
converts query a specific output type, defaults
to 'shareabletext'
developer's guide
prerequisites:
alternatively, use devbox for a hermetic development environment powered by Nix.
devbox shell # skip this if you aren't using devbox
poetry install
poetry shell
contributor's guide
- fork the repository and branch off from the
future
branch - make and commit your changes!
- pull in any changes from
future
, and resolve any conflicts, if any - commit your copyright waiver (see below)
- submit a pull request (or mail in a diff)
when contributing your first changes, please include an empty commit for a copyright waiver using the following message (replace 'Your Name' with your name or nickname):
Your Name Copyright Waiver
I dedicate any and all copyright interest in this software to the
public domain. I make this dedication for the benefit of the public at
large and to the detriment of my heirs and successors. I intend this
dedication to be an overt act of relinquishment in perpetuity of all
present and future rights to this software under copyright law.
the command to create an empty commit is git commit --allow-empty
reporting incorrect output
Note
this section is independent from the rest of the contributing section.
different output from the iOS Shortcuts app is expected, however incorrect output is not.
the reporting process
open an issue in the repositories issue tracker, and do the following:
-
ensure that your issue is not an error of incorrect data returned by your reverser function, which by default is OpenStreetMap Nominatim. (don't know what the above means? then you are using the default reverser.)
also look at the what counts as "incorrect" section before moving on.
-
include the erroneous query. (the Plus Code/local code/latlong coord/query string you passed into surplus)
-
include output from the teminal with the
--debug
flag passed to the surplus CLI or withdebug=True
set in function calls.Note
if you are using the surplus API and have passed custom stdout and stderr parameters to redirect output, include that instead.
-
how it should look like instead, with reasoning if the error is not obvious. (e.g., missing details)
for reference, see how the following issues were written:
what counts as "incorrect"
-
example (correct)
-
iOS Shortcuts Output
Plaza Singapura 68 Orchard Rd 238839 Singapore
-
surplus Output
Plaza Singapura 68 Orchard Road Museum 238839 Central, Singapore
this should not be reported as incorrect, as the only difference between the two is that surplus displays more information.
note: for singaporean readers, "Musuem" here is correct as it refers to the Museum planning area, in which Plaza Singapura is located in.
-
other examples that should not be reported are:
-
name of place is incorrect/different
this may be due to incorrect data from the geolocator function, which is OpenStreetMap Nominatim by default. in the case of Nominatim, it means that there the data on OpenStreetMap is incorrect.
(if so, then consider updating OpenStreetMap to help not just you, but other surplus and OpenStreetMap users!)
you should report when the output does not make logical sense, or something similar wherein the output of surplus is illogical to read or is not correct in the traditional sense of a correct address.
see the linked issues in the reporting process for examples of incorrect outputs.
the technical details of surplus's output
$ s+ --debug 8QJF+RP Singapore
TODO DEBUG OUTPUT
variables
-
variable
args.query
space-combined query given by user, comes from
argparse.ArgumentParser.parse_args
-
variable
squery
query split by comma
$ s+ 77Q4+7X Austin, Texas, USA -------------------------- query squery -> ['77Q4+7X', 'Austin', 'Texas', 'USA']
-
variables
pcode
andlocality
(only shown if the query is a local code, not shown on full-length plus codes, latlong coordinates or string queries)
represents the plus code and locality portions of a shortened plus code (referred to as a "short/local code" in the codebase) respectively.
-
variables
lat
andlon
(only shown if the query is a plus code)
the latitude longitude coordinates derived from the plus code.
-
variable
location
the response dictionary from the reverser passed to
surplus.surplus()
-
variable
seen_names
a list of unique names/elements found in certain nominatim keys used in final output lines 0-3.
-
variables for seen name checks
the variables come from a check to reduce repeated elements found in
seen_names
.-
variable
d
current element in the iteration of the final output line 4 (general regional location) nominatim keys
-
variable
_dvmt4
list used in an
all()
check to see if the current nominatim key (variabled
) can be wholly found in any of the seen names, in the general regional location, or in the road name.reasoning is, if the previous lines wholly state the general regional location of the query, there is no need to restate it.
# psuedocode _dvtm4 = [ d != "", d not in road, d not in [output line 4 (general regional location) nominatim keys], any(_dvcm4), ]
-
variable
_dvcm4
list used in an
any()
check to see if the current nominatim key (variabled
) can be wholly found in any of the seen names._dvcm4 = [True if (d not in sn) else False for sn in seen_names]
-
breakdown of each output line, accompanied by their nominatim key:
0 name of a place
1 building name
2 highway name
3 block/house/building number, house name, road
4 general regional location
5 postal code
6 general global information
-
name of a place
(usually important places or landmarks)
-
examples
The University of Queensland Ngee Ann Polytechnic Botanic Gardens
-
nominatim keys
emergency, historic, military, natural, landuse, place, railway, man_made, aerialway, boundary, amenity, aeroway, club, craft, leisure, office, mountain_pass, shop, tourism, bridge, tunnel, waterway
-
-
building name
-
examples
Novena Square Office Tower A Visitor Centre
-
nominatim keys
building
-
-
highway name
-
examples
Marina Coastal Expressway Lornie Highway
-
nominatim keys
highway
-
-
block/house/building number, house name, road
-
examples
131 Toa Payoh Rise 535 Clementi Road Macquarie Street Braddell Road
-
nominatim keys
house_number, house_name, road
-
-
general regional location
-
examples
St Lucia, Greater Brisbane The Drag, Austin Toa Payoh Crest
-
nominatim keys
residential, neighbourhood, allotments, quarter, city_district, district, borough, suburb, subdivision, municipality, city, town, village
-
-
postal code
-
examples
310131 78705 4066
-
nominatim key
postcode
-
-
general global information
-
examples
Travis County, Texas, United States Southeast, Singapore Queensland, Australia
-
nominatim keys
region, county, state, state_district, country, continent
-
api reference
TODO API REF
licence
surplus is free and unencumbered software released into the public domain. for more information, please refer to the UNLICENCE, https://unlicense.org, or the python module docstring.