Revision 188384 of "ଛାଞ୍ଚ:Location map skew/doc" on orwiki

Creates a location map as a [[m:Help:composite images|composite image]] of an existing map in either [[equirectangular projection]] or skewed projection, with multiple (up to 4) markers and optional labels superimposed onto it.  This template functions in the style of [[Template:Location_map]], but can auto-skew longitudes and allows 4 markers and labels (rather than just one marker).  Note: For brevity, parameters "pos" & "bg" are aliases (for parameters "position" & "background").

: ''Also see:'' For an unlimited list of markers/labels, see: ''[[Template:Location_map+]]'',
: which specifies points as a coded template list of markers/labels.

==Usage==
 <nowiki>{{</nowiki>Location map skew
 |''locname'' &nbsp; (selected from templates named "Location_map_<locname>")
 |skew    = number < 1.0 for narrow or > 1.0 for wider longitude
            (skews more towards top of map)
 ------------------------------------------- 1st label & marker
 |label      = 1st ''label text''
 |label_size = 1st label font size, percent (such as "85")
 |position   = pos = left ''or'' right ''or'' top ''or'' bottom – position of
               1st label relative to 1st mark (default: ''right'')
 |background = bg = background color for 1st label, defaults transparent
 |lon_dir=W    1st longitude direction: W=west, E=east (default)
 |lat_dir=S    1st latitude direction: S=south, N=north (default)
 |lat_deg    = 1st ''latitude'' degrees
 |lat_min    = 1st ''latitude'' minutes
 |lat_sec    = 1st ''latitude'' seconds
 |lon_deg    = 1st ''longitude'' degrees
 |lon_min    = 1st ''longitude'' minutes
 |lon_sec    = 1st ''longitude'' seconds
 |lat        = 1st ''latitude'' (as decimal; negative for south latitude)
 |long       = 1st ''longitude'' (as decimal; negative for west longitude)
 |mark       = 1st ''marker image file name'', a red dot by default
 |marksize   = 1st ''marker size'', default=8 (pixels wide/tall)
 ------------------------------------------- 2nd label & marker
 |label2      = 2nd ''label text''
 |label2_size = 2nd label font size, percent (such as "85")
 |position2   = pos2 = left ''or'' right ''or'' top ''or'' bottom – position of
                2nd label relative to 2nd mark (default: ''right'')
 |background2 = bg2 = background color for 2nd label, defaults transparent
 |lon2_dir=W    2nd longitude direction: W=west, E=east (default)
 |lat2_dir=S    2nd latitude direction: S=south, N=north (default)
 |lat2_deg    = 2nd ''latitude'' degrees (or use combined ''lat2'')
 |lat2_min    = 2nd ''latitude'' minutes
 |lat2_sec    = 2nd ''latitude'' seconds
 |lon2_deg    = 2nd ''longitude'' degrees (or use combined ''long2'')
 |lon2_min    = 2nd ''longitude'' minutes
 |lon2_sec    = 2nd ''longitude'' seconds
 |lat2        = 2nd ''latitude'' (as decimal; negative for south latitude)
 |long2       = 2nd ''longitude'' (as decimal; negative for west longitude)
 |mark2       = 2nd ''marker image file name'', a red dot by default
 |mark2size   = 2nd ''marker size'', default=8 (pixels wide/tall)
 |skew2       = number < 1.0 for narrow or > 1.0 wider longitude.
 ------------------------------------------- 3rd label & marker
 |label3      = 3rd ''label text''
 |label3_size = 3rd label font size, percent (such as "120")
    (... similar latitude/longitude parameters named "~3" ...)
 |mark3       = 3rd ''marker image file name'', a red dot by default
 |mark3size   = 3rd ''marker size'', default=8 (pixels wide/tall)
 |pos3, bg3   = 3rd label position & background color
 |skew3       = number < 1.0 for narrow or > 1.0 wider longitude.
    (...repeat until label4/mark4...)
 -------------------------------------------
 |border     = ''border color'' or ''none''
 |caption    = ''map caption''; for no caption enter "caption=";
               if omitted, then the caption will be auto-generated
               as: ''"<marker #1 label> (<location map name>)"''
 |float      = left ''or'' right ''or'' center ''or'' none for map placement
 |width      = ''map width'' for display size (pixels, omit "px")
 |AlternativeMap = Alternative map image name (changes background map,
              border coordinates are determined based on the map name);
              can be any image (omit "Image:").
 <nowiki>}}</nowiki><!-- end of indented parameter notes-->

