Постоянно защищенный модуль
Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Документация по модулю [ просмотреть ] [ изменить ] [ историю ] [ очистить ]

Примечание . Код, который coordвыводит основная функция этого модуля ( ), напрямую анализируется и / или обрабатывается модулем: карта расположения и другими функциями самого модуля ( coord2textи coordinsert). Если структура выходных изменений (например, использовать и тег ), пожалуйста , обновите вышеупомянутые сценарии , а также.<mapframe><maplink>

Использование модуля с координатором

При использовании шаблона {{ Coord }} внутри другого шаблона, такого как информационное окно, могут быть параметры (например ), которые должны добавляться автоматически. Для этого сделайте что-то вроде этого:type:airport

{{#if:{{{coordinates|}}}|{{#invoke:Coordinates|coordinsert|{{{coordinates|}}}|parameter1:value1|parameter2:value2|parameter3:value3…}}| 

Не добавляйте вертикальных полос |больше, чем необходимо.

Использование модуля с Coord2text для извлечения широты или долготы

Разработчикам, поддерживающим устаревший код, может потребоваться извлечь широту или долготу, чтобы использовать параметры в другом коде или математическое выражение. Функцию модуля "ordin2text "можно использовать для извлечения данных из шаблона {{ Coord }}. Чтобы извлечь широту из шаблона Coord, используйте:

{{#invoke:coordinates|coord2text|{{Coord|57|18|22|N|4|27|32|E}}|lat}} → 57.30611

Чтобы извлечь долготу, используйте:

{{#invoke:coordinates|coord2text|{{Coord|57|18|22|N|4|27|32|E}}|long}} → 4.45889

Модули, использующие этот модуль напрямую

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

- [[Этот модуль предназначен для замены функций {{Coord}} и связанныхшаблоны. Он предоставляет несколько методов, в том числе{{#invoke: Координаты | Координаты}}: Форматирование и отображение общих функций.значения координат.{{#invoke: Координаты | dec2dms}}: простая функция для преобразования десятичного числаградусы в формат DMS.{{#invoke: Координаты | dms2dec}}: Простая функция для преобразования формата DMSв десятичном формате градуса.{{#invoke: Координаты | link}}: экспорт ссылки, используемой для доступа к инструментам.]]require ( 'Модуль: без глобальных переменных' )local  math_mod  =  require ( "Модуль: математика" )местные  координаты  =  {};локальная  current_page  =  mw . название . getCurrentTitle ()локальное  имя_страницы  =  mw . uri . кодировать (  current_page . prefixedText ,  'WIKI'  );local  corre_link  =  '//geohack.toolforge.org/geohack.php?pagename='  ..  page_name  ..  '& params ='local  templatestyles  =  'Модуль: Координаты / styles.css'- [[Вспомогательная функция, замена для {{corre / display / title}}]]локальная  функция  displaytitle ( s ,  notes )local  l  =  "[[Географическая система координат | Координаты]]:"  ..  slocal  co  =  '<span id = "Coordinates">'  ..  l  ..  notes  ..  '</span>' ;return  '<span style = "font-size: small;">'  ..  co  ..  '</span>' ;конец- [[Вспомогательная функция, замена для {{corre / display / inline}}]] отображение локальной функции  inline ( s ,  notes )вернуть  с  ..  примечанияконец- [[Вспомогательная функция, используемая для определения форматирования DMS]]локальная  функция  dmsTest ( первая ,  вторая )если  тип ( первый )  ~ =  'строка'  или  тип ( второй )  ~ =  'строка',  товернуть  нольконецlocal  s  =  ( первый  ..  второй ): upper ()return  s : find ( '^ [NS] [EW] $' )  или  s : find ( '^ [EW] [NS] $' )конец- [[Функция-оболочка для захвата аргументов, см. Модуль: Аргументы для документации по этой функции. ]]локальная  функция  makeInvokeFunc ( funcName ) функция  возврата ( фрейм )local  args  =  require ( 'Модуль: аргументы' ). getArgs ( frame ,  {wrappers  =  'Шаблон: Координаты'})вернуть  координаты [ funcName ] ( аргументы ,  кадр )конецконец- [[Вспомогательная функция, обрабатывать необязательные аргументы. ]]локальная  функция  optionalArg ( аргумент ,  дополнение )вернуть  аргумент  и  аргумент  ..  дополнение  или  ''конец- [[Форматирует любые сообщения об ошибках, создаваемые для отображения]]локальная  функция  errorPrinter ( ошибки )местный  результат  =  ""для  i , v  в  ipairs ( ошибки )  делаемlocal  errorHTML  =  '<strong class = "error"> Координаты:'  ..  v [ 2 ]  ..  '</strong>'результат  =  результат  ..  errorHTML  ..  "<br />"конецвернуть  результатконец- [[Определите необходимый класс CSS для отображения координатОбычно гео-нестандартное значение скрывается с помощью CSS, если пользователь не переопределил это для себя.по умолчанию - режим, указанный пользователем при вызове шаблона {{corre}}mode - это режим отображения (dec или dms), который нам понадобится для определения класса css для]] отображение локальной функции  По умолчанию (по умолчанию ,  режим )если по  умолчанию  ==  ""  тогдапо умолчанию  =  "dec"конецесли по  умолчанию  ==  режим,  товернуть  "geo-default"ещевернуть  "geo-nondefault"конецконец- [[specPrinterФорматер вывода. Принимает структуру, сгенерированную либо parseDecили проанализируйте DMS и отформатируйте его для включения в Википедию.]]локальная  функция  specPrinter ( аргументы ,  указатель координат )local  uriComponents  =  указатель координат [ "параметр" ]если  uriComponents  ==  ""  тогда- Ошибка RETURN, никогда не должно быть пустым или нулевымreturn  "ERROR param was empty"конецесли  args [ "имя" ],  тоuriComponents  =  uriComponents  ..  "& title ="  ..  мв . uri . кодировать ( указатель координат [ "имя" ])конецlocal  geodmshtml  =  '<span class = "geo-dms" title = "Карты, аэрофотоснимки и другие данные для этого места">'..  '<span class = "latitude">'  ..  CoordSpec [ "dms-lat" ]  ..  '</span>'..  '<span class = "longitude">'  .. CoordinateSpec [ "dms-long" ]  ..  '</span>'..  '</span>'местный  лат  =  ToNumber (  coordinateSpec [ "дец-лат" ]  )  или  0местный  геодеклатесли  lat  <  0,  то- FIXME это нарушает ранее существовавшую точностьgeodeclat  =  ToString ( coordinateSpec [ "дец-лат" ]): суб ( 2 )  ..  "° С"ещеgeodeclat  =  ( coordinateSpec [ "дец-лат" ]  или  0 )  ..  "° N" ,конецlocal  long  =  tonumber (  спецификация координат [ "dec-long" ]  )  или  0местный  геодеклонгесли  long  <  0,  то- FIXME не обрабатывает юникод с минусомgeodeclong  =  ToString ( coordinateSpec [ "дец-длинный" ]): суб ( 2 )  ..  "° W"ещеgeodeclong  =  ( coordinateSpec [ "дец-длинный" ]  или  0 )  ..  "° Е"конецlocal  geodechtml  =  '<span class = "geo-dec" title = "Карты, аэрофотоснимки и другие данные для этого места">'..  геодеклат  ..  ''..  геодеклонг..  '</span>'local  geonumhtml  =  '<span class = "geo">'..  CoordinateSpec [ "dec-lat" ]  ..  '; '..  CoordinateSpec [ "dec-long" ]..  '</span>'местные  внутренние  =  '<промежуток класс = "'  ..  displayDefault ( coordinateSpec [ " по умолчанию" ],  "д.м.н."  )  ..  '">'  ..  geodmshtml  ..  '</ SPAN>'..  '<span class = "geo-multi-punct"> & # xfeff; / & # xfeff; </span> '..  '<промежуток класс = "'  ..  displayDefault ( coordinateSpec [ " по умолчанию" ],  "декабрь"  )  ..  '">' ;если  не  args [ "name" ],  тоinner  =  inner  ..  geodechtml..  '<span style = "display: none"> & # xfeff; / '  ..  geonumhtml  ..  ' </span> </span> 'ещеinner  =  inner  ..  '<span class = "vcard">'  ..  geodechtml..  '<span style = "display: none"> & # xfeff; / '  ..  geonumhtml  ..  ' </span> '..  '<span style = "display: none"> & # xfeff; (<span class = "fn org"> '..  args [ "имя" ]  ..  '</span>) </span> </span> </span>'конецвернуть  мв . getCurrentFrame (): extensionTag {  name  =  'templatestyles' ,  args  =  {  src  =  templatestyles }  } ..  '<span class = "plainlinks nourlexpansion">' ..  '['  ..  corre_link  ..  uriComponents  ..  ''  ..  inner  ..  ']' ..  '</span>'конец- [[Вспомогательная функция, преобразование десятичной дроби в градусы]]локальная  функция  convert_dec2dms_d ( координата )локальный  d  =  math_mod . _round (  координата ,  0  )  ..  "°"вернуть  д  ..  ""конец- [[Вспомогательная функция, преобразование десятичной дроби в градусы и минуты]]локальная  функция  convert_dec2dms_dm ( координата )координата  =  math_mod . _round (  координата  *  60 ,  0  );местный  m  =  координата  %  60 ;координата  =  math.floor (  ( координата  -  м )  /  60  );local  d  =  координата  %  360  .. "°"вернуть  d  ..  string.format (  "% 02d ′" ,  m  )конец- [[Вспомогательная функция, преобразование десятичной дроби в градусы, минуты и секунды]]локальная  функция  convert_dec2dms_dms ( координата )координата  =  math_mod . _round (  координата  *  60  *  60 ,  0  );local  s  =  координата  %  60координата  =  math.floor (  ( координата  -  s )  /  60  );местный  m  =  координата  %  60координата  =  math.floor (  ( координата  -  м )  /  60  );local  d  =  координата  %  360  .. "°"вернуть  d  ..  string.format (  "% 02d ′" ,  m  )  ..  string.format (  "% 02d ″" ,  s  )конец- [[Вспомогательная функция, преобразование десятичной широты или долготы вформат градусов, минут и секунд на основе указанной точности.]]локальная  функция  convert_dec2dms ( координата ,  firstPostfix ,  secondPostfix ,  точность )локальная  коорд  =  ToNumber ( координаты )местный  постфиксесли  координата  > =  0,  тоpostfix  =  firstPostfixещеpostfix  =  secondPostfixконецточность  =  точность : нижний ();если  точность  ==  "dms",  товозвратные  convert_dec2dms_d (  Math.abs (  коорд  )  )  ..  постфикс ;elseif  precision  ==  "dm"  тогдаВозвращение  convert_dec2dms_dm (  Math.abs (  коорд  )  )  ..  постфикс ;elseif  precision  ==  "d"  тогдаВозвращение  convert_dec2dms_d (  Math.abs (  коорд  )  )  ..  постфикс ;конецконец- [[Преобразование формата DMS в десятичную координату N или E]]локальная  функция  convert_dms2dec ( направление ,  градус_стр ,  минут_стр ,  секунда_стр )местные  градусов  =  ToNumber ( degrees_str )местные  минут  =  ToNumber ( minutes_str )  или  0локальные  секунды  =  tonumber ( seconds_str )  или  0местный  фактор  =  1если  direction  ==  "S"  или  direction  ==  "W",  токоэффициент  =  - 1конецместная  точность  =  0если  seconds_str,  тоточность  =  5  +  math.max (  math_mod . _precision ( seconds_str ),  0  );elseif  minutes_str  и  minutes_str  ~ =  ''  тогдаточность  =  3  +  math.max (  math_mod . _precision ( minutes_str ),  0  );ещеточность  =  math.max (  math_mod . _precision ( градусы_стр ),  0  );конецместное  десятичное число  =  коэффициент  *  ( градусы + ( минуты + секунды / 60 ) / 60 )return  string.format (  "%."  ..  precision  ..  "f" ,  decimal  )  - не число, так как все это основано на строке.конец- [[Проверяет входные значения на наличие ошибок вне допустимого диапазона.]] проверка локальной функции  ( lat_d , lat_m , lat_s , long_d , long_m , long_s , source , strong )         локальные  ошибки  =  {};lat_d  =  ToNumber (  lat_d  )  или  0 ;lat_m  =  ToNumber (  lat_m  )  или  0 ;lat_s  =  ToNumber (  lat_s  )  или  0 ;long_d  =  ToNumber (  long_d  )  или  0 ;long_m  =  ToNumber (  long_m  )  или  0 ;long_s  =  ToNumber (  long_s  )  или  0 ;если  сильный,  тоесли  lat_d  <  0,  тоtable.insert ( errors ,  { источник ,  "градусы широты <0 с флагом полушария" })конецесли  long_d  <  0,  тоtable.insert ( errors ,  { источник ,  "градусы долготы <0 с флагом полушария" })конец- [[#coordinates противоречит тому, является ли это ошибкой. Если глобус: естьуказано, это не приведет к ошибке в этом условии, но в противном случае это произойдет.Чтобы просто не отключить эту проверку.если long_d> 180, тоtable.insert (errors, {источник, "градусы долготы> 180 с флагом полушария"})конец]]конецесли  lat_d  >  90,  тоtable.insert ( errors ,  { источник ,  "градусы широты> 90" })конецесли  lat_d  <  - 90,  тоtable.insert ( errors ,  { источник ,  "градусы широты <-90" })конецесли  lat_m  > =  60,  тоtable.insert ( errors ,  { источник ,  "широта минут> = 60" })конецесли  lat_m  <  0,  тоtable.insert ( errors ,  { источник ,  "широта минут <0" })конецесли  lat_s  > =  60,  тоtable.insert ( errors ,  { источник ,  "широта секунд> = 60" })конецесли  lat_s  <  0,  тоtable.insert ( errors ,  { источник ,  "широта секунд <0" })конецесли  long_d  > =  360,  тоtable.insert ( errors ,  { источник ,  "градусы долготы> = 360" })конецесли  long_d  <=  - 360,  тоtable.insert ( errors ,  { источник ,  "долгота в градусах <= -360" })конецесли  long_m  > =  60,  тоtable.insert ( errors ,  { источник ,  "долгота минут> = 60" })конецесли  long_m  <  0,  тоtable.insert ( errors ,  { источник ,  "долгота минут <0" })конецесли  long_s  > =  60,  тоtable.insert ( errors ,  { источник ,  "долгота секунд> = 60" })конецесли  long_s  <  0,  тоtable.insert ( errors ,  { источник ,  "долгота секунд <0" })конецвозвращать  ошибки ;конец- [[parseDecПреобразует широту и долготу десятичного формата вструктура, которая будет использоваться при отображении координат]]локальная  функция  parseDec (  лат ,  длинные ,  формат  )местная  координатаSpec  =  {}локальные  ошибки  =  {}если  не  долго  тоreturn  nil ,  {{ "parseDec" ,  "Missing longitude" }}ElseIf  не  ToNumber ( долго ) ,  тоreturn  nil ,  {{ "parseDec" ,  "Долгота не может быть проанализирована как число:"  ..  long }}конецerrors  =  validate (  lat ,  nil ,  nil ,  long ,  nil ,  nil ,  'parseDec' ,  ложь  );CoordinateSpec [ "dec-lat" ]  =  lat ;CoordinateSpec [ "dec-long" ]  =  long ;местный  режим  =  координаты . defineMode (  широта ,  долгота  );coordinateSpec [ "д.м.н.-LAT" ]  =  convert_dec2dms (  лат ,  "N" ,  "S" ,  режим )  - {{коорд / dec2dms | {{{1}}} | N | S | {{коорд / Prec декабрь | {{{1}}} | {{{2}}}}}}}coordinateSpec [ "д.м.н.-длинные" ]  =  convert_dec2dms (  длинный ,  "Е" ,  "W" ,  режим )  - {{коорд / dec2dms | {{{2}}} | Е | W | {{коорд / Prec декабрь | {{{1}}} | {{{2}}}}}}}если  формат,  тоCoordinateSpec . по умолчанию  =  форматещеCoordinateSpec . по умолчанию  =  "dec"конецвернуть  спецификацию координаты ,  ошибкиконец- [[parseDMSПреобразует широту и долготу в градусы, минуты, секунды.в структуру, которая будет использоваться при отображении координат]]локальная  функция  parseDMS (  lat_d ,  lat_m ,  lat_s ,  lat_f ,  long_d ,  long_m ,  long_s ,  long_f ,  формат  )локальная  координатаSpec ,  errors ,  backward  =  {},  {}lat_f  =  lat_f : upper ();long_f  =  long_f : upper ();- Проверить, указано ли в обратном направленииесли  lat_f  ==  'E'  или  lat_f  ==  'W',  тоlat_d ,  long_d ,  lat_m ,  long_m ,  lat_s ,  long_s ,  lat_f ,  long_f ,  backward  =  long_d ,  lat_d ,  long_m ,  lat_m ,  long_s ,  lat_s ,  long_f ,  lat_f ,  true ;конецerrors  =  validate (  lat_d ,  lat_m ,  lat_s ,  long_d ,  long_m ,  long_s ,  'parseDMS' ,  истина  );если  не  long_d  тоreturn  nil ,  {{ "parseDMS" ,  "Отсутствует долгота"  }}ElseIf  не  ToNumber ( long_d ) ,  тоreturn  nil ,  {{ "parseDMS" ,  "Долгота не может быть обработана как число:"  ..  long_d  }}конецесли  не  lat_m  и  не  lat_s  и  not  long_m  и  not  long_s  и  # error  ==  0,  тоесли  math_mod . _precision (  lat_d  )  >  0  или  math_mod . _precision (  long_d  )  >  0,  тогдаесли  lat_f : upper ()  ==  'S',  тоlat_d  =  '-'  ..  lat_d ;конецесли  long_f : upper ()  ==  'W',  тоlong_d  =  '-'  ..  long_d ;конецвернуть  parseDec (  lat_d ,  long_d ,  format  );конецконецcoordinateSpec [ "д.м.н.-LAT" ]  =  lat_d .. "°" .. optionalArg ( lat_m , "'" )  ..  optionalArg ( lat_s , """ )  ..  lat_fcoordinateSpec [ "д.м.н.-длинный" ]  =  long_d .. "°" .. optionalArg ( long_m , "'" )  ..  optionalArg ( long_s , """ )  ..  long_fcoordinateSpec [ "дец-LAT" ]  =  convert_dms2dec ( lat_f ,  lat_d ,  lat_m ,  lat_s )  - {{коорд / dms2dec | {{{4}}} | {{{1}}} | 0 {{{2}} } | 0 {{{3}}}}}coordinateSpec [ "дец-длинный" ]  =  convert_dms2dec ( long_f ,  long_d ,  long_m ,  long_s )  - {{коорд / dms2dec | {{{8}}} | {{{5}}} | 0 {{{6}} } | 0 {{{7}}}}}если  формат,  тоCoordinateSpec . по умолчанию  =  форматещеCoordinateSpec . по умолчанию  =  "dms"конецвернуть  спецификацию координаты ,  ошибки ,  назадконец- [[Проверьте входные аргументы для координаты, чтобы определить тип предоставляемых данных.а затем произвести необходимую обработку.]]локальная  функция  formatTest ( аргументы )локальный  результат ,  ошибкилокальная  обратная ,  первичная  =  ложная ,  ложнаялокальная  функция  getParam ( args ,  lim )местное  ret  =  {}для  i  =  1 ,  lim  doret [ i ]  =  args [ i ]  или  ""конецвернуть  table.concat ( ret ,  '_' )конецесли  не  args [ 1 ],  то- нет логики широтывернуть  errorPrinter (  {{ "formatTest" ,  "Отсутствует широта" }}  )ElseIf  не  ToNumber ( арг [ 1 ]) ,  то- плохая логика широтыreturn  errorPrinter (  {{ "formatTest" ,  "Невозможно проанализировать широту как число:"  ..  args [ 1 ]}}  )elseif  не  args [ 4 ]  и  не  args [ 5 ]  и  не  args [ 6 ],  тогда- логика разгонарезультат ,  ошибки  =  parseDec ( арг [ 1 ],  Args [ 2 ],  арг . формат )если  не  результат  товернуть  errorPrinter ( ошибки );конец- форматирование для geohack: geohack ожидает нотацию D_N_D_E или нотацию D; D- wikiminiatlas не поддерживает нотацию D; D- Функция парсера #coordinates не поддерживает отрицательные десятичные дроби с NSWEрезультат . param  =  table.concat ({math.abs ( tonumber ( args [ 1 ])),(( tonumber ( args [ 1 ])  или  0 )  <  0 )  и  'S'  или  'N' ,math.abs ( tonumber ( args [ 2 ])),(( tonumber ( args [ 2 ])  или  0 )  <  0 )  и  'W'  или  'E' ,args [ 3 ]  или  '' },  '_' )elseif  dmsTest ( args [ 4 ],  args [ 8 ]),  затем- логика dmsрезультат ,  ошибки ,  назад  =  parseDMS ( args [ 1 ],  args [ 2 ],  args [ 3 ],  args [ 4 ],args [ 5 ],  args [ 6 ],  args [ 7 ],  args [ 8 ],  args . формат )если  args [ 10 ],  тоtable.insert ( errors ,  { 'formatTest' ,  'Дополнительные неожиданные параметры' })конецесли  не  результат  товернуть  errorPrinter ( ошибки )конецрезультат . param  =  getParam ( аргументы ,  9 )elseif  dmsTest ( args [ 3 ],  args [ 6 ]),  затем- dm logicрезультат ,  ошибки ,  назад  =  parseDMS ( args [ 1 ],  args [ 2 ],  nil ,  args [ 3 ],args [ 4 ],  args [ 5 ],  nil ,  args [ 6 ],  args [ 'формат' ])если  args [ 8 ],  тоtable.insert ( errors ,  { 'formatTest' ,  'Дополнительные неожиданные параметры' })конецесли  не  результат  товернуть  errorPrinter ( ошибки )конецрезультат . param  =  getParam ( аргументы ,  7 )elseif  dmsTest ( args [ 2 ],  args [ 4 ]),  затем- d логикарезультат ,  ошибки ,  назад  =  parseDMS ( args [ 1 ],  nil ,  nil ,  args [ 2 ],аргументы [ 3 ],  ноль ,  ноль ,  аргументы [ 4 ],  аргументы . формат )если  args [ 6 ],  тоtable.insert ( errors ,  { 'formatTest' ,  'Дополнительные неожиданные параметры' })конецесли  не  результат  товернуть  errorPrinter ( ошибки )конецрезультат . param  =  getParam ( аргументы ,  5 )еще-- Ошибкавернуть  errorPrinter ({{ "formatTest" ,  "Неизвестный формат аргумента" }})конецрезультат . имя  =  аргументы . названиеlocal  extra_param  =  { 'тусклый' ,  'глобус' ,  'масштаб' ,  'регион' ,  'источник' ,  'тип' }для  _ ,  v  в  ipairs ( extra_param )  сделатьесли  args [ v ],  тоtable.insert ( errors ,  { 'formatTest' ,  'Parameter: "'  ..  v  ..  '=" должно быть "'  ..  v  ..  ':"'  })конецконецlocal  ret  =  specPrinter ( аргументы ,  результат )если  # ошибок  >  0,  тоret  =  ret  ..  ''  ..  errorPrinter ( errors )  ..  '[[Категория: страницы с некорректными тегами координат]]'конецвозвращение в  отставке ,  назадконец- [[Создавайте категории отслеживания Викиданных.]]локальная  функция  makeWikidataCategories ( qid )местный  ретесли  мв . wikibase  и  current_page . namespace  ==  0,  тогдалокальный  объект  =  qid  и  mw . викибаза . getEntityObject ( qid )  или  mw . викибаза . getEntityObject ()если  сущность  и  сущность . претензии  и  сущность . претензии . P625  и  сущность . претензии . P625 [ 1 ],  затемlocal  snaktype  =  entity . претензии . P625 [ 1 ]. mainsnak . змеиный типесли  snaktype  ==  'значение',  тогда- координаты существуют как здесь, так и в Викиданных, и их можно сравнивать.ret  =  'Координаты в Викиданных'elseif  snaktype  ==  'somevalue'  тогдаret  =  'Координаты в Викиданных установлены на неизвестное значение'elseif  snaktype  ==  'novalue'  тогдаret  =  'Координаты в Викиданных не имеют значения'конецеще- Нам нужно либо импортировать координаты в Викиданные, либо удалить их здесь.ret  =  'Координаты не указаны в Викиданных'конецконецесли  ret  тогдаreturn  string.format ( '[[Категория:% s]]' ,  ret )ещевернуться  ''конецконец- [[ссылка на сайтПростая функция для экспорта ссылки с координатами для других целей.Применение:{{#invoke: Координаты | ссылка на сайт }}]] координаты функции . ссылка ( фрейм )вернуть  координату_ссылки ;конец- [[dec2dmsОболочка, позволяющая шаблонам напрямую вызывать dec2dms.Применение:{{#invoke: Координаты | dec2dms | десятичная_координата | положительный_суффикс |негативный_суффикс | точность }}десятичная_координата преобразуется в формат DMS. Если положительный, положительный_суффиксдобавляется (обычно N или E), если отрицательное, добавляется отрицательный суффикс. Вуказанная точность - одна из 'D', 'DM' или 'DMS', чтобы указать уровень детализациииспользовать.]]координаты . dec2dms  =  makeInvokeFunc ( '_dec2dms' ) координаты функции . _dec2dms ( аргументы )локальная  координата  =  args [ 1 ]local  firstPostfix  =  args [ 2 ]  или  ""local  secondPostfix  =  args [ 3 ]  или  ""местная  точность  =  args [ 4 ]  или  ""return  convert_dec2dms ( координата ,  firstPostfix ,  secondPostfix ,  точность )конец- [[Вспомогательная функция для определения, использовать ли D, DM или DMSформат в зависимости от точности десятичного ввода.]] координаты функции . determineMode (  значение1 ,  значение2  )локальная  точность  =  math.max (  math_mod . _precision (  значение1  ),  math_mod . _precision (  значение2  )  );если  точность  <=  0,  товернуть  'd'elseif  precision  <=  2  тогдаreturn  'dm' ;ещевернуть  'dms' ;конецконец- [[dms2decОболочка, позволяющая шаблонам напрямую вызывать dms2dec.Применение:{{#invoke: Координаты | dms2dec | direction_flag | градусы |минут | секунд}}Преобразует значения DMS, указанные как градусы, минуты, секунды в десятичный формат.direction_flag является одним из N, S, E, W и определяет, является ли выводположительный (то есть N и E) или отрицательный (то есть S и W).]]координаты . dms2dec  =  makeInvokeFunc ( '_dms2dec' ) координаты функции . _dms2dec ( аргументы )местное  направление  =  args [ 1 ]местные  градусы  =  args [ 2 ]местные  минуты  =  аргументы [ 3 ]локальные  секунды  =  аргументы [ 4 ]return  convert_dms2dec ( направление ,  градусы ,  минуты ,  секунды )конец- [[согласовыватьОсновная точка входа для функции Lua для замены {{corre}}Применение:{{#invoke: Координаты | координаты}}{{#invoke: Координаты | Координатор | лат | длинный }}{{#invoke: Координаты | Координатор | лат | lat_flag | длинный | long_flag}}...См. Страницу документации {{corre}} для получения информации о многих дополнительных параметрах иварианты конфигурации.Примечание. Эта функция обеспечивает визуальные элементы отображения {{координаты}}. Вчтобы загрузить координаты в базу данных, парсер {{#coordinates:}}функция также должна быть вызвана, это делается автоматически в Luaверсия {{corre}}.]]координаты . коорд  =  makeInvokeFunc ( '_coord' ) координаты функции . _coord ( аргументы )если  не  ToNumber ( Args [ 1 ]) ,  а  не  арг [ 2 ] ,  тоargs [ 3 ]  =  args [ 1 ];  args [ 1 ]  =  нольлокальный  объект  =  mw . викибаза . getEntityObject ( арг . QID )если  сущностьи  сущность . претензиии  сущность . претензии . P625и  сущность . претензии . P625 [ 1 ]. mainsnak . snaktype  ==  'значение'тогдаместная  точность  =  объект . претензии . P625 [ 1 ]. mainsnak . значение данных . значение . точностьargs [ 1 ]  =  объект . претензии . P625 [ 1 ]. mainsnak . значение данных . значение . широтаargs [ 2 ]  =  объект . претензии . P625 [ 1 ]. mainsnak . значение данных . значение . долготаесли  точность,  тоточность  =  - math_mod . _round ( math.log ( точность ) / math.log ( 10 ), 0 )args [ 1 ]  =  math_mod . _round ( аргументы [ 1 ], точность )args [ 2 ]  =  math_mod . _round ( аргументы [ 2 ], точность )конецконецконецлокальное  содержимое ,  назад  =  formatTest ( args )локальные  заметки  =  args . заметки  или  ''локальный  Display  =  args . дисплей  и  аргументы . дисплей : нижний ()  или  'встроенный'локальная  функция  isInline ( s )- Проверяет, отображаются ли координаты встроенными.return  s : find ( 'inline' )  ~ =  nil  или  s  ==  'i'  или  s  ==  'it'  или  s  ==  'ti'конецлокальная  функция  isInTitle ( s )- Проверяет, отображаются ли координаты в заголовке.return  s : find ( 'title' )  ~ =  nil  или  s  ==  't'  или  s  ==  'it'  или  s  ==  'ti'конецлокальная  функция  corre_wrapper ( in_args )- Вызывает функцию синтаксического анализатора {{#coordinates:}}.вернуть  мв . getCurrentFrame (): callParserFunction ( '#coordinates' ,  in_args )  или  ''конецместный  текст  =  ''если  isInline ( Display ),  тотекст  =  текст  ..  displayinline ( содержание ,  примечания )конецесли  isInTitle ( Display ),  тотекст  =  текст..  displaytitle ( содержание ,  примечания )..  makeWikidataCategories ( арг . QID )конецесли  не  аргументы . nosave  тогдалокальный  page_title ,  count  =  mw . название . getCurrentTitle (),  1если  назад,  томестный  tmp  =  {}пока  не  string.find (( args [ count - 1 ]  или  '' ),  '[EW]' )  do  tmp [ count ]  =  ( args [ count ]  или  '' );  count  =  count + 1  конецtmp . count  =  count ;  count  =  2 * ( count - 1 )пока  count  > =  tmp . счет  сделать  table.insert ( tmp ,  1 ,  ( args [ count ]  или  '' ));  count  =  count - 1  конецдля  i ,  v  в  ipairs ( tmp )  do  args [ i ]  =  v  endещепока  count  <=  9  do  args [ count ]  =  ( args [ count ]  или  '' );  count  =  count + 1  конецконецесли  isInTitle ( Display ),  а  не  page_title . isTalkPage  и  page_title . subpageText  ~ =  'doc'  и  page_title . subpageText  ~ =  'testcases',  затем  args [ 10 ]  =  'primary'  endаргументы . примечания ,  аргументы . формат ,  аргументы . display  =  niltext  =  text  ..  Coordin_wrapper ( args )конец текст возвратаконец- [[Coord2textИзвлекает одно значение из включения {{Coord}}.ЕСЛИ СИНТАКСИС GEOHACK LINK ИЗМЕНИЛСЯ, ДАННАЯ ФУНКЦИЯ ДОЛЖНА БЫТЬ ИЗМЕНЕНА.Применение: {{#invoke: Координаты | corre2text | {{Coord}} | параметр}}Допустимые значения для второго параметра: lat (целое число со знаком), long (целое число со знаком), тип, масштаб, тусклость, регион, глобус, источник.]] координаты функции . corre2text ( фрейм )если  рамка . args [ 1 ]  ==  ''  или  фрейм . args [ 2 ]  ==  ''  или  нет  кадра . args [ 2 ],  затем  вернуть  nil  endрамка . args [ 2 ]  =  mw . текст . обрезать ( frame . args [ 2 ])если  рамка . args [ 2 ]  ==  'широта'  или  фрейм . args [ 2 ]  ==  'long',  тогдаместный  результат ,  отрицательный  =  mw . текст . split (( mw . ustring . match ( frame . args [ 1 ], '[%.% d] + ° [NS] [%.% d] + ° [EW]' )  или  »' ),  ' ' )если  рамка . args [ 2 ]  ==  'lat',  затемрезультат ,  отрицательный  =  результат [ 1 ],  'S'ещерезультат ,  отрицательный  =  результат [ 2 ],  'W'конецрезультат  =  mw . текст . split ( результат ,  '°' )если  результат [ 2 ]  ==  отрицательный,  то  результат [ 1 ]  =  '-' .. результат [ 1 ]  конецвернуть  результат [ 1 ]ещевернуть  мв . ustring . match ( frame . args [ 1 ],  'params =.-_' .. frame . args [ 2 ] .. ': (.-) [_]' )конецконец- [[КоординаторВставляет некоторый текст в ссылку Geohack включения {{Coord}} (если этого текста еще нет в включении). Выводит измененное включение {{Coord}}.ЕСЛИ СИНТАКСИС GEOHACK LINK ИЗМЕНИЛСЯ, ДАННАЯ ФУНКЦИЯ ДОЛЖНА БЫТЬ ИЗМЕНЕНА.Применение: {{#invoke: Координаты | координатор | {{Coord}} | параметр: значение | параметр: значение | …}}Не огорчайте Geohack, вставляя что-то, что не упоминается в документации {{Coord}}.]] координаты функции . Координатор ( фрейм )для  i ,  v  в  ipairs ( frame . args )  делаемесли  i  ~ =  1,  тоесли  не  мв . ustring . find ( frame . args [ 1 ],  ( mw . ustring . match ( frame . args [ i ],  '^ (.- :)' )  или  '' )),  затемрамка . args [ 1 ]  =  mw . ustring . gsub ( frame . args [ 1 ],  '(params = .-) _?' ,  '% 1_' .. frame . args [ i ] .. '' )конецконецконецесли  рамка . аргументы . назови  тогдаесли  не  мв . ustring . find ( frame . args [ 1 ],  '<span class = "vcard">' ),  затемлокальное  имяstr  =  frame . аргументы . названиерамка . args [ 1 ]  =  mw . ustring . gsub ( frame . args [ 1 ],'(<span class = "geo% -default">) (<span [^ <>] *> [^ <>] * </span> <span [^ <>] *> [^ <>] * < span [^ <>] *> [^ <>] * </span> </span>) (</span>) ' ,'% 1 <span class = "vcard">% 2 <span style = "display: none"> & # xfeff; (<span class = "fn org"> '  ..  namestr  ..  ' </span>) </span> </span>% 3 ' )рамка . args [ 1 ]  =  mw . ustring . gsub ( frame . args [ 1 ],  '(& params = [^ & "<>% [%]] *)' ,  '% 1 & title ='  ..  mw . uri . encode ( namestr )  ..  '' )конецконецвозвратный  фрейм . аргументы [ 1 ]конецвернуть  координаты