Module:User:Justinrleung/dial-map-2
Jump to navigation
Jump to search
- This module lacks a documentation subpage. You may create it.
- Useful links: root page • root page’s subpages • links • transclusions • testcases • user page • user talk page • userspace
This is a private module sandbox of Justinrleung, for his own experimentation. Items in this module may be added and removed at Justinrleung's discretion; do not rely on this module's stability.
local export = {}
local coord_data = { --lat, long; from Wikipedia (via GeoHack)
["Beijing"] = { 39.916667, 116.383333, "北京", "Mandarin" },
["Taiwan"] = { 25.033333, 121.633333, "臺灣", "Mandarin" }, --Taipei
["Tianjin"] = { 39.133333, 117.183333, "天津", "Mandarin" },
["Harbin"] = { 45.75, 126.633333, "哈爾濱", "Mandarin" },
["Shenyang"] = { 41.8, 123.4, "沈陽", "Mandarin" },
["Jinan"] = { 36.666667, 116.983333, "濟南", "Mandarin" },
["Muping"] = { 37.3833, 121.6, "牟平", "Mandarin" },
["Luoyang"] = { 34.669722, 112.442222, "洛陽", "Mandarin" },
["Wanrong"] = { 35.41895, 110.82805, "萬榮", "Mandarin" }, --萬榮縣東 (Jiedian)
["Ronghe"] = { 35.35607, 110.54706, "榮河", "Mandarin" }, --萬榮縣西
["Xi'an"] = { 34.266667, 108.9, "西安", "Mandarin" },
["Qingdao"] = { 36.066667, 120.383333, "青島", "Mandarin" },
["Zhengzhou"] = { 34.766667, 113.65, "鄭州", "Mandarin" },
["Xining"] = { 36.633333, 101.766667, "西寧", "Mandarin" },
["Xuzhou"] = { 34.26, 117.21, "徐州", "Mandarin" },
["Yinchuan"] = { 38.466667, 106.266667, "銀川", "Mandarin" },
["Lanzhou"] = { 36.033333, 103.8, "蘭州", "Mandarin" },
["Ürümqi"] = { 43.825, 87.6, "烏魯木齊", "Mandarin" },
["Wuhan"] = { 30.583333, 114.283333, "武漢", "Mandarin" },
["Huanggang"] = { 30.45, 114.8, "黃岡", "Mandarin" },
["Chengdu"] = { 30.658611, 104.064722, "成都", "Mandarin" },
["Guiyang"] = { 26.65, 106.633333, "貴陽", "Mandarin" },
["Liuzhou"] = { 24.316667, 109.383333, "柳州", "Mandarin" },
["Kunming"] = { 25.066667, 102.683333, "昆明", "Mandarin" },
["Yangzhou"] = { 32.4, 119.416667, "揚州", "Mandarin" },
["Nanjing"] = { 32.05, 118.766667, "南京", "Mandarin" },
["Hefei"] = { 31.866667, 117.283333, "合肥", "Mandarin" },
["Nantong"] = { 31.983333, 120.9, "南通", "Mandarin" },
["Malaysia-M"] = { 3.133333, 101.683333, "馬來西亞", "Mandarin" }, --Kuala Lumpur
["Singapore-M"] = { 1.3, 103.8, "新加坡", "Mandarin" },
["Guangzhou"] = { 23.133333, 113.266667, "廣州", "Cantonese" },
["Hong Kong"] = { 22.3, 114.2, "香港", "Cantonese" },
["Shunde"] = { 22.836389, 113.2525, "順德", "Cantonese" },
["Zhongshan"] = { 22.533333, 113.35, "中山", "Cantonese" },
["Dongguan"] = { 23.033333, 113.716667, "東莞", "Cantonese" },
["Taishan"] = { 22.25, 112.783333, "台山", "Cantonese" },
["Doumen"] = { 22.214444, 113.259167, "斗門", "Cantonese" },
["Kaiping"] = { 22.366667, 112.683333, "開平", "Cantonese" },
["Shaoguan"] = { 24.816667, 113.6, "韶關", "Cantonese" },
["Yunfu"] = { 22.933333, 112.033333, "雲浮", "Cantonese" },
["Yangjiang"] = { 21.85, 111.966667, "陽江", "Cantonese" },
["Xinyi"] = { 22.35, 110.95, "信宜", "Cantonese" },
["Lianjiang"] = { 21.733333, 110.283333, "連江", "Cantonese" },
["Nanning"] = { 22.816667, 108.316667, "南寧", "Cantonese" },
["Nanchang"] = { 28.683333, 115.883333, "南昌", "Cantonese" },
["Lichuan"] = { 27.26, 116.958056, "黎川", "Cantonese" },
["Pingxiang"] = { 27.633333, 113.85, "萍鄉", "Cantonese" },
["Meixian"] = { 24.321389, 116.119444, "梅縣", "Hakka" },
["Xingning"] = { 24.134722, 115.73, "興寧", "Hakka" },
["Huidong"] = { 23.033333, 114.933333, "惠東", "Hakka" },
["Qujiang"] = { 24.689167, 113.578889, "曲江", "Hakka" },
["Xiaosanjiang"]= { 24.28357, 112.13284, "小三江", "Hakka" },
["Changting"] = { 25.683333, 116.333333, "長汀", "Hakka" },
["Pingyu"] = { 25.00262, 115.94047, "坪畬", "Hakka" }, --Minzhu, Wuping
["Wuping"] = { 25.133333, 116.083333, "武平", "Hakka" },
["Liancheng"] = { 25.566667, 116.783333, "連城", "Hakka" },
["Ninghua"] = { 26.233333, 116.6, "寧化", "Hakka" },
["Yudu"] = { 25.9575, 115.486944, "雩都", "Hakka" },
["Ruijin"] = { 25.8, 116, "瑞金", "Hakka" },
["Shicheng"] = { 26.3292, 116.335, "石城", "Hakka" },
["Shangyou"] = { 25.961667, 114.353611, "上猶", "Hakka" },
["Taoyuan"] = { 24.991278, 121.314328, "桃園", "Hakka" },
["Miaoli"] = { 24.563414, 120.825828, "苗栗", "Hakka" },
["Liudui"] = { 22.65, 120.5875, "六堆", "Hakka" }, --Neipu
["Hsinchu"] = { 24.833333, 121.014722, "新竹", "Hakka" },
["Dongshi"] = { 24.258694, 120.828167, "東勢", "Hakka" },
["Raoping"] = { 24.322222, 120.844722, "饒平", "Hakka" },
["Yunlin"] = { 23.70489, 120.47607, "雲林", "Hakka" },
["Shexian"] = { 29.87, 118.42, "歙縣", "Hui" },
["Tunxi"] = { 29.716667, 118.333333, "屯溪", "Hui" },
["Jixi"] = { 30.071111, 118.592222, "績溪", "Hui" },
["Taiyuan"] = { 37.869444, 112.560278, "太原", "Jin" },
["Pingyao"] = { 37.2, 112.15, "平遙", "Jin" },
["Hohhot"] = { 40.816667, 111.65, "呼和浩特", "Jin" },
["Xinzhou"] = { 38.416667, 112.733333, "忻州", "Jin" },
["Jian'ou"] = { 27.033333, 118.316667, "建甌", "Min Bei" },
["Fuzhou"] = { 26.076111, 119.306389, "福州", "Min Dong" },
["Fuqing"] = { 25.716667, 119.383333, "福清", "Min Dong" },
["Xiamen"] = { 24.479836, 118.089419, "廈門", "Min Nan" },
["Quanzhou"] = { 24.916667, 118.583333, "泉州", "Min Nan" },
["Zhangzhou"] = { 24.516667, 117.65, "漳州", "Min Nan" },
["Taipei"] = { 25.059722, 121.514167, "臺北", "Min Nan" }, --Datong
["Kaohsiung"] = { 22.633333, 120.266667, "高雄", "Min Nan" },
["Tainan"] = { 22.983333, 120.183333, "臺南", "Min Nan" },
["Taichung"] = { 24.15, 120.666667, "臺中", "Min Nan" },
["Yilan"] = { 24.750556, 121.759167, "宜蘭", "Min Nan" },
["Lukang"] = { 24.05, 120.433333, "鹿港", "Min Nan" },
["Sanxia"] = { 24.933333, 121.366667, "三峽", "Min Nan" },
["Kinmen"] = { 24.44, 118.33, "金門", "Min Nan" },
["Magong"] = { 23.566667, 119.583333, "馬公", "Min Nan" },
["Hsinchu-MN"] = { 24.816667, 120.983333, "新竹", "Min Nan" },
["Malaysia-MN"] = { 5.4, 100.233333, "馬來西亞﹣檳城", "Min Nan" }, --Penang
["Singapore-MN"] = { 1.3, 103.8, "新加坡", "Min Nan" },
["Philippine-MN"] = { 14.58, 121, "菲律賓﹣馬尼拉", "Min Nan" }, --Manila
["Chaozhou"] = { 23.67, 116.63, "潮州", "Min Nan" },
["Shantou"] = { 23.35, 116.666667, "汕頭", "Min Nan" },
["Thailand-MN-T"] = { 13.75, 100.466667, "泰國﹣曼谷", "Min Nan" }, --Bangkok
["Haikou"] = { 20.042778, 110.341667, "海口", "Min Nan" },
["Leizhou"] = { 20.916667, 110.1, "雷州", "Min Nan" },
["Nanning-P"] = { 22.816667, 108.316667, "南寧", "Pinghua" },
["Shanghai"] = { 31.228611, 121.474722, "上海", "Wu" },
["Suzhou"] = { 31.3, 120.6, "蘇州", "Wu" },
["Hangzhou"] = { 30.25, 120.166667, "杭州", "Wu" },
["Wenzhou"] = { 28, 120.7, "溫州", "Wu" },
["Chongming"] = { 31.666667, 121.5, "崇明", "Wu" },
["Danyang"] = { 32, 119.586, "丹陽", "Wu" },
["Jinhua"] = { 29.083333, 119.65, "金華", "Wu" },
["Tangxi"] = { 29.05, 119.39, "湯溪", "Wu" },
["Ningbo"] = { 29.866667, 121.55, "寧波", "Wu" },
["Changsha"] = { 28.196111, 112.972222, "長沙", "Xiang" },
["Shuangfeng"] = { 27.452, 112.202, "雙峰", "Xiang" },
["Xiangtan"] = { 27.85, 112.9, "湘潭", "Xiang" },
["Loudi"] = { 27.733333, 112, "婁底", "Xiang" },
}
local dots = {
"008a37", "6c00bb", "00c02c", "010ca9", "b9ff5b",
"c700be", "02c860", "8a64ff", "ffcb29", "0153cb",
"ffff7d", "740088", "6bffa0", "440061", "bfa500",
"f489ff", "2b5000", "ff5ec9", "23fffd", "ff1d67",
"93ffde", "e60064", "019e85", "ff4990", "004f1d",
"ffa1f8", "002607", "ff71ba", "005046", "a60075",
"ecfffa", "1f003b", "ffd39a", "001a5b", "ae6e00",
"7fa4ff", "830e00", "0163a6", "a70024", "dcd3ff",
"03001a", "ffc3b6", "270016", "ff9587", "004664",
"940048", "2f2b00", "570023", "604500", "531c00"
}
function export.make_map(frame)
local syn_data = require("Module:zh/data/dial-syn/" .. frame.args[1]).list
local map = [=[
<div class="thumb tnone" style="margin-left: auto; margin-right:auto; width:800px; max-width:1808px;">
<div class="thumbinner"><div class="overflowbugx" style="height:600px;width:800px;overflow:auto;">
<div style="position:relative;top:0;left:0">
<div style="position:relative;top:0;left:0;line-height:0">[[File:Chinese dialectal variation location map.svg|1200px|link=]]</div>
]=]
local prelim_data, data, points, legend = {}, {}, {}, {}
local num = 1
for location, synonym_set in pairs(syn_data) do
if coord_data[location] and synonym_set[1] ~= "" then
for _, term in ipairs(synonym_set) do
if prelim_data[term] then
prelim_data[term].count = prelim_data[term].count + 1
table.insert(prelim_data[term].locations, location)
else
prelim_data[term] = { count = 1, locations = { location } }
end
end
end
end
for term, term_data in pairs(prelim_data) do
table.insert(data, { term = term, count = term_data.count, locations = term_data.locations })
end
table.sort(data, function(first, second) return first.count > second.count end)
for _, d in ipairs(data) do
num = (num < #dots) and num + 1 or 1
for _, location in ipairs(d.locations) do
local loc_info = coord_data[location]
local rand = math.random(-300, 300) / 100
local top = ((55 - loc_info[1]) * 1200 * 740 / 799 / 70) - 4.5 + rand
local left = ((loc_info[2] - 70) * 1200 / 75) - 4.5 + rand
table.insert(points,
tostring( mw.html.create( "div" )
:css( "position", "absolute" )
:css( "top", top .. "px" )
:css( "left", left .. "px" )
:css( "margin", "auto" )
:css( "padding", "3px 3px" )
:css( "border-radius", "20px" )
:css( "background-color", "#" .. dots[num] )
:css( "cursor", "help" )
:attr( "title", location .. " (" .. loc_info[3] .. ") " .. loc_info[4] .. ": " .. d.term )))
end
table.insert(legend,
tostring( mw.html.create( "div" )
:css( "display", "inline-block" )
:css( "width", "10px" )
:css( "height", "10px" )
:css( "border-radius", "20px" )
:css( "background-color", "#" .. dots[num] )) .. "[[" .. d.term .. "]]")
end
map = map .. table.concat(points) .. '</div></div></div>' ..
'<div style="column-count:5;-moz-column-count:5;-webkit-column-count:5">' ..
table.concat(legend, "<br>") .. "</div>"
return map
end
return export