Parameter ''locname'' refers to {Template:Location map ''locname''} containing the image name and coordinates of a particular map.

BEWARE: Omit "px" from ''marksize'' or ''width'' or else the map
might span entire screen.  The MediaWiki-language coding of the template cannot detect "px" inside numeric parameters.

== Available maps ==

List of live templates named ''Template:Location_map_skew_<locname>'' (without "Template:" prefix here):

{{Special:Prefixindex/Template:Location_map_skew_}}
[[Template:Location_map_SwedenCIAx|Location_map_SwedenCIAx]]

== Creating new maps ==

#Find an appropriate blank map in [[equirectangular projection]] (otherwise, coordinates will drift off, typically further north)
#Create a template named "Template:Location_map_''locname''" (copy the content of any other map template into it and enter appropriate values).
#Set default parameter values (using those parameter names), such as setting "mark" with image-file name and "marksize" for pixels wide/tall, or set default label font size ("label_size = 78" percent).
#Parameter names not used by "[[Template:Location_map]]" will be ignored by it, and only used for multiple-markers (such as defaulting "label2_size = 78" percent, or "mark2size=7" pixels).

== Examples ==

=== Map with label "Pag" and "Anytown" (degrees) ===

{| width=100%
| width=60% valign=top | '''Pag (Croatia)'''
 <nowiki>{{Location map skew
 |Croatia
 |label=Pag |marksize=8 |markhigh=8
   |pos=right    | bg=yellow
   |lat_deg=44   | lat_min=26
   |lon_deg=15   | lon_min=3
 |label2=Anytown_Anywhere
   |mark2size=45 | mark2high=30
   |mark2=
     Rouge-Admin JollyRoger.svg
   |pos2=top     | bg2=white
   |lat2_deg=46  | lat2_min=30
   |lon2_deg=17  | lon2_min=30
 |width=260
 |float=right
}}</nowiki>
| align="center" |
{{Location map skew |Croatia
 |label=Pag | marksize=8 | markhigh=8
    |pos=right    | bg=yellow
    |lat_deg=44   | lat_min=26  |lon_deg=15   | lon_min=3
 |label2=Anytown_Anywhere
    |mark2size=45 | mark2high=30
    |mark2=Rouge-Admin JollyRoger.svg
    |position2=top | bg2=white
    |lat2_deg=46   | lat2_min=30  |lon2_deg=17  | lon2_min=30
 |width=260|float=right}}
|}

=== Map with 3 aligned labels (decimal) ===

{| width=100%
| width=60% valign=top | '''Pag (Croatia)'''
 <nowiki>{{Location map skew | Croatia
 | label=Pag | position=right
      | lat=44.44  | long=15.05
      | marksize=8 | markhigh=8
 | label2=Anytown  | skew2=0.91
      | pos2=bottom | bg2=yellow
      | lat2=45.36  | long2=17.50
      | marksize=8 | markhigh=8
      | background2=yellow
 | label3=Anytown2  | skew3=0.83
      | pos3=left   | bg3=lightgreen
      | lat3=46.33 | long3=17.50
 | width=260 | float=right
}}</nowiki>
| width="270" align="center" | {{Location map skew |Croatia
 | label=Pag|lat=44.44|long=15.05|position=right
      | marksize=8 | markhigh=8
 | label2=Anytown  | skew2=0.91
      | pos2=bottom | bg2=yellow
      | lat2=45.36  | long2=17.50
      | marksize=8 | markhigh=8
      | background2=yellow
 | label3=Anytown2  | skew3=0.83
      | pos3=left   | bg3=lightgreen
      | lat3=46.33 | long3=17.50
 | width=260|float=right}}
|}

<br clear=all/>
===Non-rectangular map of Sweden===

