{"id":4931,"date":"2026-04-02T14:54:34","date_gmt":"2026-04-02T14:54:34","guid":{"rendered":"https:\/\/adriafly.me\/?page_id=4931"},"modified":"2026-09-06T09:54:55","modified_gmt":"2026-09-06T09:54:55","slug":"leotar-gljiva","status":"publish","type":"page","link":"https:\/\/adriafly.me\/en\/leotar-gljiva\/","title":{"rendered":"Trebinje Paragliding Site"},"content":{"rendered":"\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Kamera na poleti\u0161tu<\/strong>, <strong>pogled u \u017eivo<\/strong><\/p>\n\n\n\n<div id=\"gljiva386-history\">\n\n  <div class=\"gljiva386-kamera\">\n\n    <div class=\"gljiva386-slide\">\n\n      <img decoding=\"async\"\n        id=\"gljiva386-slide1\"\n        class=\"gljiva386-bottom\"\n        src=\"\"\n        alt=\"Gljiva kamera\"\n      >\n\n      <img decoding=\"async\"\n        id=\"gljiva386-slide2\"\n        class=\"gljiva386-top\"\n        src=\"\"\n        alt=\"Gljiva kamera\"\n      >\n\n      <div id=\"gljiva386-time\"><\/div>\n\n    <\/div>\n\n  <\/div>\n\n\n  <div class=\"gljiva386-controls\">\n\n    <div class=\"gljiva386-arrows\">\n\n      <button type=\"button\" id=\"gljiva386-prev\">\u2190<\/button>\n\n      <button type=\"button\" id=\"gljiva386-next\">\u2192<\/button>\n\n    <\/div>\n\n    <input\n      type=\"range\"\n      id=\"gljiva386-slider\"\n      min=\"1\"\n      max=\"960\"\n      value=\"960\"\n    >\n\n  <\/div>\n\n<\/div>\n\n\n<style>\n\n#gljiva386-history {\n  width:100%;\n}\n\n#gljiva386-history .gljiva386-slide {\n  position:relative;\n  width:100%;\n  border-radius:15px;\n  overflow:hidden;\n  background:#000;\n}\n\n#gljiva386-history .gljiva386-slide img {\n  width:100%;\n  height:auto;\n  display:block;\n}\n\n#gljiva386-history .gljiva386-slide img.gljiva386-top {\n  position:absolute;\n  top:0;\n  left:0;\n  opacity:0;\n  transition:opacity .3s ease;\n}\n\n#gljiva386-history .gljiva386-slide img.gljiva386-top.active {\n  opacity:1;\n}\n\n#gljiva386-time {\n  position:absolute;\n  bottom:8px;\n  right:10px;\n\n  color:white;\n  font-size:14px;\n\n  background:rgba(0,0,0,.5);\n\n  padding:4px 8px;\n\n  border-radius:6px;\n\n  font-family:monospace;\n\n  z-index:5;\n}\n\n#gljiva386-history .gljiva386-controls {\n  margin-top:10px;\n  text-align:center;\n}\n\n#gljiva386-history .gljiva386-arrows {\n  display:flex;\n  justify-content:space-between;\n}\n\n#gljiva386-history .gljiva386-arrows button {\n  background:#3f48f4;\n  color:white;\n  border:none;\n\n  padding:10px 20px;\n\n  font-size:18px;\n\n  border-radius:5px;\n\n  cursor:pointer;\n}\n\n#gljiva386-history input[type=\"range\"] {\n  width:100%;\n  margin-top:10px;\n}\n\n<\/style>\n\n\n<script>\n(function () {\n\n  function startGljivaHistory() {\n\n    \/*\n     * ==================================================\n     * POSTAVKE\n     * ==================================================\n     *\/\n\n    var baseUrl =\n      \"https:\/\/holfuy.com\/dynamic\/camsave\/s386\/\";\n\n    var totalImages = 960;\n\n    var images = [];\n\n    var currentIndex =\n      totalImages - 1;\n\n    var baseTime = null;\n\n    var holdInterval = null;\n\n\n    \/*\n     * ==================================================\n     * ELEMENTI\n     * ==================================================\n     *\/\n\n    var slide1 =\n      document.getElementById(\n        \"gljiva386-slide1\"\n      );\n\n    var slide2 =\n      document.getElementById(\n        \"gljiva386-slide2\"\n      );\n\n    var overlay =\n      document.getElementById(\n        \"gljiva386-time\"\n      );\n\n    var slider =\n      document.getElementById(\n        \"gljiva386-slider\"\n      );\n\n    var prevBtn =\n      document.getElementById(\n        \"gljiva386-prev\"\n      );\n\n    var nextBtn =\n      document.getElementById(\n        \"gljiva386-next\"\n      );\n\n\n    if (\n      !slide1 ||\n      !slide2 ||\n      !overlay ||\n      !slider ||\n      !prevBtn ||\n      !nextBtn\n    ) {\n\n      console.error(\n        \"GLJIVA 386: elementi nisu prona\u0111eni.\"\n      );\n\n      return;\n    }\n\n\n    \/*\n     * ==================================================\n     * DATUM \u2192 URL\n     * ==================================================\n     *\/\n\n    function makeUrl(date) {\n\n      var year =\n        date.getFullYear();\n\n      var month =\n        String(\n          date.getMonth() + 1\n        ).padStart(2,\"0\");\n\n      var day =\n        String(\n          date.getDate()\n        ).padStart(2,\"0\");\n\n      var hour =\n        String(\n          date.getHours()\n        ).padStart(2,\"0\");\n\n      var minute =\n        String(\n          date.getMinutes()\n        ).padStart(2,\"0\");\n\n      return (\n        baseUrl +\n        year + \"-\" +\n        month + \"-\" +\n        day + \"_\" +\n        hour + \":\" +\n        minute +\n        \".jpg\"\n      );\n    }\n\n\n    \/*\n     * ==================================================\n     * PRIKAZ DATUMA\n     * ==================================================\n     *\/\n\n    function formatDisplay(date) {\n\n      return (\n        String(\n          date.getHours()\n        ).padStart(2,\"0\") +\n        \":\" +\n        String(\n          date.getMinutes()\n        ).padStart(2,\"0\") +\n        \"  \" +\n        date.getDate() +\n        \".\" +\n        (date.getMonth() + 1) +\n        \".\" +\n        date.getFullYear()\n      );\n    }\n\n\n    \/*\n     * ==================================================\n     * PROVJERA SLIKE\n     * ==================================================\n     *\/\n\n    function imageExists(\n      url,\n      callback\n    ) {\n\n      var img =\n        new Image();\n\n      img.onload =\n        function () {\n\n          callback(true);\n\n        };\n\n      img.onerror =\n        function () {\n\n          callback(false);\n\n        };\n\n      img.src =\n        \n    \n\n\n    \n     * ==================================================\n     * TRA\u017dI NAJNOVIJU SLIKU\n     * ==================================================\n     *\/\n\n    function findLatest(\n      callback\n    ) {\n\n      var now =\n        new Date();\n\n      \/*\n       * Po\u010dinjemo od trenutnog vremena.\n       * Ako nema slike, idemo minutu po minutu unazad.\n       *\/\n\n      function search(\n        offset\n      ) {\n\n        if (offset > 240) {\n\n          console.error(\n            \"GLJIVA 386: nema slike u zadnja 4 sata.\"\n          );\n\n          return;\n        }\n\n\n        var date =\n          new Date(now);\n\n        date.setMinutes(\n          now.getMinutes() - offset\n        );\n\n\n        var url =\n          makeUrl(date);\n\n\n        console.log(\n          \"GLJIVA 386: provjera\",\n          url\n        );\n\n\n        imageExists(\n          url,\n          function (exists) {\n\n            if (exists) {\n\n              console.log(\n                \"GLJIVA 386: PRONA\u0110ENA\",\n                url\n              );\n\n              callback(\n                date\n              );\n\n              return;\n            }\n\n\n            search(\n              offset + 1\n            );\n\n          }\n        );\n\n      }\n\n\n      search(0);\n\n    }\n\n\n    \/*\n     * ==================================================\n     * GENERIRANJE ARHIVE\n     * ==================================================\n     *\/\n\n    function generateImages() {\n\n      images = [];\n\n\n      for (\n        var i = 0;\n        i < totalImages;\n        i++\n      ) {\n\n        var date =\n          new Date(baseTime);\n\n\n        date.setMinutes(\n          baseTime.getMinutes() -\n          (\n            totalImages -\n            1 -\n            i\n          )\n        );\n\n\n        images.push({\n\n          url:\n            makeUrl(date),\n\n          date:\n            date\n\n        });\n\n      }\n\n    }\n\n\n    \/*\n     * ==================================================\n     * U\u010cITAJ SLIKU\n     * ==================================================\n     *\/\n\n    function loadImage(\n      index,\n      direction,\n      callback\n    ) {\n\n      if (\n        index < 0 ||\n        index >= images.length\n      ) {\n\n        return;\n      }\n\n\n      var item =\n        images[index];\n\n\n      imageExists(\n        item.url,\n        function (exists) {\n\n          if (exists) {\n\n            callback(\n              index\n            );\n\n            return;\n          }\n\n\n          \/*\n           * Ako ta minuta nema sliku,\n           * tra\u017eimo sljede\u0107u dostupnu.\n           *\/\n\n          var nextIndex =\n            index + direction;\n\n\n          if (\n            nextIndex < 0 ||\n            nextIndex >= images.length\n          ) {\n\n            return;\n          }\n\n\n          loadImage(\n            nextIndex,\n            direction,\n            callback\n          );\n\n        }\n      );\n\n    }\n\n\n    \/*\n     * ==================================================\n     * PRIKA\u017dI\n     * ==================================================\n     *\/\n\n    function showImage(\n      index\n    ) {\n\n      if (\n        !images.length\n      ) {\n\n        return;\n      }\n\n\n      var direction;\n\n\n      if (\n        index >\n        currentIndex\n      ) {\n\n        direction = 1;\n\n      }\n      else if (\n        index <\n        currentIndex\n      ) {\n\n        direction = -1;\n\n      }\n      else {\n\n        direction = -1;\n\n      }\n\n\n      if (index < 0) {\n\n        index = 0;\n\n      }\n\n\n      if (\n        index >= images.length\n      ) {\n\n        index =\n          images.length - 1;\n      }\n\n\n      loadImage(\n        index,\n        direction,\n        function (\n          realIndex\n        ) {\n\n          currentIndex =\n            realIndex;\n\n\n          var item =\n            images[\n              realIndex\n            ];\n\n\n          \/*\n           * Cache bust samo kod prikaza.\n           *\/\n\n          var displayUrl =\n            item.url +\n            \"?v=\" +\n            Date.now();\n\n\n          slide2.src =\n            \n\n\n          \n            \"\"\n          );\n\n\n          setTimeout(\n            function () {\n\n              slide1.src =\n                \n\n              \n                \"\"\n              );\n\n            },\n            200\n          );\n\n\n          overlay.textContent =\n            formatDisplay(\n              item.date\n            );\n\n\n          slider.value =\n            currentIndex + 1;\n\n\n          console.log(\n            \"GLJIVA 386: prikaz\",\n            item.url\n          );\n\n        }\n      );\n\n    }\n\n\n    \/*\n     * ==================================================\n     * PREV\n     * ==================================================\n     *\/\n\n    prevBtn.onclick =\n      function () {\n\n        showImage(\n          currentIndex - 1\n        );\n\n      };\n\n\n    \/*\n     * ==================================================\n     * NEXT\n     * ==================================================\n     *\/\n\n    nextBtn.onclick =\n      function () {\n\n        showImage(\n          currentIndex + 1\n        );\n\n      };\n\n\n    \/*\n     * ==================================================\n     * HOLD\n     * ==================================================\n     *\/\n\n    function startHold(\n      direction\n    ) {\n\n      showImage(\n        currentIndex +\n        direction\n      );\n\n\n      clearInterval(\n        holdInterval\n      );\n\n\n      holdInterval =\n        setInterval(\n          function () {\n\n            showImage(\n              currentIndex +\n              direction\n            );\n\n          },\n          500\n        );\n\n    }\n\n\n    function stopHold() {\n\n      clearInterval(\n        holdInterval\n      );\n\n      holdInterval =\n        null;\n\n    }\n\n\n    prevBtn.addEventListener(\n      \"mousedown\",\n      function () {\n\n        startHold(-1);\n\n      }\n    );\n\n    prevBtn.addEventListener(\n      \"mouseup\",\n      stopHold\n    );\n\n    prevBtn.addEventListener(\n      \"mouseleave\",\n      stopHold\n    );\n\n\n    nextBtn.addEventListener(\n      \"mousedown\",\n      function () {\n\n        startHold(1);\n\n      }\n    );\n\n    nextBtn.addEventListener(\n      \"mouseup\",\n      stopHold\n    );\n\n    nextBtn.addEventListener(\n      \"mouseleave\",\n      stopHold\n    );\n\n\n    \/*\n     * MOBILE\n     *\/\n\n    prevBtn.addEventListener(\n      \"touchstart\",\n      function () {\n\n        startHold(-1);\n\n      },\n      {\n        passive:true\n      }\n    );\n\n    prevBtn.addEventListener(\n      \"touchend\",\n      stopHold\n    );\n\n    prevBtn.addEventListener(\n      \"touchcancel\",\n      stopHold\n    );\n\n\n    nextBtn.addEventListener(\n      \"touchstart\",\n      function () {\n\n        startHold(1);\n\n      },\n      {\n        passive:true\n      }\n    );\n\n    nextBtn.addEventListener(\n      \"touchend\",\n      stopHold\n    );\n\n    nextBtn.addEventListener(\n      \"touchcancel\",\n      stopHold\n    );\n\n\n    \/*\n     * ==================================================\n     * SLIDER\n     * ==================================================\n     *\/\n\n    slider.addEventListener(\n      \"input\",\n      function (event) {\n\n        var index =\n          parseInt(\n            event.target.value,\n            10\n          ) - 1;\n\n\n        showImage(\n          index\n        );\n\n      }\n    );\n\n\n    \/*\n     * ==================================================\n     * POKRENI\n     * ==================================================\n     *\/\n\n    console.log(\n      \"GLJIVA 386 HISTORY: START\"\n    );\n\n\n    findLatest(\n      function (\n        latestTime\n      ) {\n\n        baseTime =\n          latestTime;\n\n\n        console.log(\n          \"GLJIVA 386: zadnja slika:\",\n          baseTime\n        );\n\n\n        generateImages();\n\n\n        currentIndex =\n          totalImages - 1;\n\n\n        showImage(\n          currentIndex\n        );\n\n      }\n    );\n\n  }\n\n\n  \/*\n   * ==================================================\n   * WORDPRESS \/ DOM\n   * ==================================================\n   *\/\n\n  if (\n    document.readyState ===\n    \"loading\"\n  ) {\n\n    document.addEventListener(\n      \"DOMContentLoaded\",\n      startGljivaHistory\n    );\n\n  }\n  else {\n\n    startGljivaHistory();\n\n  }\n\n})();\n<\/script>\n\n\n\n<div style=\"height:64px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Meteorolo\u0161ka stanica na poleti\u0161tu<\/strong><\/p>\n\n\n<div class=\"adriafly-wrap\">\n<h3>Leotar - Gljiva<\/h3>\n<div id=\"adriafly_6a9d38ebaaa8f_offline\" style=\"margin-bottom:6px;\"><\/div>\n\n<div class=\"adriafly-top\">\n\n<div class=\"box\">\n<div class=\"label\">Smjer<\/div>\n<svg id=\"adriafly_6a9d38ebaaa8f_arrow\" width=\"60\" height=\"60\" viewBox=\"0 0 100 100\">\n<g transform=\"translate(50,50)\">\n<rect x=\"-3\" y=\"-30\" width=\"6\" height=\"50\" fill=\"#4b5563\"\/>\n<polygon points=\"0,-45 14,-30 -14,-30\" fill=\"#4b5563\"\/>\n<\/g>\n<\/svg>\n<\/div>\n\n<div class=\"box\">\n<div class=\"label\">Vjetar<\/div>\n<div class=\"val\"><span id=\"adriafly_6a9d38ebaaa8f_wind\">\u2014<\/span> m\/s<\/div>\n<\/div>\n\n<div class=\"box\">\n<div class=\"label\">Udari<\/div>\n<div class=\"val\"><span id=\"adriafly_6a9d38ebaaa8f_gust\">\u2014<\/span> m\/s<\/div>\n<\/div>\n\n<div class=\"box\">\n<div class=\"label\">Minimalno<\/div>\n<div class=\"val\"><span id=\"adriafly_6a9d38ebaaa8f_min\">\u2014<\/span> m\/s<\/div>\n<\/div>\n\n<div class=\"box\">\n<div class=\"label\">Temperatura<\/div>\n<div class=\"val\"><span id=\"adriafly_6a9d38ebaaa8f_temp\">\u2014<\/span> \u00b0C<\/div>\n<\/div>\n\n<\/div>\n\n<div class=\"adriafly-chart-wrap\">\n<canvas id=\"adriafly_6a9d38ebaaa8f_chart\"><\/canvas>\n<\/div>\n<\/div>\n\n<script src=\"\"><\/script>\n<script>\n(async function(){\n\nfunction kmhToMs(v){\n    return v \/ 3.6;\n}\n\nconst elWind = document.getElementById('adriafly_6a9d38ebaaa8f_wind');\nconst elGust = document.getElementById('adriafly_6a9d38ebaaa8f_gust');\nconst elMin = document.getElementById('adriafly_6a9d38ebaaa8f_min');\nconst elTemp = document.getElementById('adriafly_6a9d38ebaaa8f_temp');\nconst arrow = document.getElementById('adriafly_6a9d38ebaaa8f_arrow');\nconst offlineEl = document.getElementById('adriafly_6a9d38ebaaa8f_offline');\nconst ctx = document.getElementById('adriafly_6a9d38ebaaa8f_chart').getContext('2d');\n\nlet chart=null;\n\nasync function loadData(){\nconst res = await fetch('https:\/\/adriafly.me\/wp-admin\/admin-ajax.php?action=',{cache:'no-store'});\nconst json = await res.json();\nif(!json.success) return;\n\nconst last = json.data.last;\nconst recent = json.data.recent;\n\nlet offlineMsg = '';\nif(last && last.timestamp){\n    const ts = last.timestamp.replace(\/-\/g,'\/');\n    const lastDate = new Date(ts);\n    const now = new Date();\n\n    if(now - lastDate > 3600*1000){\n        const hh = lastDate.getHours().toString().padStart(2,'0');\n        const mm = lastDate.getMinutes().toString().padStart(2,'0');\n        const dd = lastDate.getDate().toString().padStart(2,'0');\n        const mmth = (lastDate.getMonth()+1).toString().padStart(2,'0');\n        const yyyy = lastDate.getFullYear();\n\n        offlineMsg = `OFFLINE ${hh}:${mm} ${dd}.${mmth}.${yyyy}`;\n    }\n}\nofflineEl.textContent = offlineMsg;\nofflineEl.style.color = offlineMsg ? 'red' : '';\n\nelWind.textContent = kmhToMs(last.wind_speed).toFixed(1);\nelGust.textContent = kmhToMs(last.wind_gust).toFixed(1);\nelMin.textContent = kmhToMs(last.wind_min).toFixed(1);\nelTemp.textContent = last.temp;\n\nconst angle = last.wind_dir!==null ? (last.wind_dir+180)%360 : 0;\narrow.style.transform = 'rotate('+angle+'deg)';\n\nconst step = 12;\nconst filtered = recent.filter((_,i)=>i%step===0);\n\nconst labels = filtered.map(r=>r.timestamp.substring(11,16));\nconst wind = filtered.map(r=>kmhToMs(r.wind_speed));\nconst gust = filtered.map(r=>kmhToMs(r.wind_gust));\nconst dirs = filtered.map(r=>r.wind_dir);\n\nif(chart) chart.destroy();\n\nchart = new Chart(ctx,{\ntype:'line',\ndata:{\nlabels:labels,\ndatasets:[\n{label:'Vjetar', data:wind, borderColor:'#0ea5a4', backgroundColor:'rgba(14,165,164,0.12)', fill:true, tension:0.35, pointRadius:0},\n{label:'Udari', data:gust, borderColor:'#f97316', backgroundColor:'rgba(249,115,22,0.12)', fill:true, tension:0.35, pointRadius:0}\n]\n},\noptions:{\nresponsive:true,\nmaintainAspectRatio:false,\nlayout:{padding:{top:30}},\nplugins:{legend:{position:'bottom', labels:{usePointStyle:true, pointStyle:'circle', boxWidth:8, boxHeight:8}}},\nscales:{\ny:{\ntitle:{display:true,text:'m\/s'},\nmin:0,\nmax:Math.max(...gust)*1.2\n},\nx:{ticks:{maxRotation:0,autoSkip:true,maxTicksLimit:15}}\n}\n},\nplugins:[{\nid:'windArrows',\nafterDatasetsDraw(chart){\nconst ctx = chart.ctx;\nconst xAxis = chart.scales.x;\nconst y = chart.chartArea.top - 5;\n\nconst isMobile = window.innerWidth < 600;\nconst arrowStep = isMobile ? 3 : 1;\n\nfor(let i=0;i<dirs.length;i+=arrowStep){\n\nconst angle = (dirs[i]+180)%360;\nconst x = xAxis.getPixelForValue(i);\nconst s = gust[i]??0;\n\nlet color = \"#16a34a\";\nif(s > 4 && s <= 7) color = \"#facc15\";\nif(s > 7) color = \"#dc2626\";\n\nctx.save();\nctx.translate(x,y);\nctx.rotate(angle*Math.PI\/180);\nctx.strokeStyle=color;\nctx.fillStyle=color;\nctx.lineWidth=2;\n\nctx.beginPath();\nctx.moveTo(0,-10);\nctx.lineTo(0,10);\nctx.stroke();\n\nctx.beginPath();\nctx.moveTo(0,-10);\nctx.lineTo(6,0);\nctx.lineTo(-6,0);\nctx.closePath();\nctx.fill();\n\nctx.restore();\n}\n}\n}]\n});\n}\n\nawait loadData();\nsetInterval(loadData,60000);\n\n})();\n<\/script>\n\n<style>\n.adriafly-wrap{font-family:Arial,sans-serif;width:100%;background:#fff;padding:14px;border-radius:12px;border:1px solid #ddd;}\n.adriafly-top{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:12px;}\n.box{background:#f7f9fc;border-radius:10px;padding:10px 12px;min-width:90px;text-align:center;}\n.label{font-size:11px;color:#6b7280;text-transform:uppercase;margin-bottom:4px;}\n.val{font-size:16px;font-weight:bold;color:#111;}\n.adriafly-chart-wrap{height:250px;}\n<\/style>\n\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Osnovni podaci<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Trebinje je turisti\u010dki grad koji bilje\u017ei znatan broj tandemskih letova sa poleti\u0161ta Gljiva. Poleti\u0161te se nalazi neposredno ispod istoimene austrougarske tvr\u0111ave. Zbog prostranosti, nagiba terena i travnate povr\u0161ine je relativno nezahtijevno paraglajding poleti\u0161te.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><br><strong>Upozorenja<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Posavjetujte se sa lokalnim pilotima i pratite promjenjive meteorolo\u0161ke uslove. Vjetar na poleti\u0161tu i na podru\u010dju kotline \u010desto zbog ja\u010dine i promjene pravca tokom dana mo\u017ee postati neugodan za leta\u010dke aktivnosti. <br>Prije polijetanja potrebno kontaktirati lokalni paraglajding klub <a href=\"https:\/\/gotrebinje.com\/en\/destinations\/paraglajding-aero-klub\/\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Aero klub Trebinje<\/em><\/a> na broj telefona <a href=\"tel:+385911215186\">+387 65 545 070<\/a><\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><br><strong>Vazdu\u0161ni prostor<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Potrebna najava vazduhoplovnih aktivnosti kontroli vazdu\u0161nog saobra\u0107aja <a href=\"https:\/\/www.bhansa.gov.ba\/sr\/kontrola-vazdusnog-saobracaja\" target=\"_blank\" rel=\"noreferrer noopener\">BHANSA<\/a> u Banjoj Luci.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Lokacija i pristup<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Do poleti\u0161ta je dostup mogu\u0107 putni\u010dkim automobilom. Preporu\u010duje se <a href=\"https:\/\/alotaxitrebinje.com\/contact\/\" target=\"_blank\" rel=\"noreferrer noopener\">kori\u0161tenje gradskog taksija<\/a> &#8211; voza\u010di uglavnom poznaju relaciju i \u010desto voze izletnike i paraglajderiste.<br><br><\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Nadmorska visina<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br>Poleti\u0161te se nalazi na isto\u010dnom grebenu na visini oko 990m NV. Slijetanje se izvodi na oficijelno sleti\u0161te &#8211; travnatu povr\u0161inu zapadno Doma penzionera pored rijeke Trebi\u0161njice. Slijetanje je mogu\u0107e i sleti\u0161te kod Vatrogasnog doma, ali za ovo sleti\u0161te morate imati dovoljno visine za prelet grada. Trebinje se nalazi na nadmorskoj visini oko 275m NV, \u0161to omogu\u0107ava let sa visinskom razlikom ve\u0107om od 700 m.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><math xmlns=\"http:\/\/www.w3.org\/1998\/Math\/MathML\"><semantics><\/semantics><\/math>Poleti\u0161te i sleti\u0161te na mapi<\/strong><br><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>poleti\u0161te: <a href=\"https:\/\/maps.app.goo.gl\/8nyUin7EDvrpTNb68\" target=\"_blank\" rel=\"noreferrer noopener\">42.7351, 18.3739<\/a><\/li>\n\n\n\n<li>sleti\u0161te 1: <a href=\"https:\/\/maps.app.goo.gl\/PjuXtC96j3PsNLxQA\" target=\"_blank\" rel=\"noreferrer noopener\">42.715887, 18.350184<\/a><\/li>\n\n\n\n<li>sleti\u0161te 2: <a href=\"https:\/\/maps.app.goo.gl\/dvGSTnK7usFk5o2KA\" target=\"_blank\" rel=\"noreferrer noopener\">42.707606, 18.337355<\/a><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full has-custom-border\"><a href=\"https:\/\/maps.app.goo.gl\/7VfWkfjtBpZc1oWc8\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"675\" src=\"https:\/\/adriafly.me\/wp-content\/uploads\/2026\/04\/trebinje.png\" alt=\"\" class=\"wp-image-4937\" style=\"border-top-left-radius:25px;border-top-right-radius:25px;border-bottom-left-radius:25px;border-bottom-right-radius:25px\" srcset=\"https:\/\/adriafly.me\/wp-content\/uploads\/2026\/04\/trebinje.png 1200w, https:\/\/adriafly.me\/wp-content\/uploads\/2026\/04\/trebinje-768x432.png 768w, https:\/\/adriafly.me\/wp-content\/uploads\/2026\/04\/trebinje-100x56.png 100w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><\/figure>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Kamera na poleti\u0161tu, pogled u \u017eivo \u2190 \u2192 Meteorolo\u0161ka stanica na poleti\u0161tu Osnovni podaci Trebinje je turisti\u010dki grad koji bilje\u017ei znatan broj tandemskih letova sa poleti\u0161ta Gljiva. Poleti\u0161te se nalazi neposredno ispod istoimene austrougarske tvr\u0111ave. Zbog prostranosti, nagiba terena i travnate povr\u0161ine je relativno nezahtijevno paraglajding poleti\u0161te. Upozorenja Posavjetujte se [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1807,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4931","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Paraglajding letili\u0161te Trebinje - Adriafly - Paragliding Club<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/adriafly.me\/en\/leotar-gljiva\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Paraglajding letili\u0161te Trebinje - Adriafly - Paragliding Club\" \/>\n<meta property=\"og:description\" content=\"Kamera na poleti\u0161tu, pogled u \u017eivo \u2190 \u2192 Meteorolo\u0161ka stanica na poleti\u0161tu Osnovni podaci Trebinje je turisti\u010dki grad koji bilje\u017ei znatan broj tandemskih letova sa poleti\u0161ta Gljiva. Poleti\u0161te se nalazi neposredno ispod istoimene austrougarske tvr\u0111ave. Zbog prostranosti, nagiba terena i travnate povr\u0161ine je relativno nezahtijevno paraglajding poleti\u0161te. Upozorenja Posavjetujte se [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/adriafly.me\/en\/leotar-gljiva\/\" \/>\n<meta property=\"og:site_name\" content=\"Adriafly - Paragliding Club\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/AdriaFly\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-06T09:54:55+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/adriafly.me\/wp-content\/uploads\/2024\/02\/TB-Panorama1-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1279\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/adriafly.me\\\/leotar-gljiva\\\/\",\"url\":\"https:\\\/\\\/adriafly.me\\\/leotar-gljiva\\\/\",\"name\":\"Paraglajding letili\u0161te Trebinje - Adriafly - Paragliding Club\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/adriafly.me\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/adriafly.me\\\/leotar-gljiva\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/adriafly.me\\\/leotar-gljiva\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/adriafly.me\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/TB-Panorama1-scaled.jpg\",\"datePublished\":\"2026-04-02T14:54:34+00:00\",\"dateModified\":\"2026-09-06T09:54:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/adriafly.me\\\/leotar-gljiva\\\/#breadcrumb\"},\"inLanguage\":\"en-NZ\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/adriafly.me\\\/leotar-gljiva\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-NZ\",\"@id\":\"https:\\\/\\\/adriafly.me\\\/leotar-gljiva\\\/#primaryimage\",\"url\":\"https:\\\/\\\/adriafly.me\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/TB-Panorama1-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/adriafly.me\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/TB-Panorama1-scaled.jpg\",\"width\":2560,\"height\":1279},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/adriafly.me\\\/leotar-gljiva\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Po\u010detna\",\"item\":\"https:\\\/\\\/adriafly.me\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Paraglajding letili\u0161te Trebinje\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/adriafly.me\\\/#website\",\"url\":\"https:\\\/\\\/adriafly.me\\\/\",\"name\":\"Adriafly - Paragliding Club\",\"description\":\"Paraglajding klub Herceg Novi\",\"publisher\":{\"@id\":\"https:\\\/\\\/adriafly.me\\\/#organization\"},\"alternateName\":\"Adriafly\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/adriafly.me\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-NZ\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/adriafly.me\\\/#organization\",\"name\":\"Adriafly - Paragliding Club\",\"url\":\"https:\\\/\\\/adriafly.me\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-NZ\",\"@id\":\"https:\\\/\\\/adriafly.me\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/adriafly.me\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/02-LOGO-nobackgr.png\",\"contentUrl\":\"https:\\\/\\\/adriafly.me\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/02-LOGO-nobackgr.png\",\"width\":1536,\"height\":1349,\"caption\":\"Adriafly - Paragliding Club\"},\"image\":{\"@id\":\"https:\\\/\\\/adriafly.me\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/AdriaFly\",\"https:\\\/\\\/www.instagram.com\\\/adriafly.me\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Paraglajding letili\u0161te Trebinje - Adriafly - Paragliding Club","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/adriafly.me\/en\/leotar-gljiva\/","og_locale":"en_US","og_type":"article","og_title":"Paraglajding letili\u0161te Trebinje - Adriafly - Paragliding Club","og_description":"Kamera na poleti\u0161tu, pogled u \u017eivo \u2190 \u2192 Meteorolo\u0161ka stanica na poleti\u0161tu Osnovni podaci Trebinje je turisti\u010dki grad koji bilje\u017ei znatan broj tandemskih letova sa poleti\u0161ta Gljiva. Poleti\u0161te se nalazi neposredno ispod istoimene austrougarske tvr\u0111ave. Zbog prostranosti, nagiba terena i travnate povr\u0161ine je relativno nezahtijevno paraglajding poleti\u0161te. Upozorenja Posavjetujte se [&hellip;]","og_url":"https:\/\/adriafly.me\/en\/leotar-gljiva\/","og_site_name":"Adriafly - Paragliding Club","article_publisher":"https:\/\/www.facebook.com\/AdriaFly","article_modified_time":"2026-09-06T09:54:55+00:00","og_image":[{"width":2560,"height":1279,"url":"http:\/\/adriafly.me\/wp-content\/uploads\/2024\/02\/TB-Panorama1-scaled.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/adriafly.me\/leotar-gljiva\/","url":"https:\/\/adriafly.me\/leotar-gljiva\/","name":"Paraglajding letili\u0161te Trebinje - Adriafly - Paragliding Club","isPartOf":{"@id":"https:\/\/adriafly.me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/adriafly.me\/leotar-gljiva\/#primaryimage"},"image":{"@id":"https:\/\/adriafly.me\/leotar-gljiva\/#primaryimage"},"thumbnailUrl":"https:\/\/adriafly.me\/wp-content\/uploads\/2024\/02\/TB-Panorama1-scaled.jpg","datePublished":"2026-04-02T14:54:34+00:00","dateModified":"2026-09-06T09:54:55+00:00","breadcrumb":{"@id":"https:\/\/adriafly.me\/leotar-gljiva\/#breadcrumb"},"inLanguage":"en-NZ","potentialAction":[{"@type":"ReadAction","target":["https:\/\/adriafly.me\/leotar-gljiva\/"]}]},{"@type":"ImageObject","inLanguage":"en-NZ","@id":"https:\/\/adriafly.me\/leotar-gljiva\/#primaryimage","url":"https:\/\/adriafly.me\/wp-content\/uploads\/2024\/02\/TB-Panorama1-scaled.jpg","contentUrl":"https:\/\/adriafly.me\/wp-content\/uploads\/2024\/02\/TB-Panorama1-scaled.jpg","width":2560,"height":1279},{"@type":"BreadcrumbList","@id":"https:\/\/adriafly.me\/leotar-gljiva\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Po\u010detna","item":"https:\/\/adriafly.me\/"},{"@type":"ListItem","position":2,"name":"Paraglajding letili\u0161te Trebinje"}]},{"@type":"WebSite","@id":"https:\/\/adriafly.me\/#website","url":"https:\/\/adriafly.me\/","name":"Adriafly - Paragliding Club","description":"Paraglajding klub Herceg Novi","publisher":{"@id":"https:\/\/adriafly.me\/#organization"},"alternateName":"Adriafly","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/adriafly.me\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-NZ"},{"@type":"Organization","@id":"https:\/\/adriafly.me\/#organization","name":"Adriafly - Paragliding Club","url":"https:\/\/adriafly.me\/","logo":{"@type":"ImageObject","inLanguage":"en-NZ","@id":"https:\/\/adriafly.me\/#\/schema\/logo\/image\/","url":"https:\/\/adriafly.me\/wp-content\/uploads\/2025\/08\/02-LOGO-nobackgr.png","contentUrl":"https:\/\/adriafly.me\/wp-content\/uploads\/2025\/08\/02-LOGO-nobackgr.png","width":1536,"height":1349,"caption":"Adriafly - Paragliding Club"},"image":{"@id":"https:\/\/adriafly.me\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/AdriaFly","https:\/\/www.instagram.com\/adriafly.me\/"]}]}},"_links":{"self":[{"href":"https:\/\/adriafly.me\/en\/wp-json\/wp\/v2\/pages\/4931","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adriafly.me\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/adriafly.me\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/adriafly.me\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/adriafly.me\/en\/wp-json\/wp\/v2\/comments?post=4931"}],"version-history":[{"count":6,"href":"https:\/\/adriafly.me\/en\/wp-json\/wp\/v2\/pages\/4931\/revisions"}],"predecessor-version":[{"id":5559,"href":"https:\/\/adriafly.me\/en\/wp-json\/wp\/v2\/pages\/4931\/revisions\/5559"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/adriafly.me\/en\/wp-json\/wp\/v2\/media\/1807"}],"wp:attachment":[{"href":"https:\/\/adriafly.me\/en\/wp-json\/wp\/v2\/media?parent=4931"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}