Skip to content

Commit 5d42b41

Browse files
authored
Add files via upload
1 parent a9d10b9 commit 5d42b41

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

landmark.html

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>Google Maps Landmark Icon Merger by @abumuailek</title>
6+
<style>
7+
body { font-family: Arial, sans-serif; padding: 20px; background: #f0f0f0; }
8+
canvas { border: 1px solid #ccc; margin-top: 20px; }
9+
</style>
10+
</head>
11+
<body>
12+
<h2>Google Maps Landmark Icon Merger</h2>
13+
<label for="landmark">Enter Landmark ID (e.g. cairo_tower):</label><br>
14+
<input type="text" id="landmark" placeholder="e.g. cairo_tower" />
15+
<button onclick="mergeLayers()">Merge Icon</button>
16+
17+
<canvas id="resultCanvas"></canvas>
18+
<p><a id="downloadLink" style="display:none;" download>Download PNG</a></p>
19+
20+
<script>
21+
async function loadImage(url) {
22+
return new Promise((resolve, reject) => {
23+
const img = new Image();
24+
img.crossOrigin = 'anonymous';
25+
img.onload = () => resolve(img);
26+
img.onerror = reject;
27+
img.src = url;
28+
});
29+
}
30+
31+
function formatName(slug) {
32+
return slug.replace(/_/g, ' ').replace(/\b\w/g, c => c.toUpperCase());
33+
}
34+
35+
async function mergeLayers() {
36+
const rawName = document.getElementById('landmark').value.trim();
37+
const canvas = document.getElementById('resultCanvas');
38+
const ctx = canvas.getContext('2d');
39+
ctx.clearRect(0, 0, canvas.width, canvas.height);
40+
41+
try {
42+
const baseUrl = `https://www.google.com/maps/vt/icon/name=assets/icons/poi/iconic/`;
43+
const img0 = await loadImage(`${baseUrl}${rawName}_layer_1-2-medium.png&scale=4`);
44+
45+
canvas.width = img0.width;
46+
canvas.height = img0.height;
47+
ctx.drawImage(img0, 0, 0);
48+
49+
for (let i = 2; i <= 4; i++) {
50+
const img = await loadImage(`${baseUrl}${rawName}_layer_${i}-2-medium.png&scale=4`);
51+
ctx.drawImage(img, 0, 0);
52+
}
53+
54+
const formatted = formatName(rawName);
55+
const link = document.getElementById('downloadLink');
56+
link.href = canvas.toDataURL();
57+
link.download = `${formatted}.png`;
58+
link.textContent = `Download "${formatted}" PNG`;
59+
link.style.display = 'inline';
60+
} catch (error) {
61+
alert('Could not load one or more image layers. Please check the landmark ID.');
62+
}
63+
}
64+
</script>
65+
</body>
66+
</html>

0 commit comments

Comments
 (0)