{| width=100%
| width=60% valign=top | '''Visby/Kiruna (Sweden)'''
 <nowiki>{{Location map skew
 | SwedenCIAx
 | caption = Show Visby/Kiruna Sweden 
 | label = &amp;nbsp;Visby&amp;nbsp;
   | label_size = <!-- 0-900%--> 78
   | mark=Blue pog.svg | marksize=8
   | lat_deg=57 | lat_min=38
   | lon_deg=18 | lon_min=17
   | bg = <!--blue-->#9999EE | pos=right
 | label2=Stockholm
   | mark2=Blue pog.svg | mark2size=9
   | pos2=left   | label2_size=77
   | lat2_deg=59 | lat2_min=21
   | lon2_deg=18 | lon2_min=4
   | bg2=yellow        </nowiki><!--DISPLAY ONLY--><nowiki>
 | label3=Kiruna  | skew3=0.67
   <!--Sweden longitudes 67% squeeze-->
   | mark3=X_sheer_red_17.gif
   | mark3size=17 | mark3high=17
   | pos3=left    | label3_size=144
   | lat3_deg=67 | lat3_min=51
   | lat3_sec=17
   | lon3_deg=20 | lon3_min=13
   | lon3_sec=22
   | bg3 = <!--gold-->#CCCC11
 | label4=Luleå  | skew4=0.67
   | pos4=bottom | label4_size=90
   | lat4_deg=65 | lat4_min=35
   | lon4_deg=22 | lon4_min=09
   | bg4=lightgreen | mark4size=17
   | mark4=Circle_sheer_red_33.gif
   | mark4=X_sheer_red_17.gif
 | label5=Arctic_Circle
   | pos5=left | label5_size=86
   | lat5=66.50 | long5=16.50
   | bg5=lightgreen | mark5size=7
   | mark5=Green pog.svg
 | label6=Anytown4
   | pos6=top | label6_size=120
   | lat6=63.00 | long6=14.50
   | bg6=darkorange | mark6size=7
   | mark6=Green pog.svg
 | label7=Anytown5
   | pos7=top | label7_size=87
   | lat7=56.00 | long7=14.50
   | bg7=lightgreen | mark7size=7
   | mark7=Green pog.svg
 | float = right
 | width = <!--show small--> 195
}}</nowiki>
| width=198 align=center|{{Location map skew
 | SwedenCIAx
 | caption = Show Visby/Kiruna Sweden
 | label = &nbsp;Visby&nbsp;
   | label_size = <!-- 0-900%--> 78  <!-- LIVE -->
   | mark=Blue pog.svg | marksize=8
   | lat_deg=57 | lat_min=38
   | lon_deg=18 | lon_min=17
   | bg = <!--blue-->#9999EE | pos=right
 | label2=Stockholm
   | mark2=Blue pog.svg | mark2size=12
   | pos2=bottom  | label2_size=155
   | lat2_deg=59 | lat2_min=21
   | lon2_deg=18 | lon2_min=4
   | bg2=yellow
 | label3=Kiruna  | skew3=0.67
   | pos3=bottom   | label3_size=144  <!-- LIVE DATA -->
   | mark3=X_sheer_red_17.gif
   | mark3size=17 | mark3high=17
   | lat3_deg=67 | lat3_min=51
   | lat3_sec=17
   | lon3_deg=20 | lon3_min=13
   | lon3_sec=22
   | bg3 = <!--gold-->#CCCC11
 | label4=Luleå  | skew4=0.67
   | pos4=bottom | label4_size=90
   | lat4_deg=65 | lat4_min=35
   | lon4_deg=22 | lon4_min=09
   | bg4=lightgreen | mark4size=17
   | mark4=Circle_sheer_red_33.gif
   | mark4=X_sheer_red_17.gif
 | label5=Arctic_Circle
   | pos5=left | label5_size=86
   | lat5=66.50 | long5=16.50
   | bg5=lightgreen | mark5size=7
   | mark5=Circle_sheer_red_33.gif
   | mark5=Green pog.svg
 | label6=Anytown4
   | pos6=top | label6_size=120
   | lat6=63.00 | long6=14.50
   | bg6=darkorange | mark6size=7
   | mark6=Green pog.svg
 | label7=Anytown5
   | pos7=top | label7_size=87
   | lat7=56.00 | long7=14.50
   | bg7=lightgreen | mark7size=7
   | mark7=Green pog.svg
 | float = right
 | width = <!--show small--> 195}}
|}

=== Map with some labels outside map ===

