GeoHack
GeoHack is a modified version of map sources from Egil Kvaleberg's gis extension. It is designed to do simple HTML replacements of a template on Wikipedia and serve it to the client. It is used by Wikipedia to provide links to various mapping services, when a user clicks on a link with geographical coordinates.
Different layout designs for GeoHack are listed on w:Template:GeoTemplate/sandbox.
Query[edit]
language[edit]
The requested language version (e.g., language.wikipedia.org
), falls back to English if the template page does not exist.
pagename[edit]
The full title of the referring article. If not supplied, GeoHack will attempt to read the values from the HTTP referer.
params[edit]
The D_M_S_N_D_M_S_E
, D_M_N_D_M_E
, D_N_D_E
, or D;D
where D
is degrees, M
is minutes, S
is seconds, and NS/EWO
are the directions. Decimal numbers are accepted, especially for the last position.
TODO Document me: boxed range syntax D_N_D_E_to_D_N_D_E
Restrictions:
- Should be compatible with MediaWiki titles: a 255 byte length limit,
< > [ ] |
are invalid, and spaces and underscore are treated the same. &
causes problems if it not percent encoded in the URL.- Avoid non-ASCII characters as some browsers incorrectly handle copying and pasting.
- Avoid the equal sign (=) since it causes issues with unnamed template parameters (e.g., {{Coord}})
- The characters
& < > "
are escaped in the HTML to prevent exploits
- default
- Default scale: for use in templates, is overridden by
dim:
,scale:
,type:
parameters. - dim
- The size of the object in meters.
- globe
- Specify a different globe, defaults to Earth. Argument value is used for the subpage name, e.g., globe:moon will load Template:GeoTemplate/moon.
- page
- (disabled) Specify a subpage for map sources.
- region
- (deprecated) The ISO 3166 code with an optional subdivision to highlight region specific services, see Section codes below. If not supplied GeoHack will attempt to find the region using the coordinates.
- scale
- Set the relative map scale as 1:N. The OGC's "standard rendering pixel size" of 0.28 mm × 0.28 mm (90.7 dpi) is assumed and derived for all size calculations. Since the actual value can vary significantly (e.g. iPhone 4) it is recommended to use the display independent dim:.
- type
- The following are types GeoHack recognizes along with the calculated default scale.
- TODO Provide definitions for each type.
type: ratio m / pixel {scale} {mmscale} {span} {altitude} {zoom} {osmzoom} country, satellite 1 : 10,000,000 3528 10000000 10000000 10.0 1430 1 5 state 1 : 3,000,000 1058 3000000 4000000 3.0 429 3 7 adm1st 1 : 1,000,000 353 1000000 1000000 1.0 143 4 9 adm2nd (default) 1 : 300,000 106 300000 200000 0.3 42 5 11 adm3rd, city, mountain, isle, river, waterbody 1 : 100,000 35.3 100000 100000 0.1 14 6 12 event, forest, glacier 1 : 50,000 17.6 50000 50000 0.05 7 7 13 airport 1 : 30,000 10.6 30000 25000 0.03 4 7 14 camera, edu, pass, landmark, railwaystation 1 : 10,000 3.53 10000 10000 0.01 1 8 15
- zoom
- Deprecated Provided for compatibility with the Dutch maps.asp software. The scale is calibrated differently (
SCALE = POWER(2, 12 - ZOOM) * 100 000
, roughly equivalent to{osmzoom}
) and conflicts with the replacement variable{zoom}
project[edit]
Request for a different project. If requesting the OpenStreetMaps (project=osm) page it will retrieve it from a template on meta: http://meta.wikimedia.org/wiki/Template:GeoTemplate/osm
title[edit]
Set this if the page is not an appropriate title, such as when referring to a location in the article such as a particular curve on a road.
Replacement variables[edit]
- WGS84 Positioning
{latdegdec}, {londegdec}
- Decimal degrees{latdegdecabs}, {londegdecabs}
- Absolute decimal degrees (no negative){latdeground}, {londeground}
- Rounded integer degrees{latdegroundabs}, {londegroundabs}
- Rounded absolute{latdeg_outer_abs}, {londeg_outer_abs}
- Absolute integer degrees rounded up{latdegabs}, {londegabs}
- Absolute integer degrees
{latantipodes}, {longantipodes}
- Antipodes of {latdegdec}, {londegdec}{londegneg}
- The negative of {londegdec}{latdegint}, {londegint}
- Integer degrees (floored){latmindec}, {lonmindec}
- Decimal minutes{latminint}, {lonminint}
- Integer minutes{latsecdec}, {lonsecdec}
- Decimal seconds{latsecint}, {lonsecint}
- Integer seconds{latNS}, {lonEW}
- Direction of absolute integer degrees
- UTM Positioning
{utmnorthing}, {utmeasting}, {utmzone}
{utm33northing}, {utm33easting}
- Ordnance Survey Grid Positioning
{osgb36ref}
{osgb36northing}, {osgb36easting}
- CH1903 Positioning
{ch1903northing}, {ch1903easting}
- Scaling
name | used by | internal conversion | units | notes |
---|---|---|---|---|
{scale} | Virtual Globe | Use scale: or from dictionary look using type: value | ||
{mmscale} | Multimap | Dictionary-like lookup | ||
{altitude} | MSN Maps (Archived 2008-05-16 at the Wayback Machine), Fourmilab, Swissinfo | int( scale * 143/1000000 ), [1, infinity]
|
||
{zoom} | MapQuest, Gule Sider | int(18.0 - log(scale )), [0,9]
|
||
{osmzoom} | OpenStreetMap, Live Search Maps | 18 - ( round(log(scale ,2) - log(1693,2)) ), [2, 18]
|
OSM zoom level | |
{span} | Google Maps, WikiMapia | scale * 1.0 / 1000000
|
degrees/nautical miles | FIXME calibration; never is correct as span is tied to the view port size not scale [1] (Archived 2007-07-08 at the Wayback Machine) |
- Geographical features
{type}, {region}, {globe}
- The parameters from the params. Globe is deprecated with the implementation of subpages for bodies.
- Coordinate title
- {pagename} - Underscore page name, as given by the pagename or determined by the HTTP referrer.
- {title} - Title of the location as given by title, if not specified then falls back to {pagename} with the underscore replaced with spaces.
- {pagename_gmaps} - work around for google maps, will be replaced by {pagenamee}
- Misc./Not fully implemented
- {page} - Deprecated
- {geocountry} - same as region:
- {geoa1} - Characters 4 to 8 of region; Uppercased
- {lang} -likely to change
- {params} - content from params=
Section codes[edit]
If the region is supplied or determined then GeoHack moves the section to the placeholder:
<div id="GEOTEMPLATE-LOCAL"></div>
The region sections are wrapped in the divs where XX of the id is the ISO 3166-1 alpha-2 code:
<div id="GEOTEMPLATE-XX">
...
</div>
A surrounding div can style this section or the local div can provide only local links. To save bandwidth and simplify the REGIONS div will be removed if a local section is found.
<div id="GEOTEMPLATE-REGIONS">
...
</div>
Synchronizations[edit]
Due to issues affecting the squid server implementation on WMF servers, pages are cached longer than they should. This worked around requesting a different URL every hour.
JavaScript[edit]
For user modifications and development, JavaScript is loaded from the local language's MediaWiki:GeoHack.js
page. See English Wikipedia for an example.
Embed maps[edit]
Wikimedia Maps (maps.wikimedia.org) can be embedded in the tool with two edits that will not change any content or code on the source wiki: see example MediaWiki:GeoHack.js and GeoTemplate.
The Russian and Italian Wikipedias did so in November–December 2015, see example screenshot.
Nice URLs[edit]
A URL rewrite.script has been installed to allow shortening of URL. The example below illustrates the parts that are changed or removed.
https://geohack.toolforge.org/geohack.php?language=en¶ms=40.7;-74_type:city(8000000)&pagename=New_York_City https://geohack.toolforge.org/en/40.7;-74_type:city(8000000)?pagename=New_York_City
It is also compatible with the {{fullurl:}} parser function
{{fullurl:toolforge:geohack/en/52 30 N 13 23 E type:city(3431700)|title=Berlin}}
→
Note it is not necessary to supply pagename
as this can often be derived from the referer, see pagename above.
# URL Rewrite script for GeoHack match URL into $ with ^/~geohack/([a-z-]{2,12})/([^=]*)([&?]([a-z]+=.*)$|$) if matched then set URL = /~geohack/geohack.php?language=$1¶ms=$2&$4 endif
Note, for compatibility reasons, "?" parameters must contain "=" values.
Source code[edit]
- https://bitbucket.org/magnusmanske/geohack
- until 2013: http://svn.toolserver.org/svnroot/geohack/ backed up to https://phabricator.wikimedia.org/diffusion/TSVN/browse/geohack/
# Clone the current version:
git clone https://bitbucket.org/magnusmanske/geohack.git
# Commit changes:
git commit -a -m "commit summary"
# Update the live installation:
become geohack
cd public_html/; git pull
See also[edit]
- GeoHack/Replacement script, a user JavaScript that replaces links to GeoHack with another service.
Geo-data projects[edit]
Maintainers[edit]
- User:Dispenser (project lead)
- User:Kolossos
- User:Magnus Manske