<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Panes auf cbrueggenolte.de</title>
    <link>https://cbrueggenolte.de/tags/panes/</link>
    <description>Neueste Beiträge in Panes auf cbrueggenolte.de</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>de-DE</language>
    <managingEditor>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</managingEditor>
    <webMaster>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</webMaster>
    <copyright>2018-2026 cbrueggenolte</copyright>
    <lastBuildDate>Tue, 08 Jul 2025 00:00:00 +0200</lastBuildDate>
    <atom:link href="https://cbrueggenolte.de/tags/panes/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Geo‑Daten dynamisch mit Leaflet.js laden</title>
      <link>https://cbrueggenolte.de/geo-daten-dynamisch-mit-leaflet-js-laden/</link>
      <pubDate>Tue, 08 Jul 2025 00:00:00 +0200</pubDate><author>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</author>
      <guid>https://cbrueggenolte.de/geo-daten-dynamisch-mit-leaflet-js-laden/</guid>
      <description>&lt;p&gt;Hier ein Überblick über die wichtigsten Änderungen:&lt;/p&gt;&#xA;&lt;p&gt;Statt die Layer-Reihenfolge mit &lt;code&gt;bringToFront()&lt;/code&gt; zu steuern, haben ich nun Leaflet-Panes benutzt.&#xA;So kann ich die Z-Index-Reihenfolge der Layer exakt bestimmen:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Länder liegen im Pane &lt;code&gt;countriesPane&lt;/code&gt; (zIndex 400)&lt;/li&gt;&#xA;&lt;li&gt;POIs im Pane &lt;code&gt;poiPane&lt;/code&gt; (zIndex 500)&lt;/li&gt;&#xA;&lt;li&gt;Hauptstädte/Capitals im Pane &lt;code&gt;capitalsPane&lt;/code&gt; (zIndex 600)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Das sorgt für eine saubere und vorhersehbare Darstellung – unabhängig von Interaktionen oder Nachladen von Daten.&#xA;Vorallem aber wird bei einem Hover-Over über Länder die Darstellung der POIs nicht mehr beeinflusst.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Hier ein Überblick über die wichtigsten Änderungen:</p>