{| width=100%
| width=60% valign=top | '''Pag (Croatia)'''
 <nowiki>{{Location map skew | Croatia
 | label=Pag | position=right
      | lat=44.44  | long=15.05
      | marksize=8 | markhigh=8
 | label2=Anytown
      | pos2=bottom | bg2=yellow
      | lat2=47.40  | long2=12.80
      | marksize=8 | markhigh=8
      | background2=yellow
 | label3=Anytown2
      | pos3=top   | bg3=lightgreen
      | lat3=41.98 | long3=18.43
 | width=260 | float=right
}}</nowiki>
| width="270" align="center" | {{Location map skew |Croatia
 | label=Pag|lat=44.44|long=15.05|position=right
      | marksize=8  | markhigh=8
 | label2=Anytown  | pos2=bottom | bg2=yellow
      | lat2=47.40  | long2=12.80
      | mark2size=8 | mark2high=8
 | label3=Anytown2 | pos3=top    | bg3=lightgreen
      | lat3=41.98 | long3=18.43
 | width=260|float=right}}
|}

===Unskewed Sweden: Location_map_many ===

{| width=100%
| width=60% valign=top | '''Visby/Kiruna (Sweden)'''
 <nowiki>{{Location map many
 | SwedenCIAx
 | label = Visby
 | label_size = 78
 | caption = Show Visby/Kiruna Sweden 
 | label = Visby
   | lat_deg=57 | lat_min=38
   | lon_deg=18 | lon_min=17
   | bg = #9999EE
 | label2=Anytown
   | pos2=right| label2_size=102
   | lat2=59.00 | long2=17.50
   | bg2=yellow
 | label3=Kiruna  | skew3=1.16
   | pos3=top | label3_size=85
   | lat3_deg=67 | lat3_min=51
   | lat3_sec=17
   | lon3_deg=20 | lon3_min=13
   | lon3_sec=22
   | bg3 = <!--gold-->#CCCC11
   | mark3size=6 | mark3high=7
 | label4=Anytown2
   | pos4=left  | label4_size=90
   | lat4=63.00 | long4=17.50
   | bg4=lightgreen
   | mark4size=33 | mark4high=33
   | mark4=
       Circle_sheer_red_33.gif
 | float = right
 | width = 195
}}</nowiki>
| width=198 align=center |<!-- OMIT - Due to resource limit?
{{Location map many
 | SwedenCIAx
 | label = Visby
 | label_size = 78
 | caption = Show Visby/Kiruna Sweden 
 | label = Visby
   | lat_deg=57 | lat_min=38
   | lon_deg=18 | lon_min=17
   | bg = #9999EE
 | label2=Anytown
   | pos2=right| label2_size=102
   | lat2=59.00 | long2=17.50
   | bg2=yellow
 | label3=Kiruna  | skew3=1.16
   | pos3=top | label3_size=85
   | lat3_deg=67 | lat3_min=51
   | lat3_sec=17
   | lon3_deg=20 | lon3_min=13
   | lon3_sec=22
   | bg3 = #CCCC11
   | mark3size=6 | mark3high=7
 | label4=Anytown2
   | pos4=left  | label4_size=90
   | lat4=63.00 | long4=17.50
   | bg4=lightgreen
   | mark4size=33 | mark4high=33
   | mark4=
       Circle_sheer_red_33.gif
 | float = right | width = 195}}
 -- OMIT above -->
|}

===Unskewed label of Sweden===

{| width=100%
| width=60% valign=top | '''Kiruna (Sweden)'''
 <nowiki>{{Location map
 | SwedenCIAx
 | label_size = <!-- 0-900%--> 78
 | caption = Show Kiruna in Sweden 
 | label = Kiruna
   | lat_deg=67 | lat_min=51
   | lat_sec=17
   | lon_deg=20 | lon_min=13
   | lon_sec=22
   | background = <!--blue-->#99BBEE
 | float = right
 | width = <!--show small--> 195
}}</nowiki>

| width="198" align="center" |{{Location map
 | SwedenCIAx
 | label_size = <!-- 0-900%--> 78
 | caption = Show Kiruna in Sweden 
 | label = Kiruna
   | lat_deg=67 | lat_min=51
   | lat_sec=17
   | lon_deg=20 | lon_min=13
   | lon_sec=22
   | background = <!--blue-->#99BBEE
 | float = right
 | width = <!--show small--> 195}}
|}

