Last active
August 26, 2024 14:58
-
-
Save 1ec5/e23e53fc5d1f7d860a82a381c5e77cca to your computer and use it in GitHub Desktop.
MapLibre GL JS complex text rendering demo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"/> | |
<meta name="viewport" content="width=device-width"/> | |
<title></title> | |
<script type="text/javascript" src="./maplibre-gl-dev.js"></script> | |
<link rel="stylesheet" href="./maplibre-gl.css"/> | |
<style type="text/css"> | |
body { | |
margin: 0; | |
padding: 0; | |
} | |
html, body, #map { | |
width: 100%; | |
height: 100%; | |
} | |
</style> | |
</head> | |
<body> | |
<div id="map"></div> | |
<script type="text/javascript"> | |
maplibregl.setRTLTextPlugin( | |
'https://unpkg.com/@mapbox/[email protected]/mapbox-gl-rtl-text.min.js', | |
false | |
); | |
let map = new maplibregl.Map({ | |
container: 'map', | |
hash: true, | |
"localIdeographFontFamily": "sans-serif", | |
style: { | |
version: 8, | |
glyphs: 'https://www.openhistoricalmap.org/map-styles/fonts/{fontstack}/{range}.pbf', | |
sources: { | |
point: { | |
type: 'geojson', | |
data: { | |
"type": "Feature", | |
"geometry": { | |
"type": "Point", | |
"coordinates": [0, 0] | |
}, | |
"properties": { | |
"name_en": "abcde", | |
"name_ja": "あいうえお", | |
"name_zh": "阿衣乌唉哦𪚥", | |
"name_ko": "아이우", | |
"name_bn": "বাংলা বর্ণমালা বা লিপি", | |
"name_sa": "क्षि द्ध्र्य", | |
"name_vi": "Nhà Bè", | |
"name_vi-Hani": "茹𦨭", | |
"name_egy": "𓃰", | |
"name_und-Zyse": "🇦🇶 🦽👩🏽🦽", | |
"name_my": "နေပြည်တော် ဥတ္တရသီရိ ရန်ကုန် မန္တလေးတိုင်း", | |
"name_km": "បឹងទន្លេសាប", | |
"name_si": "ශ්රී ලංකාව", | |
"name_dv": "ކޮންގޯ (ދިމިޤްރާޠީ ޖުމްހޫރިއްޔާ)", | |
"name_ckb": "ھیندستان", | |
"name_ar": "ديربورن", | |
} | |
}, | |
}, | |
line: { | |
type: 'geojson', | |
data: { | |
"type": "FeatureCollection", | |
"features": [ | |
{ | |
"type": "Feature", | |
"properties": { | |
"name_as": "বাংগালোৰ", | |
"name_bn": "বেঙ্গালুরু", | |
"name_en": "Bengaluru", | |
"name_hi": "बेंगालुरू", | |
"name_kn": "ಬೆಂಗಳೂರು", | |
"name_ml": "ബെംഗളൂരു", | |
"name_mr": "बंगळूर", | |
"name_ta": "பெங்களூரு", | |
"name_te": "బెంగళూరు", | |
"name_my": "နေပြည်တော် ဥတ္တရသီရိ ရန်ကုန် မန္တလေးတိုင်း", | |
"name_km": "បឹងទន្លេសាប", | |
}, | |
"geometry": { | |
"type": "Polygon", | |
"coordinates": [ | |
[ | |
[ | |
15.508556234167116, | |
38.65461223427515 | |
], | |
[ | |
12.91618533464088, | |
38.533086925182445 | |
], | |
[ | |
10.369386791762732, | |
38.170897801403726 | |
], | |
[ | |
7.911250489330584, | |
37.57504517154547 | |
], | |
[ | |
5.580261287277247, | |
36.75668964212406 | |
], | |
[ | |
3.408802684012227, | |
35.7304791602892 | |
], | |
[ | |
1.4224030050179726, | |
34.51375559381378 | |
], | |
[ | |
-0.3603119885100135, | |
33.12574173309967 | |
], | |
[ | |
-1.9271069273004928, | |
31.586791410799275 | |
], | |
[ | |
-3.2712624345357417, | |
29.917756835988456 | |
], | |
[ | |
-4.390532290242028, | |
28.139497715267705 | |
], | |
[ | |
-5.286088308116945, | |
26.272532721817203 | |
], | |
[ | |
-5.961558750226224, | |
24.336817979571787 | |
], | |
[ | |
-6.422218638757453, | |
22.351629101996423 | |
], | |
[ | |
-6.674353565063194, | |
20.33552108446206 | |
], | |
[ | |
-6.724794309234385, | |
18.306341780580755 | |
], | |
[ | |
-6.580606056024191, | |
16.281277925727142 | |
], | |
[ | |
-6.248910220313924, | |
14.276916417038606 | |
], | |
[ | |
-5.736815902838026, | |
12.309307084263022 | |
], | |
[ | |
-5.0514394188501415, | |
10.394016175442848 | |
], | |
[ | |
-4.199992541679002, | |
8.546162195091357 | |
], | |
[ | |
-3.189922080284193, | |
6.780427686534619 | |
], | |
[ | |
-2.0290846576036983, | |
5.111042235602698 | |
], | |
[ | |
-0.7259409327651817, | |
3.5517336008847487 | |
], | |
[ | |
0.7102468482099399, | |
2.115645637684904 | |
], | |
[ | |
2.2692308225573745, | |
0.8152237168479365 | |
], | |
[ | |
3.9396244272560836, | |
-0.33792930095168466 | |
], | |
[ | |
5.708797465103204, | |
-1.3332208500879303 | |
], | |
[ | |
7.56283486169337, | |
-2.1612518193704524 | |
], | |
[ | |
9.486571060468322, | |
-2.8140042442881206 | |
], | |
[ | |
11.463706304864688, | |
-3.2850208806337307 | |
], | |
[ | |
13.477003548815889, | |
-3.5695632635030097 | |
], | |
[ | |
15.508556234167113, | |
-3.664735505247768 | |
], | |
[ | |
17.54010891951834, | |
-3.569563263503013 | |
], | |
[ | |
19.55340616346954, | |
-3.2850208806337338 | |
], | |
[ | |
21.5305414078659, | |
-2.814004244288124 | |
], | |
[ | |
23.454277606640847, | |
-2.1612518193704586 | |
], | |
[ | |
25.308315003231023, | |
-1.3332208500879303 | |
], | |
[ | |
27.077488041078148, | |
-0.3379293009516815 | |
], | |
[ | |
28.74788164577685, | |
0.8152237168479334 | |
], | |
[ | |
30.306865620124288, | |
2.1156456376848993 | |
], | |
[ | |
31.743053401099417, | |
3.5517336008847535 | |
], | |
[ | |
33.04619712593792, | |
5.111042235602685 | |
], | |
[ | |
34.20703454861842, | |
6.7804276865346065 | |
], | |
[ | |
35.21710501001324, | |
8.546162195091362 | |
], | |
[ | |
36.06855188718437, | |
10.394016175442848 | |
], | |
[ | |
36.75392837117225, | |
12.309307084263008 | |
], | |
[ | |
37.26602268864816, | |
14.276916417038606 | |
], | |
[ | |
37.59771852435842, | |
16.28127792572714 | |
], | |
[ | |
37.74190677756861, | |
18.30634178058075 | |
], | |
[ | |
37.691466033397425, | |
20.33552108446206 | |
], | |
[ | |
37.43933110709168, | |
22.351629101996416 | |
], | |
[ | |
36.97867121856046, | |
24.336817979571787 | |
], | |
[ | |
36.30320077645118, | |
26.272532721817203 | |
], | |
[ | |
35.40764475857626, | |
28.13949771526769 | |
], | |
[ | |
34.288374902869975, | |
29.917756835988456 | |
], | |
[ | |
32.944219395634725, | |
31.586791410799275 | |
], | |
[ | |
31.37742445684425, | |
33.125741733099666 | |
], | |
[ | |
29.59470946331626, | |
34.51375559381378 | |
], | |
[ | |
27.60830978432201, | |
35.7304791602892 | |
], | |
[ | |
25.43685118105698, | |
36.75668964212406 | |
], | |
[ | |
23.10586197900367, | |
37.57504517154546 | |
], | |
[ | |
20.64772567657151, | |
38.170897801403726 | |
], | |
[ | |
18.100927133693347, | |
38.533086925182445 | |
], | |
[ | |
15.508556234167116, | |
38.65461223427515 | |
] | |
] | |
] | |
} | |
} | |
] | |
}, | |
}, | |
}, | |
layers: [ | |
{ | |
"id": "sample-text-ja-en", | |
"type": "symbol", | |
"source": "point", | |
"layout": { | |
"text-field": "{name_ja}{name_en}", | |
"text-font": ["OpenHistorical"], | |
"text-size": 30, | |
"text-offset": [0, -2] | |
} | |
}, | |
{ | |
"id": "sample-text-zh-ko", | |
"type": "symbol", | |
"source": "point", | |
"layout": { | |
"text-field": "{name_zh}{name_ko}", | |
"text-font": ["OpenHistorical"], | |
"text-size": 30, | |
"text-offset": [0, 0] | |
} | |
}, | |
{ | |
"id": "sample-text-en-ja", | |
"type": "symbol", | |
"source": "point", | |
"layout": { | |
"text-field": "{name_en}{name_ja}", | |
"text-font": ["OpenHistorical"], | |
"text-size": 30, | |
"text-offset": [0, 2] | |
} | |
}, | |
{ | |
"id": "sample-text-vi-vi-hani", | |
"type": "symbol", | |
"source": "point", | |
"layout": { | |
"text-field": "{name_vi} {name_vi-Hani}", | |
"text-font": ["OpenHistorical"], | |
"text-size": 30, | |
"text-offset": [0, 4] | |
} | |
}, | |
{ | |
"id": "sample-text-egy-emoji", | |
"type": "symbol", | |
"source": "point", | |
"layout": { | |
"text-field": "{name_egy} {name_und-Zyse}", | |
"text-font": ["OpenHistorical"], | |
"text-size": 30, | |
"text-offset": [0, 4] | |
} | |
}, | |
{ | |
"id": "sample-text-hi-en", | |
"type": "symbol", | |
"source": "point", | |
"layout": { | |
"text-field": ["format", "कोलकाता", "\n", "(\u2068", {"font-scale": 0.8}, "Kolkata", {"font-scale": 0.8}, "\u2069)", {"font-scale": 0.8}], | |
"text-font": ["OpenHistorical"], | |
"text-size": 30, | |
"text-offset": [0, 7] | |
} | |
}, | |
{ | |
"id": "sample-text-si", | |
"type": "symbol", | |
"source": "point", | |
"layout": { | |
"text-field": "{name_si}", | |
"text-font": ["OpenHistorical"], | |
"text-size": 30, | |
"text-offset": [0, 9] | |
} | |
}, | |
{ | |
"id": "sample-text-dv", | |
"type": "symbol", | |
"source": "point", | |
"layout": { | |
"text-field": "{name_dv}", | |
"text-font": ["OpenHistorical"], | |
"text-size": 30, | |
"text-offset": [-10, 0] | |
} | |
}, | |
{ | |
"id": "sample-text-ckb", | |
"type": "symbol", | |
"source": "point", | |
"layout": { | |
"text-field": "{name_ckb}", | |
"text-font": ["OpenHistorical"], | |
"text-size": 30, | |
"text-offset": [-10, 2] | |
} | |
}, | |
{ | |
"id": "sample-text-ar", | |
"type": "symbol", | |
"source": "point", | |
"layout": { | |
"text-field": "{name_ar}", | |
"text-font": ["OpenHistorical"], | |
"text-size": 30, | |
"text-offset": [-10, 4] | |
} | |
}, | |
{ | |
"id": "line-bengaluru", | |
"type": "line", | |
"source": "line", | |
"paint": { | |
"line-color": "blue", | |
"line-offset": -60, | |
"line-dasharray": [8, 6], | |
"line-opacity": 0.4, | |
} | |
}, | |
{ | |
"id": "line-text-bengaluru", | |
"type": "symbol", | |
"source": "line", | |
"layout": { | |
"symbol-placement": "line", | |
"symbol-spacing": 1, | |
"text-max-angle": 60, | |
"text-padding": 0, | |
//"text-anchor": "top", | |
"text-field": [ | |
"format", | |
["get", "name_as"], | |
" ", | |
["get", "name_en"], | |
{"text-font": ["literal", ["OpenHistorical Italic"]]}, | |
" ", | |
["get", "name_kn"], | |
" ", | |
["get", "name_mr"], | |
], | |
"text-font": ["OpenHistorical"], | |
"text-size": 30, | |
"text-offset": [0, -2], | |
} | |
}, | |
{ | |
"id": "line-bengaluru2", | |
"type": "line", | |
"source": "line", | |
"paint": { | |
"line-color": "blue", | |
"line-opacity": 0.4, | |
} | |
}, | |
{ | |
"id": "line-text-bengaluru2", | |
"type": "symbol", | |
"source": "line", | |
"layout": { | |
"symbol-placement": "line", | |
"symbol-spacing": 1, | |
"text-max-angle": 60, | |
"text-padding": 0, | |
//"text-anchor": "top", | |
"text-field": [ | |
"concat", | |
["get", "name_bn"], | |
" ", | |
["get", "name_hi"], | |
" ", | |
["get", "name_ml"], | |
" ", | |
["get", "name_ta"], | |
" ", | |
["get", "name_te"], | |
], | |
"text-font": ["OpenHistorical"], | |
"text-size": 30, | |
"text-offset": [0, 0], | |
} | |
}, | |
{ | |
"id": "line-naypyidaw", | |
"type": "line", | |
"source": "line", | |
"paint": { | |
"line-color": "blue", | |
"line-offset": 60, | |
"line-dasharray": [8, 6], | |
"line-opacity": 0.4, | |
} | |
}, | |
{ | |
"id": "line-text-naypyidaw", | |
"type": "symbol", | |
"source": "line", | |
"layout": { | |
"symbol-placement": "line", | |
"symbol-spacing": 1, | |
"text-max-angle": 60, | |
"text-padding": 0, | |
//"text-anchor": "top", | |
"text-field": [ | |
"concat", | |
["get", "name_my"], | |
], | |
"text-font": ["OpenHistorical"], | |
"text-size": 30, | |
"text-offset": [0, 2], | |
} | |
}, | |
], | |
}, | |
center: [0, 0], | |
zoom: 1, | |
}); | |
map.showCollisionBoxes = true; | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment