Этот модуль Lua используется примерно на 1 260 000 страниц, или примерно на 2% всех страниц. Чтобы избежать серьезных сбоев и нагрузки на сервер, любые изменения следует тестировать на подстраницах модуля / sandbox или / testcases , или в изолированной программной среде вашего собственного модуля . Протестированные изменения могут быть добавлены на эту страницу одним редактированием. Обсудите изменения на странице обсуждения, прежде чем внедрять их. |
Этот модуль подлежит защите страницы . Это хорошо заметный модуль, который используется на очень большом количестве страниц или очень часто заменяется . Поскольку вандализм или ошибки могут повлиять на многие страницы, и даже простое редактирование может вызвать значительную нагрузку на серверы, они защищены от редактирования. |
Этот модуль отслеживает и использует свойство Викиданных : |
Этот модуль зависит от следующих других модулей: |
Этот модуль использует TemplateStyles : |
Примечание . Код, который 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 ]конецвернуть координаты