=== Map with 9 markers (decimal) ===

{| width=100%
| width=60% valign=top | '''Pag (Croatia)'''
 <nowiki>{{Location map skew | Croatia
 | label=Pag | position=right
      | lat=44.44 | long=15.05
 | label2=Anytown
      | pos2=bottom| label2_size=110
      | lat2=45.86 | long2=17.50
      | background2=yellow
 | label3=Anytown2
      | pos3=top  | label3_size=210
      | lat3=46.23 | long3=18.43
      | background3=green
 | mark4=Diamond_sheer_black_20.gif
      | mark4size=19 | mark4high=17
      | label4=44.0 (latitude)
      | lat4=44.00 | long4=13.5
 | mark5=Diamond_sheer_black_20.gif
      | mark5size=20 | mark5high=20
      | label5=44.5
      | lat5=44.50 | long5=13.5
 | mark6=Diamond_sheer_black_20.gif
      | mark6size=20 | mark6high=20
      | label6=45.0
      | lat6=45.00 | long6=13.5
 | mark7=Diamond_sheer_black_20.gif
      | mark7size=20 | mark7high=20
      | label7=45.5
      | lat7=45.50 | long7=13.5
 | mark8=Diamond_sheer_black_20.gif
      | mark8size=20 | mark8high=20
      | label8=46.0
      | lat8=46.00 | long8=13.5
 | mark9=Diamond_sheer_black_20.gif
      | mark9size=20 | mark9high=20
      | label9=46.5
      | lat9=46.50 | long9=13.5
 | width=260 | float=right
}}</nowiki>
| width="265" align="center" | {{Location map skew |Croatia
 | label=Pag | position=right
      | lat=44.44 | long=15.05
 | label2=Anytown
      | pos2=bottom| label2_size=110
      | lat2=45.86 | long2=17.50
      | background2=yellow
 | label3=Anytown2
      | pos3=top  | label3_size=210
      | lat3=46.23 | long3=18.43
      | background3=green
 | mark4=Diamond_solid_black_20.png
      | mark4size=19 | mark4high=17
      | label4=44.0 (latitude)
      | lat4=44.00 | long4=13.5
 | mark5=Diamond_sheer_black_20.gif
      | mark5size=20 | mark5high=20
      | label5=44.5
      | lat5=44.50 | long5=13.5
 | mark6=Diamond_sheer_black_20.gif
      | mark6size=20 | mark6high=20
      | label6=45.0
      | lat6=45.00 | long6=13.5
 | mark7=Diamond_sheer_black_20.gif
      | mark7size=20 | mark7high=20
      | label7=45.5
      | lat7=45.50 | long7=13.5
 | mark8=Diamond_sheer_black_20.gif
      | mark8size=20 | mark8high=20
      | label8=46.0
      | lat8=46.00 | long8=13.5
 | mark9=Diamond_sheer_black_20.gif
      | mark9size=20 | mark9high=20
      | label9=46.5
      | lat9=46.50 | long9=13.5
 | width=260 | float=right}}
|}

=== Map with a custom label and text background ===