<p>Statt die Layer-Reihenfolge mit <code>bringToFront()</code> zu steuern, haben ich nun Leaflet-Panes benutzt.
So kann ich die Z-Index-Reihenfolge der Layer exakt bestimmen:</p>
<ul>
<li>Länder liegen im Pane <code>countriesPane</code> (zIndex 400)</li>
<li>POIs im Pane <code>poiPane</code> (zIndex 500)</li>
<li>Hauptstädte/Capitals im Pane <code>capitalsPane</code> (zIndex 600)</li>
</ul>
<p>Das sorgt für eine saubere und vorhersehbare Darstellung – unabhängig von Interaktionen oder Nachladen von Daten.
Vorallem aber wird bei einem Hover-Over über Länder die Darstellung der POIs nicht mehr beeinflusst.</p>
<h3 id="neue-mapjs-datei">Neue map.js Datei</h3>
<p>Hier die neue <code>map.js</code> Datei, die die Ländergrenzen, POIs und Hauptstädte verwaltet:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="ln">  1</span><span class="cl"><span class="kr">const</span> <span class="nx">map</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="s1">&#39;map&#39;</span><span class="p">).</span><span class="nx">setView</span><span class="p">([</span><span class="mf">52.0705</span><span class="p">,</span> <span class="mf">4.707</span><span class="p">],</span> <span class="mi">6</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">  2</span><span class="cl"><span class="nx">L</span><span class="p">.</span><span class="nx">tileLayer</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="p">{}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">  3</span><span class="cl"><span class="kd">var</span> <span class="nx">capitalsIcon</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">divIcon</span><span class="p">({</span> <span class="nx">className</span><span class="o">:</span> <span class="s1">&#39;capitals-icon&#39;</span> <span class="p">});</span>
</span></span><span class="line"><span class="ln">  4</span><span class="cl">
</span></span><span class="line"><span class="ln">  5</span><span class="cl"><span class="c1">// Create custom panes for z-order control
</span></span></span><span class="line"><span class="ln">  6</span><span class="cl"><span class="nx">map</span><span class="p">.</span><span class="nx">createPane</span><span class="p">(</span><span class="s1">&#39;countriesPane&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">  7</span><span class="cl"><span class="nx">map</span><span class="p">.</span><span class="nx">getPane</span><span class="p">(</span><span class="s1">&#39;countriesPane&#39;</span><span class="p">).</span><span class="nx">style</span><span class="p">.</span><span class="nx">zIndex</span> <span class="o">=</span> <span class="mi">400</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">  8</span><span class="cl">
</span></span><span class="line"><span class="ln">  9</span><span class="cl"><span class="nx">map</span><span class="p">.</span><span class="nx">createPane</span><span class="p">(</span><span class="s1">&#39;poiPane&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 10</span><span class="cl"><span class="nx">map</span><span class="p">.</span><span class="nx">getPane</span><span class="p">(</span><span class="s1">&#39;poiPane&#39;</span><span class="p">).</span><span class="nx">style</span><span class="p">.</span><span class="nx">zIndex</span> <span class="o">=</span> <span class="mi">500</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 11</span><span class="cl">
</span></span><span class="line"><span class="ln"> 12</span><span class="cl"><span class="nx">map</span><span class="p">.</span><span class="nx">createPane</span><span class="p">(</span><span class="s1">&#39;capitalsPane&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 13</span><span class="cl"><span class="nx">map</span><span class="p">.</span><span class="nx">getPane</span><span class="p">(</span><span class="s1">&#39;capitalsPane&#39;</span><span class="p">).</span><span class="nx">style</span><span class="p">.</span><span class="nx">zIndex</span> <span class="o">=</span> <span class="mi">600</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 14</span><span class="cl">
</span></span><span class="line"><span class="ln"> 15</span><span class="cl"><span class="c1">// Highlight-Funktionen
</span></span></span><span class="line"><span class="ln"> 16</span><span class="cl"><span class="kd">function</span> <span class="nx">highlightFeature</span><span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 17</span><span class="cl">  <span class="kr">const</span> <span class="nx">layer</span> <span class="o">=</span> <span class="nx">e</span><span class="p">.</span><span class="nx">target</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 18</span><span class="cl">  <span class="nx">layer</span><span class="p">.</span><span class="nx">setStyle</span><span class="p">({</span>
</span></span><span class="line"><span class="ln"> 19</span><span class="cl">    <span class="nx">weight</span><span class="o">:</span> <span class="mi">2</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 20</span><span class="cl">    <span class="nx">color</span><span class="o">:</span> <span class="s1">&#39;#ff0000&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 21</span><span class="cl">    <span class="nx">fillOpacity</span><span class="o">:</span> <span class="mf">0.7</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 22</span><span class="cl">  <span class="p">});</span>
</span></span><span class="line"><span class="ln"> 23</span><span class="cl">  <span class="nx">layer</span><span class="p">.</span><span class="nx">bringToFront</span><span class="p">();</span>
</span></span><span class="line"><span class="ln"> 24</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln"> 25</span><span class="cl">
</span></span><span class="line"><span class="ln"> 26</span><span class="cl"><span class="kd">function</span> <span class="nx">resetHighlight</span><span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 27</span><span class="cl">  <span class="nx">geojson</span><span class="p">.</span><span class="nx">resetStyle</span><span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">target</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 28</span><span class="cl">  <span class="nx">overlayGroup</span><span class="p">.</span><span class="nx">bringToFront</span><span class="p">();</span>
</span></span><span class="line"><span class="ln"> 29</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln"> 30</span><span class="cl">
</span></span><span class="line"><span class="ln"> 31</span><span class="cl"><span class="c1">// Layer groups for better control
</span></span></span><span class="line"><span class="ln"> 32</span><span class="cl"><span class="kr">const</span> <span class="nx">baseGroup</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">layerGroup</span><span class="p">().</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 33</span><span class="cl"><span class="kr">const</span> <span class="nx">overlayGroup</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">layerGroup</span><span class="p">().</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 34</span><span class="cl"><span class="kr">const</span> <span class="nx">capitalsLayer</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">layerGroup</span><span class="p">().</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 35</span><span class="cl">
</span></span><span class="line"><span class="ln"> 36</span><span class="cl"><span class="c1">// Country boundaries with outlines and optional fill
</span></span></span><span class="line"><span class="ln"> 37</span><span class="cl"><span class="kd">let</span> <span class="nx">geojson</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 38</span><span class="cl">
</span></span><span class="line"><span class="ln"> 39</span><span class="cl"><span class="c1">// Call layers in correct order
</span></span></span><span class="line"><span class="ln"> 40</span><span class="cl"><span class="kd">function</span> <span class="nx">initLayers</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 41</span><span class="cl">  <span class="nx">addCountryLayer</span><span class="p">(</span><span class="nx">addPOILayer</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 42</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln"> 43</span><span class="cl">
</span></span><span class="line"><span class="ln"> 44</span><span class="cl"><span class="kd">function</span> <span class="nx">addCountryLayer</span><span class="p">(</span><span class="nx">callback</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 45</span><span class="cl">  <span class="nx">fetch</span><span class="p">(</span><span class="s1">&#39;/data/vm_medium_countries.geo.json&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 46</span><span class="cl">    <span class="p">.</span><span class="nx">then</span><span class="p">((</span><span class="nx">res</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="nx">res</span><span class="p">.</span><span class="nx">json</span><span class="p">())</span>
</span></span><span class="line"><span class="ln"> 47</span><span class="cl">    <span class="p">.</span><span class="nx">then</span><span class="p">((</span><span class="nx">data</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 48</span><span class="cl">      <span class="k">if</span> <span class="p">(</span><span class="nx">baseGroup</span><span class="p">)</span> <span class="nx">baseGroup</span><span class="p">.</span><span class="nx">clearLayers</span><span class="p">();</span>
</span></span><span class="line"><span class="ln"> 49</span><span class="cl">      <span class="nx">geojson</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">geoJSON</span><span class="p">(</span><span class="nx">data</span><span class="p">,</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 50</span><span class="cl">        <span class="nx">pane</span><span class="o">:</span> <span class="s1">&#39;countriesPane&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 51</span><span class="cl">        <span class="nx">style</span><span class="o">:</span> <span class="p">(</span><span class="nx">feature</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">({</span>
</span></span><span class="line"><span class="ln"> 52</span><span class="cl">          <span class="nx">color</span><span class="o">:</span> <span class="nx">feature</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">color</span> <span class="o">||</span> <span class="s1">&#39;#333&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 53</span><span class="cl">          <span class="nx">weight</span><span class="o">:</span> <span class="mi">1</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 54</span><span class="cl">          <span class="nx">opacity</span><span class="o">:</span> <span class="mi">1</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 55</span><span class="cl">          <span class="nx">fillColor</span><span class="o">:</span> <span class="nx">feature</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">fillColor</span> <span class="o">||</span> <span class="s1">&#39;#eee&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 56</span><span class="cl">          <span class="nx">fillOpacity</span><span class="o">:</span> <span class="mi">1</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 57</span><span class="cl">        <span class="p">}),</span>
</span></span><span class="line"><span class="ln"> 58</span><span class="cl">        <span class="nx">onEachFeature</span><span class="o">:</span> <span class="p">(</span><span class="nx">feature</span><span class="p">,</span> <span class="nx">layer</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 59</span><span class="cl">          <span class="nx">layer</span><span class="p">.</span><span class="nx">bindPopup</span><span class="p">(</span><span class="nx">feature</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">name</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 60</span><span class="cl">          <span class="nx">layer</span><span class="p">.</span><span class="nx">on</span><span class="p">({</span>
</span></span><span class="line"><span class="ln"> 61</span><span class="cl">            <span class="nx">mouseover</span><span class="o">:</span> <span class="nx">highlightFeature</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 62</span><span class="cl">            <span class="nx">mouseout</span><span class="o">:</span> <span class="nx">resetHighlight</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 63</span><span class="cl">          <span class="p">});</span>
</span></span><span class="line"><span class="ln"> 64</span><span class="cl">        <span class="p">},</span>
</span></span><span class="line"><span class="ln"> 65</span><span class="cl">      <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">baseGroup</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 66</span><span class="cl">      <span class="k">if</span> <span class="p">(</span><span class="nx">callback</span><span class="p">)</span> <span class="nx">callback</span><span class="p">();</span>
</span></span><span class="line"><span class="ln"> 67</span><span class="cl">    <span class="p">})</span>
</span></span><span class="line"><span class="ln"> 68</span><span class="cl">    <span class="p">.</span><span class="k">catch</span><span class="p">(</span><span class="nx">console</span><span class="p">.</span><span class="nx">error</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 69</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln"> 70</span><span class="cl">
</span></span><span class="line"><span class="ln"> 71</span><span class="cl"><span class="kd">function</span> <span class="nx">addPOILayer</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 72</span><span class="cl">  <span class="nx">fetch</span><span class="p">(</span><span class="s1">&#39;/data/poi.geo.json&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 73</span><span class="cl">    <span class="p">.</span><span class="nx">then</span><span class="p">((</span><span class="nx">response</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="nx">response</span><span class="p">.</span><span class="nx">json</span><span class="p">())</span>
</span></span><span class="line"><span class="ln"> 74</span><span class="cl">    <span class="p">.</span><span class="nx">then</span><span class="p">((</span><span class="nx">data</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 75</span><span class="cl">      <span class="k">if</span> <span class="p">(</span><span class="nx">overlayGroup</span><span class="p">)</span> <span class="nx">overlayGroup</span><span class="p">.</span><span class="nx">clearLayers</span><span class="p">();</span>
</span></span><span class="line"><span class="ln"> 76</span><span class="cl">      <span class="nx">L</span><span class="p">.</span><span class="nx">geoJSON</span><span class="p">(</span><span class="nx">data</span><span class="p">,</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 77</span><span class="cl">        <span class="nx">pane</span><span class="o">:</span> <span class="s1">&#39;poiPane&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 78</span><span class="cl">        <span class="nx">style</span><span class="o">:</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">feature</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 79</span><span class="cl">          <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">feature</span><span class="p">.</span><span class="nx">properties</span><span class="p">)</span> <span class="k">return</span> <span class="p">{};</span>
</span></span><span class="line"><span class="ln"> 80</span><span class="cl">          <span class="k">return</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 81</span><span class="cl">            <span class="nx">color</span><span class="o">:</span> <span class="nx">feature</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">stroke</span> <span class="o">||</span> <span class="s1">&#39;#3388ff&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 82</span><span class="cl">            <span class="nx">weight</span><span class="o">:</span> <span class="nx">feature</span><span class="p">.</span><span class="nx">properties</span><span class="p">[</span><span class="s1">&#39;stroke-width&#39;</span><span class="p">]</span> <span class="o">||</span> <span class="mi">3</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 83</span><span class="cl">            <span class="nx">opacity</span><span class="o">:</span> <span class="nx">feature</span><span class="p">.</span><span class="nx">properties</span><span class="p">[</span><span class="s1">&#39;stroke-opacity&#39;</span><span class="p">]</span> <span class="o">||</span> <span class="mi">1</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 84</span><span class="cl">            <span class="nx">fillColor</span><span class="o">:</span> <span class="nx">feature</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">fill</span> <span class="o">||</span> <span class="s1">&#39;#3388ff&#39;</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 85</span><span class="cl">            <span class="nx">fillOpacity</span><span class="o">:</span> <span class="nx">feature</span><span class="p">.</span><span class="nx">properties</span><span class="p">[</span><span class="s1">&#39;fill-opacity&#39;</span><span class="p">]</span> <span class="o">||</span> <span class="mf">0.2</span><span class="p">,</span>
</span></span><span class="line"><span class="ln"> 86</span><span class="cl">          <span class="p">};</span>
</span></span><span class="line"><span class="ln"> 87</span><span class="cl">        <span class="p">},</span>
</span></span><span class="line"><span class="ln"> 88</span><span class="cl">        <span class="nx">onEachFeature</span><span class="o">:</span> <span class="p">(</span><span class="nx">feature</span><span class="p">,</span> <span class="nx">layer</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 89</span><span class="cl">          <span class="k">if</span> <span class="p">(</span><span class="nx">feature</span><span class="p">.</span><span class="nx">properties</span> <span class="o">&amp;&amp;</span> <span class="nx">feature</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">name</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 90</span><span class="cl">            <span class="nx">layer</span><span class="p">.</span><span class="nx">bindPopup</span><span class="p">(</span><span class="nx">feature</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">name</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 91</span><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="ln"> 92</span><span class="cl">        <span class="p">},</span>
</span></span><span class="line"><span class="ln"> 93</span><span class="cl">      <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">overlayGroup</span><span class="p">);</span>
</span></span><span class="line"><span class="ln"> 94</span><span class="cl">    <span class="p">});</span>
</span></span><span class="line"><span class="ln"> 95</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln"> 96</span><span class="cl">
</span></span><span class="line"><span class="ln"> 97</span><span class="cl"><span class="c1">// Capitals logic
</span></span></span><span class="line"><span class="ln"> 98</span><span class="cl"><span class="kd">function</span> <span class="nx">clearCapitals</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 99</span><span class="cl">  <span class="nx">capitalsLayer</span><span class="p">.</span><span class="nx">clearLayers</span><span class="p">();</span>
</span></span><span class="line"><span class="ln">100</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">101</span><span class="cl">
</span></span><span class="line"><span class="ln">102</span><span class="cl"><span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s1">&#39;capitals-btn&#39;</span><span class="p">).</span><span class="nx">onclick</span> <span class="o">=</span> <span class="kr">async</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">103</span><span class="cl">  <span class="nx">clearCapitals</span><span class="p">();</span>
</span></span><span class="line"><span class="ln">104</span><span class="cl">  <span class="kr">const</span> <span class="nx">res</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">fetch</span><span class="p">(</span><span class="s1">&#39;/api/capitals&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">105</span><span class="cl">  <span class="kr">const</span> <span class="nx">capitals</span> <span class="o">=</span> <span class="kr">await</span> <span class="nx">res</span><span class="p">.</span><span class="nx">json</span><span class="p">();</span>
</span></span><span class="line"><span class="ln">106</span><span class="cl">  <span class="nx">capitals</span><span class="p">.</span><span class="nx">forEach</span><span class="p">((</span><span class="nx">capital</span><span class="p">)</span> <span class="p">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">107</span><span class="cl">    <span class="kr">const</span> <span class="nx">marker</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">marker</span><span class="p">([</span><span class="nx">capital</span><span class="p">.</span><span class="nx">lat</span><span class="p">,</span> <span class="nx">capital</span><span class="p">.</span><span class="nx">lng</span><span class="p">],</span> <span class="p">{</span> <span class="nx">icon</span><span class="o">:</span> <span class="nx">capitalsIcon</span><span class="p">,</span> <span class="nx">pane</span><span class="o">:</span> <span class="s1">&#39;capitalsPane&#39;</span> <span class="p">}).</span><span class="nx">bindPopup</span><span class="p">(</span><span class="nx">capital</span><span class="p">.</span><span class="nx">name</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">108</span><span class="cl">    <span class="nx">capitalsLayer</span><span class="p">.</span><span class="nx">addLayer</span><span class="p">(</span><span class="nx">marker</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">109</span><span class="cl">  <span class="p">});</span>
</span></span><span class="line"><span class="ln">110</span><span class="cl">  <span class="nx">capitalsLayer</span><span class="p">.</span><span class="nx">bringToFront</span><span class="p">();</span>
</span></span><span class="line"><span class="ln">111</span><span class="cl"><span class="p">};</span>
</span></span><span class="line"><span class="ln">112</span><span class="cl">
</span></span><span class="line"><span class="ln">113</span><span class="cl"><span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="s1">&#39;remove-capitals-btn&#39;</span><span class="p">).</span><span class="nx">onclick</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">114</span><span class="cl">  <span class="nx">clearCapitals</span><span class="p">();</span>
</span></span><span class="line"><span class="ln">115</span><span class="cl"><span class="p">};</span>
</span></span><span class="line"><span class="ln">116</span><span class="cl">
</span></span><span class="line"><span class="ln">117</span><span class="cl"><span class="nx">initLayers</span><span class="p">();</span></span></span></code></pre></div><p>Die Layer für Länder, POIs und Hauptstädte werden jetzt in eigenen LayerGroups verwaltet. Das macht das Nachladen, Entfernen und Aktualisieren von Daten viel einfacher und übersichtlicher.</p>
<h3 id="neue-html-struktur">Neue HTML-Struktur</h3>
<p>Hier die neue <code>index.html</code> Datei, die die Karte und die Buttons enthält:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="cp">&lt;!DOCTYPE html&gt;</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="p">&lt;</span><span class="nt">html</span> <span class="na">lang</span><span class="o">=</span><span class="s">&#34;de&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">  <span class="p">&lt;</span><span class="nt">head</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">    <span class="p">&lt;</span><span class="nt">meta</span> <span class="na">charset</span><span class="o">=</span><span class="s">&#34;UTF-8&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">    <span class="p">&lt;</span><span class="nt">title</span><span class="p">&gt;</span>Minimal Leaflet Karte<span class="p">&lt;/</span><span class="nt">title</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">    <span class="p">&lt;</span><span class="nt">link</span> <span class="na">rel</span><span class="o">=</span><span class="s">&#34;stylesheet&#34;</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;styles.css&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">    <span class="p">&lt;</span><span class="nt">link</span> <span class="na">rel</span><span class="o">=</span><span class="s">&#34;stylesheet&#34;</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;/public/leaflet/leaflet.css&#34;</span> <span class="na">crossorigin</span><span class="o">=</span><span class="s">&#34;&#34;</span> <span class="p">/&gt;</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">  <span class="p">&lt;/</span><span class="nt">head</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">  <span class="p">&lt;</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">    <span class="p">&lt;</span><span class="nt">header</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">      <span class="p">&lt;</span><span class="nt">h1</span><span class="p">&gt;</span>Leaflet Demo Map<span class="p">&lt;/</span><span class="nt">h1</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">      <span class="p">&lt;</span><span class="nt">p</span> <span class="na">class</span><span class="o">=</span><span class="s">&#34;subtitle&#34;</span><span class="p">&gt;</span>A simple demonstration of a Leaflet map<span class="p">&lt;/</span><span class="nt">p</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">      <span class="p">&lt;</span><span class="nt">button</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;capitals-btn&#34;</span><span class="p">&gt;</span>Load Capitals via API<span class="p">&lt;/</span><span class="nt">button</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">      <span class="p">&lt;</span><span class="nt">button</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;remove-capitals-btn&#34;</span><span class="p">&gt;</span>Remove Capitals<span class="p">&lt;/</span><span class="nt">button</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">    <span class="p">&lt;/</span><span class="nt">header</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">
</span></span><span class="line"><span class="ln">17</span><span class="cl">    <span class="p">&lt;</span><span class="nt">div</span> <span class="na">id</span><span class="o">=</span><span class="s">&#34;map&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">    <span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;/public/leaflet/leaflet.js&#34;</span> <span class="na">crossorigin</span><span class="o">=</span><span class="s">&#34;&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">    <span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;map.js&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">  <span class="p">&lt;/</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl"><span class="p">&lt;/</span><span class="nt">html</span><span class="p">&gt;</span></span></span></code></pre></div><h3 id="neue-styles">Neue Styles</h3>
<p>Dazu passend die neuen Styles in der <code>styles.css</code> Datei, für die Karte und die Buttons:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="c">/* Header ersetzen */</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="nt">header</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="mh">#f8f9fa</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">  <span class="k">padding</span><span class="p">:</span> <span class="mi">1</span><span class="kt">em</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">  <span class="k">text-align</span><span class="p">:</span> <span class="kc">center</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">  <span class="k">border-bottom</span><span class="p">:</span> <span class="mi">1</span><span class="kt">px</span> <span class="kc">solid</span> <span class="mh">#ccc</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="c">/* und in der Map die Werte für &#39;margin&#39; neu setzen */</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="p">#</span><span class="nn">map</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">  <span class="k">margin</span><span class="p">:</span> <span class="mi">1</span><span class="kt">rem</span> <span class="mi">1</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">
</span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="nt">button</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">  <span class="k">padding</span><span class="p">:</span> <span class="mf">0.5</span><span class="kt">em</span> <span class="mi">1</span><span class="kt">em</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">  <span class="k">margin</span><span class="p">:</span> <span class="mf">0.5</span><span class="kt">em</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">  <span class="k">border</span><span class="p">:</span> <span class="kc">none</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">  <span class="k">border-radius</span><span class="p">:</span> <span class="mi">4</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="mh">#007bff</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">  <span class="k">color</span><span class="p">:</span> <span class="kc">white</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">  <span class="k">cursor</span><span class="p">:</span> <span class="kc">pointer</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl">
</span></span><span class="line"><span class="ln">24</span><span class="cl"><span class="p">.</span><span class="nc">capitals-icon</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">25</span><span class="cl">  <span class="k">background-color</span><span class="p">:</span> <span class="mh">#007bff</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">  <span class="k">border-radius</span><span class="p">:</span> <span class="mi">50</span><span class="kt">%</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl">  <span class="k">width</span><span class="p">:</span> <span class="mi">24</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl">  <span class="k">height</span><span class="p">:</span> <span class="mi">24</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">29</span><span class="cl">  <span class="k">display</span><span class="p">:</span> <span class="kc">flex</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl">  <span class="k">align-items</span><span class="p">:</span> <span class="kc">center</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl">  <span class="k">justify-content</span><span class="p">:</span> <span class="kc">center</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">32</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><h3 id="neue-indexts-datei">Neue index.ts Datei</h3>
<p>Jetzt noch die <code>index.ts</code> Datei, die die API für die Hauptstädte bereitstellt:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-typescript" data-lang="typescript"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="kr">import</span> <span class="p">{</span> <span class="nx">serve</span> <span class="p">}</span> <span class="kr">from</span> <span class="s1">&#39;@hono/node-server&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="kr">import</span> <span class="p">{</span> <span class="nx">Hono</span> <span class="p">}</span> <span class="kr">from</span> <span class="s1">&#39;hono&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="kr">import</span> <span class="p">{</span> <span class="nx">serveStatic</span> <span class="p">}</span> <span class="kr">from</span> <span class="s1">&#39;@hono/node-server/serve-static&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">
</span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="kr">const</span> <span class="nx">app</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Hono</span><span class="p">();</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">
</span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="c1">// Serve static files from &#39;public&#39;
</span></span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="s1">&#39;/public/*&#39;</span><span class="p">,</span> <span class="nx">serveStatic</span><span class="p">({</span> <span class="nx">root</span><span class="o">:</span> <span class="s1">&#39;./&#39;</span> <span class="p">}));</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="c1">// Serve static files from &#39;data&#39;
</span></span></span><span class="line"><span class="ln">11</span><span class="cl"><span class="nx">app</span><span class="p">.</span><span class="nx">use</span><span class="p">(</span><span class="s1">&#39;/data/*&#39;</span><span class="p">,</span> <span class="nx">serveStatic</span><span class="p">({</span> <span class="nx">root</span><span class="o">:</span> <span class="s1">&#39;./&#39;</span> <span class="p">}));</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">
</span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="c1">// API endpoint for dynamic location data
</span></span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="nx">app</span><span class="p">.</span><span class="kr">get</span><span class="p">(</span><span class="s1">&#39;/api/capitals&#39;</span><span class="p">,</span> <span class="p">(</span><span class="nx">c</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">  <span class="kr">const</span> <span class="nx">capitals</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">1</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Berlin&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">52.52</span><span class="p">,</span> <span class="nx">lng</span>: <span class="kt">13.405</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">2</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Paris&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">48.8566</span><span class="p">,</span> <span class="nx">lng</span>: <span class="kt">2.3522</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">3</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;London&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">51.5074</span><span class="p">,</span> <span class="nx">lng</span><span class="o">:</span> <span class="o">-</span><span class="mf">0.1278</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">4</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Madrid&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">40.4168</span><span class="p">,</span> <span class="nx">lng</span><span class="o">:</span> <span class="o">-</span><span class="mf">3.7038</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">5</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Rome&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">41.9028</span><span class="p">,</span> <span class="nx">lng</span>: <span class="kt">12.4964</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">6</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Vienna&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">48.2082</span><span class="p">,</span> <span class="nx">lng</span>: <span class="kt">16.3738</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">7</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Amsterdam&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">52.3676</span><span class="p">,</span> <span class="nx">lng</span>: <span class="kt">4.9041</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">8</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Brussels&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">50.8503</span><span class="p">,</span> <span class="nx">lng</span>: <span class="kt">4.3517</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">9</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Copenhagen&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">55.6761</span><span class="p">,</span> <span class="nx">lng</span>: <span class="kt">12.5683</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">25</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">10</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Stockholm&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">59.3293</span><span class="p">,</span> <span class="nx">lng</span>: <span class="kt">18.0686</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">11</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Oslo&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">59.9139</span><span class="p">,</span> <span class="nx">lng</span>: <span class="kt">10.7522</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">12</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Helsinki&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">60.1695</span><span class="p">,</span> <span class="nx">lng</span>: <span class="kt">24.9354</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">13</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Lisbon&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">38.7223</span><span class="p">,</span> <span class="nx">lng</span><span class="o">:</span> <span class="o">-</span><span class="mf">9.1393</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">29</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">14</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Dublin&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">53.3498</span><span class="p">,</span> <span class="nx">lng</span><span class="o">:</span> <span class="o">-</span><span class="mf">6.2603</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">15</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Warsaw&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">52.2297</span><span class="p">,</span> <span class="nx">lng</span>: <span class="kt">21.0122</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">16</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Prague&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">50.0755</span><span class="p">,</span> <span class="nx">lng</span>: <span class="kt">14.4378</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">32</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">17</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Budapest&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">47.4979</span><span class="p">,</span> <span class="nx">lng</span>: <span class="kt">19.0402</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">33</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">18</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Bratislava&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">48.1482</span><span class="p">,</span> <span class="nx">lng</span>: <span class="kt">17.1067</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">34</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">19</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Ljubljana&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">46.0569</span><span class="p">,</span> <span class="nx">lng</span>: <span class="kt">14.5051</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">35</span><span class="cl">    <span class="p">{</span> <span class="nx">id</span>: <span class="kt">20</span><span class="p">,</span> <span class="nx">name</span><span class="o">:</span> <span class="s1">&#39;Zagreb&#39;</span><span class="p">,</span> <span class="nx">lat</span>: <span class="kt">45.815</span><span class="p">,</span> <span class="nx">lng</span>: <span class="kt">15.9819</span> <span class="p">},</span>
</span></span><span class="line"><span class="ln">36</span><span class="cl">  <span class="p">];</span>
</span></span><span class="line"><span class="ln">37</span><span class="cl">  <span class="k">return</span> <span class="nx">c</span><span class="p">.</span><span class="nx">json</span><span class="p">(</span><span class="nx">capitals</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">38</span><span class="cl"><span class="p">});</span>
</span></span><span class="line"><span class="ln">39</span><span class="cl">
</span></span><span class="line"><span class="ln">40</span><span class="cl"><span class="c1">// Redirect root to public/index.html
</span></span></span><span class="line"><span class="ln">41</span><span class="cl"><span class="nx">app</span><span class="p">.</span><span class="kr">get</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">,</span> <span class="p">(</span><span class="nx">c</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="nx">c</span><span class="p">.</span><span class="nx">html</span><span class="p">(</span><span class="s1">&#39;&lt;script&gt;location.href=&#34;https://cbrueggenolte.de/public/index.html&#34;&lt;/script&gt;&#39;</span><span class="p">));</span>
</span></span><span class="line"><span class="ln">42</span><span class="cl">
</span></span><span class="line"><span class="ln">43</span><span class="cl"><span class="c1">// Start the server
</span></span></span><span class="line"><span class="ln">44</span><span class="cl"><span class="nx">serve</span><span class="p">(</span>
</span></span><span class="line"><span class="ln">45</span><span class="cl">  <span class="p">{</span>
</span></span><span class="line"><span class="ln">46</span><span class="cl">    <span class="nx">fetch</span>: <span class="kt">app.fetch</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">47</span><span class="cl">    <span class="nx">port</span>: <span class="kt">3000</span><span class="p">,</span>
</span></span><span class="line"><span class="ln">48</span><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="ln">49</span><span class="cl">  <span class="p">(</span><span class="nx">info</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="p">{</span>
</span></span><span class="line"><span class="ln">50</span><span class="cl">    <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="sb">`Server is running on http://localhost:</span><span class="si">${</span><span class="nx">info</span><span class="p">.</span><span class="nx">port</span><span class="si">}</span><span class="sb">`</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">51</span><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="ln">52</span><span class="cl"><span class="p">);</span></span></span></code></pre></div><p>Die API liefert eine Liste von Hauptstädten mit ihren Koordinaten. Diese werden später in der Karte als Marker angezeigt. Und mit den neu hinzugefügten Buttons kann der Nutzer die Hauptstädte dynamisch laden und entfernen.</p>
<h3 id="neue-daten">Neue Daten</h3>
<p>Und ins Verzeichnis <code>data</code> kommt neben der GeoJSON-Datei <code>vm_medium_countries.geo.json</code>, die du von <a href="https://geojson-maps.kyd.au/">geojson-maps.kyd.au</a> heruntergeladen hast, die neue Version der <a href="/geo-daten-dynamisch-mit-leaflet-js-laden/poi.geo.json">`poi.geo.json</a> Datei welche neue POI enthält.</p>
<p>Wie in der <code>map.js</code> Datei zu sehen ist, werden die Information zur Darstellung der POIs jetzt direkt aus den GeoJSON-Properties (<code>stroke</code>, <code>stroke-width</code>, <code>fill</code>, etc.) übernommen. So kann jeder POI individuell gestaltet werden – z.B. für besondere Städte oder Flächen.</p>
<h2 id="fazit">Fazit</h2>
<p>Durch die Nutzung von LayerGroups, Panes und klaren Funktionsaufrufen ist der Code jetzt deutlich modularer und leichter zu erweitern.</p>
<p>Wenn alles geklappt hat, solltest du nun eine funktionierende Leaflet-Karte haben, die Ländergrenzen anzeigt und dynamisch POIs und Hauptstädte laden kann und ungefähr so aussieht:</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
