Модуль: Карта проезда


Документация по модулю [ просмотреть ] [ изменить ] [ историю ] [ очистить ]

Применение

Этот модуль реализует шаблоны {{ Location map }} и {{ Location map ~ }}. Пожалуйста, ознакомьтесь с инструкциями по использованию на страницах шаблонов.

Известные проблемы

С момента появления поддержки разных заголовков при использовании нескольких карт проблема была выделена.
Некоторые шаблоны инфобоксов используют свой параметр заголовка напрямую, вместо того, чтобы передавать его этому модулю. Это приводит к отображению символа «##» между двумя заголовками.
Если вы не можете редактировать шаблон информационного окна, свяжитесь с Bellezzasolo .

Категории отслеживания / обслуживания

  • Категория: Карты локаций с возможными ошибками
    • Категория: Карты расположения с разной точностью долготы и широты  (0)
    • Категория: Карты местоположения с отметками за пределами карты и параметр за пределами карты не установлен  (274)
    • Категория: Расположение карты с именем , содержащим трубу  (0)
    • Категория: Расположение карты с удаленными параметрами  (0)
    • Категория: Карты местоположения с отрицательными градусами и минутами или секундами  (1)
  • Отслеживание изменений (см. Обсуждение): Категория: Страницы, использующие карту местоположения со знаком двойного числа в заголовке  (0)

Смотрите также

  • Все модули: страницы, начинающиеся с "Карта расположения"
  • Модуль: Карта проезда / информация
  • Модуль: Карта проезда / мульти