{| width=100%
| width=60% valign=top | '''Imotski'''
 <nowiki>{{Location map skew | Croatia
 |label=Imotski
 |lat=43.44
 |long=17.21
 |position=right
 |width=280
 |float=right
 |background=#FFFFDD
 |caption=Imotski in Croatia
 }}</nowiki>
| width="290" align="center" | {{Location map skew | Croatia |label=Imotsky|lat=43.44|long=17.21|position=right|width=280|float=right|background=#FFFFDD|caption=Imotski in Croatia}}
|}

=== Map with no caption ===

{| width=100%
| width=60% valign=top | '''Brčko (Bosnia and Herzegovina)'''
 <nowiki>{{Location map skew
 |Bosnia
 |label=Brčko
 |position=left
 |width=150
 |lat=44.87
 |long=18.81
 |float=right
 |caption=
 }}</nowiki>
| width="300" | {{Location map|Bosnia|label=Brčko|position=left|width=150|lat=44.87|long=18.81|float=right|caption=}}
|}

=== Western Hemisphere ===

{| width=100%
| width=60% valign=top | '''Lockerbie (Scotland)'''
 <nowiki>{{Location map skew
 |Scotland
 |label=Lockerbie
 |lat= 55.120
 |long= -3.357
 |position=right
 |width=180
 |float=right
 |caption=Lockerbie in Scotland
}}</nowiki>
| width="185" align="center" | {{Location map skew | Scotland |label=Lockerbie| |lat= 55.120|long= -3.357|position=right|width=180|float=right|caption=Lockerbie in Scotland}}
|}

=== Country that crosses 180° meridian ===

{| width=100%
| width=60% valign=top | '''Uelen (Russia)'''
 <nowiki>{{Location map skew
 |Russia (equirectangular)
 |label=Uelen
 |lat_deg=66|lat_min=09
 |lon_deg=169|lon_min=48|lon_dir=W
 |position=left
 |width=500
 |float=right
 |background=#FFFFDD
 }}</nowiki>
|-
| align="left" |
{{Location map skew | Russia (equirectangular) |label=Uelen|lat_deg=66|lat_min=09|lon_deg=169|lon_min=48|lon_dir=W|position=left|width=500|float=right|background=#FFFFFF}}
|}

==Implementation notes==
The map and markers are implemented using the typical wiki parser-functions (<nowiki>"{{#XXX ... }}"</nowiki>), described at: ''[http://meta.wikimedia.org/wiki/ParserFunctions WikiMedia Help:ParserFunctions]''.

===Explanation of skewing===
The skewing of map coordinates, when placing markers/labels on the map image, is performed by a [[linear interpolation]] of the longitude relative to the height of the latitude (higher latitudes skew longitude more).  A skew factor < 1.0 squeezes longitudes together near top, while a skew factor > 1.0 spreads longitudes apart near the top.

The formula is roughly:

:::To skew by latitude ratio (skewing longitude more towards top):
:::* skew factor = ( (1 - skew) * lat_ratio + skew ), where:
:::* lat_ratio = (maxlat - latitude) / (maxlat-minlat).

===Use of HTML divisions===
The map with markers/labels is implemented as nested HTML divisions. The map-image is in an HTML division, containing each point as a percent-locator division containing a marker-image sub-division plus a label sub-division.  Each point is calculated (for a percent-locator division) with X or Y coordinate "XX.X%" or "YY.Y%" as follows:

* The div-tag is "&lt;div style="position: absolute; z-index: 2; top: XX.X%; left: YY.Y%; ...&gt;"
* For placing latitude, the calculation is:
:* XX.X% = 100 * (top - (lat_deg + latmin/60 +latsec/3600) ) / (top - bottom)
:* If lat_deg is empty, the combined decimal latitude is used from "lat".
:* If lat_dir is "S" (south), the latitude is multiplied by -1.
:* (Note latitude YY.Y% is reversed, with larger YY.Y% at bottom.)
* For placing longitude, the calculation is:
:* YY.Y% = 100 * ( (lon_deg + lonmin/60 +lonsec/3600) - left ) / (right - left)
:* If lon_deg is empty, the combined decimal longitude is used as "long".
:* If lon_dir is "W" (west), the longitude is multiplied by -1.
* The div-tag is ended as "height: 0; width: 0; margin: 0; padding: 0;"&gt;".
* Within that division the marker/label sub-divisions are coded as:
:* &lt;div style="position: relative text-align: center; ..."&gt;.
* For label position, the options are shifted as:
:* when position=left, adds "left: -6.5em; text-align: right;"
:* when position=right, adds "left: 0.5em; text-align: left;"
:* when position=top, adds "top:-2.65em; left:-3em; text-align: center;"
:* when position=bottom, adds "top:-0.15em; left: -3em; text-align: center;" to div-tag.

Accuracy of numeric calculations depends on the particular wiki server handling the webpage.

==See also==
* [[Template:Location map]] - placing one marker/label by latitude/longitude.
* [[Template:Location map many]] - placing multiple markers/labels by latitude/longitude.
* [[Template:Location map+]] - placing unlimited list of markers/labels.

<includeonly>
[[Category:Graphic templates]]
[[Category:Mapping templates]]
[[pt:Predefinição:Mapa de localização inclinado]]
[[simple:Template:Location map skew/doc]]
</includeonly>