GeoHack - MediaWiki
Jump to content
From mediawiki.org
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
language
The requested language version (e.g.,
language
.wikipedia.org
), falls back to English if the template page does not exist.
pagename
The full title of the referring article. If not supplied, GeoHack will attempt to read the values from the
HTTP referer
params
Coordinates, optionally followed by other location-related parameters (underscore-separated, in a
key:value
fomat). Example:
1.292836_N_103.856878_E_type:landmark_dim:500
The coordinates are in one of the formats
D_M_S_N_D_M_S_E
D_M_N_D_M_E
D_N_D_E
, or
D;D
where
is degrees,
is minutes,
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. The 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:
. 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
state
1 : 3,000,000
1058
3000000
4000000
3.0
429
adm1st
1 : 1,000,000
353
1000000
1000000
1.0
143
adm2nd (
default
1 : 300,000
106
300000
200000
0.3
42
11
adm3rd, city, mountain, isle, river, waterbody
1 : 100,000
35.3
100000
100000
0.1
14
12
event, forest, glacier
1 : 50,000
17.6
50000
50000
0.05
13
airport
1 : 30,000
10.6
30000
25000
0.03
14
camera, edu, pass, landmark, railwaystation
1 : 10,000
3.53
10000
10000
0.01
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
Request for a different project. If requesting the OpenStreetMaps (project=osm) page it will retrieve it from a template on meta:
title
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
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
OpenHistoricalMap
Bing 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
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
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
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
GeoHack for Firenze, in Italian
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
A URL
rewrite.script
has been installed to allow shortening of URL. The example below illustrates the parts that are changed or removed.
geohack.php?language=
en
¶ms=
40.7;-74_type:city(8000000)
pagename=New_York_City
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
(Rust version)
until 2025-11: (
PHP version
until 2013:
backed up to
# Clone the current version:
git
clone
# Commit changes:
git
commit
-a
-m
"commit summary"
# Update the live installation:
become
geohack
cd
geohack/
./build.sh
&&
./restart.sh
See also
GeoHack/Replacement script
, a user JavaScript that replaces links to GeoHack with another service.
Geo-data projects
Wikipedia-World
ghel
Maintainers
User:Dispenser
(project lead)
User:Kolossos
User:Magnus Manske
(current Rust version)
Retrieved from "
Categories
MMT-Tool
Geo tools
Mapping
Hidden category:
Webarchive template wayback links
GeoHack
Add topic