require ( 'Модуль: без глобальных переменных' )местный  p  =  {}local  getArgs  =  require ( 'Модуль: аргументы' ). getArgsлокальная  функция  round ( n ,  десятичные знаки )local  pow  =  10 ^ ( десятичные дроби  или  0 )return  math.floor ( n  *  pow  +  0.5 )  /  powконецфункция  p . getMapParams ( карта ,  фрейм )если  не  карта,  тоerror ( 'Необходимо указать имя используемого определения карты местоположения' ,  2 )конецместный  moduletitle  =  mw . название . new ( 'Module: Location map / data /'  ..  map )если  не название  модуля,  тоerror ( string.format ( '% q не является допустимым именем для определения карты местоположения' ,  карта ),  2 )elseif  moduletitle . существует  тогдалокальные  mapData  =  mw . loadData ( 'Модуль: Карта расположения / данные /'  ..  карта ) функция возврата ( имя ,  параметры )если  name  ==  nil,  тоreturn  'Module: Location map / data /'  ..  mapelseif  mapData [ name ]  ==  nil  тогдавернуться  ''elseif  params  тогдавернуть  мв . сообщение . newRawMessage ( tostring ( mapData [ имя ]),  распаковать ( параметры )): plain ()ещевернуть  mapData [ имя ]конецконецещеerror ( 'Невозможно найти указанное определение карты местоположения: "Модуль: Location map / data /'  ..  map  ..  '" не существует' ,  2 )конецконецфункция  p . данные ( фрейм ,  аргументы ,  карта )если  не  аргументы,  тоargs  =  getArgs ( кадр ,  { frameOnly  =  true })конецесли  не  карта,  токарта  =  стр . getMapParams ( аргументы [ 1 ],  кадр )конецместные  параметры  =  {}для  k , v  в  ipairs ( args )  делаемесли  k  >  2,  тоparams [ k - 2 ]  =  vконецконецвернуть  карту ( args [ 2 ],  # params  ~ =  0  и  params )конецlocal  hemisphereMultipliers  =  {долгота  =  {  W  =  - 1 ,  w  =  - 1 ,  E  =  1 ,  e  =  1  },широта  =  {  S  =  - 1 ,  s  =  - 1 ,  N  =  1 ,  n  =  1  }}местная  функция  decdeg ( градусы ,  минуты ,  секунды ,  полушарие ,  десятичная дробь ,  направление )если  десятичный,  тоесли  градусы,  тоerror ( 'Десятичные градусы и градусы DMS не могут быть указаны для'  ..  направления ,  2 )иначе если  минут  тогдаerror ( 'Минуты могут быть предоставлены только с градусами DMS для'  ..  направления ,  2 )иначе, если  секунды,  тоerror ( 'Секунды могут быть предоставлены только с градусами DMS для'  ..  направления ,  2 )ElseIf  полушарие ,  тоerror ( 'Полушарие можно указать только градусы DMS для'  ..  направления ,  2 )конецлокальная  RetVal  =  ToNumber ( десятичное )если  retval  товернуть  retvalконецerror ( 'Недействительное значение "  ..  десятичное  ..  " для "  ..  direction  ..  " ,  2 )иначе, если  секунды,  а  не  минуты,  тогдаerror ( 'Были указаны секунды для'  ..  direction  ..  'без указания минут' ,  2 )иначе, если  не  градусы,  тоесли  минуты  тоerror ( 'Минуты были предоставлены для'  ..  direction  ..  'без указания градусов' ,  2 )ElseIf  полушарие ,  тоerror ( 'Полусфера была предоставлена ​​для'  ..  direction  ..  'без указания градусов' ,  2 )конецвернуть  нольконецдесятичный  =  ToNumber ( градусы )если  не  десятичный,  тоerror ( 'Значение в  градусах " ..  градусов  ..  ", указанное для'  ..  direction  ..  ', недействительно' ,  2 )ElseIf  минут  и  не  ToNumber ( минут ) ,  тоerror ( 'Минутное значение "  ..  минут  ..  " указано для'  ..  direction  ..  'недействительно' ,  2 )ElseIf  секунд  и  не  ToNumber ( секунды ) ,  тоerror ( 'Второе значение "  ..  секунды  ..  '" указано для '  ..  direction  ..  ' недействительно ' ,  2 )конецдесятичный  =  десятичный  +  ( минуты  или  0 ) / 60  +  ( секунды  или  0 ) / 3600если  полушарие  толокальный  множитель  =  полушариеМножители [ направление ] [ полушарие ]если  не  множитель,  тоerror ( 'Полушарие "'  ..  полушарие  ..  '" указано для'  ..  direction  ..  'недопустимо' ,  2 )конецдесятичный  =  десятичный  *  множительконецвернуть  десятичную дробьконец- Находит параметр в включении {{Coord}}.локальная  функция  Coord2text ( пара , координата )  - это следует изменить для языков, в которых не используются арабские цифры или знак градусаместный  лат ,  долгий  =  mw . ustring . match ( координаты , ' ([^ <] +)   ([^ <] +)  ' )если  шир,  товозвращение  ToNumber ( пункт  ==  «долгота»  и  длинные  или  широты )конецлокальный  результат  =  mw . текст . split ( mw . ustring . match ( ordin , '% -? [%.% d] + ° [NS]% -? [%.% d] + ° [EW]' ) »  или  '' ,  '[°]' )если  para  ==  'longitude',  то  результат  =  { результат [ 3 ],  результат [ 4 ]}  конецесли  не  ToNumber ( результат [ 1 ]) ,  или  не  привести к [ 2 ] ,  томв . log ( 'Неверное значение координат' )мв . logObject ( пара ,  'пара' )мв . logObject ( коорд ,  'коорд' )return  error ( 'Неверное значение координат' ,  2 )конецreturn  tonumber ( result [ 1 ])  *  hemisphereMultipliers [ para ] [ result [ 2 ]]конец- эффективно сделать removeBlanks ложным для подписи и ссылки на карту и истинным для всего остального- если useWikidata присутствует, но пусто, преобразовать ее в false вместо nil- p.top, p.bottom и их абоненты должны использовать этофункция  p . valueFunc ( ключ ,  значение )если  значение,  тозначение  =  mw . текст . обрезать ( значение )конецесли  значение  ~ =  ''  или  key  ==  'caption'  или  key  ==  'maplink',  тогдавозвращаемое  значениеelseif  key  ==  'useWikidata'  тогдавернуть  ложьконецконецлокальная  функция  getContainerImage ( аргументы ,  карта )если  аргументы . Альтернативная карта  тогдавернуть  аргументы . Альтернативная картаelseif  args . рельеф  и  карта ( 'image1' )  ~ =  '',  затемвернуть  карту ( 'image1' )ещевернуть  карту ( 'изображение' )конецконецфункция  p . верх ( фрейм ,  аргументы ,  карта )если  не  аргументы,  тоargs  =  getArgs ( кадр ,  { frameOnly  =  true ,  valueFunc  =  p . valueFunc })конецесли  не  карта,  токарта  =  стр . getMapParams ( аргументы [ 1 ],  кадр )конецместная  ширинаlocal  default_as_number  =  tonumber ( mw . ustring . match ( tostring ( args . default_width ), "% d *" ))если  не  аргументы . ширина  тогдаwidth  =  round (( default_as_number  или  240 )  *  ( tonumber ( map ( 'defaultscale' ))  или  1 ))elseif  mw . ustring . sub ( args . width ,  - 2 )  ==  'px',  затемширина  =  mw . ustring . sub ( args . width ,  1 ,  - 3 )ещеширина  =  аргументы . ширинаконецлокальная  width_as_number  =  ToNumber ( MW . ustring . соответствует ( ToString ( ширина ), "% д *" )) ,  или  0 ; если  width_as_number  ==  0,  тогда - проверьте, не является ли ширина ненужной. Если да, то используйте расчет по умолчанию. width  =  round (( default_as_number  или  240 )  *  ( tonumber ( map ( 'defaultscale' ))  или  1 )) width_as_number  =  ToNumber ( MW . ustring . матч ( ToString ( ширина ), "% д *" )) ,  или  0 ; конец если  аргументы . max_width  ~ =  ""  и  аргументы . max_width  ~ =  nil,  тогда - проверьте, не превышает ли ширина max_width local  max_as_number  =  tonumber ( mw . ustring . match ( args . max_width , "% d *" ))  или  0 ; если  width_as_number > max_as_number  и  max_as_number > 0,  тогда ширина  =  аргументы . max_width ; конец конецlocal  retval  =  frame : extensionTag { name  =  'templatestyles' ,  args  =  { src  =  'Module: Location map / styles.css' }}если  аргументы . float  ==  'center',  затемretval  =  retval  ..  '
'
конецесли аргументы . заголовок и аргументы . caption ~ = '' и args . border ~ = 'infobox', затемretval = retval .. '
если аргументы . float == '"left"' или аргументы . float == 'left', затем
retval = retval .. 'tleft'elseif args . float == '"center"' или args . float == 'center' или args . float == '"none"' или args . float == 'none', тогдаretval = retval .. 'tnone'ещеretval = retval .. 'tright'конецretval = retval .. '">
..
( width + 2 ) .. 'px'
если аргументы . border == 'none', тогдаretval = retval .. '; border: none'elseif args . граница тогдаretval = retval .. '; цвет границы:' .. args . границаконецretval = retval .. '">
..
width .. 'px' .. ( args . border ~ = 'none' and '; border: 1px solid lightgray ">' или '">' )
ещеretval = retval .. '
..
width .. 'px;'
если аргументы . float == '"left"' или аргументы . float == 'left', затемretval = retval .. 'float: left; clear: left'elseif args . float == '"center"' или args . float == 'center', затемretval = retval .. 'float: none; clear: both; margin-left: auto; margin-right: auto'elseif args . float == '"none"' или args . float == 'none', тогдаretval = retval .. 'float: none; clear: none'ещеretval = retval .. 'float: right; clear: right'конецretval = retval .. '">
..
width .. 'px; padding: 0 ">
..
width .. 'px "> '
конецлокальное изображение = getContainerImage ( аргументы , карта )локальный currentTitle = mw . название . getCurrentTitle ()retval = string.format ('% s [[Файл:% s |% spx |% s% s]]' ,ретвал ,изображение ,ширина ,аргументы . alt или (( args . label или currentTitle . text ) .. 'находится в' .. map ( 'name' )),аргументы . maplink и ( '| link =' .. args . maplink ) или '')если аргументы . заголовок и аргументы . caption ~ = '', затемесли ( currentTitle . namespace == 0 ) и mw . ustring . find ( args . caption , '##' ), затемretval = retval .. '[[Категория: страницы, использующие карту местоположений со знаком двойного числа в заголовке]]'конецконецесли аргументы . overlay_image тогдаreturn retval .. '
[[File:'
.. args . overlay_image .. '|' .. ширина .. 'px]]
' еще вернуть retval конецконецфункция p . снизу ( рамка , аргументы , карта ) если не аргументы, то args = getArgs ( кадр , { frameOnly = true , valueFunc = p . valueFunc }) конец если не карта, то карта = стр . getMapParams ( аргументы [ 1 ], кадр ) конец местный retval = '
' локальный currentTitle = mw . название . getCurrentTitle () если не аргументы . заголовок или аргументы . border == 'infobox', затем если аргументы . граница тогда retval = retval .. '
'
еще retval = retval .. '
'
конец retval = retval .. ( args . caption или ( args . label или currentTitle . text ) .. '(' .. map ( 'name' ) .. ')' ) .. '
' elseif args . caption ~ = '', затем - Это не трюк с трубкой. Мы специально создаем ссылку без текста, чтобы CSS мог дать нам красивое изображение. retval = retval .. '
[[: File:'
.. getContainerImage ( args , map ) .. '| ]]
' .. args . подпись .. '