{"id":1641,"date":"2026-02-09T16:55:25","date_gmt":"2026-02-09T15:55:25","guid":{"rendered":"https:\/\/nash.rskcom.net\/nash-suites-tracking\/"},"modified":"2026-04-09T19:35:09","modified_gmt":"2026-04-09T17:35:09","slug":"nash-suites-tracking","status":"publish","type":"page","link":"https:\/\/nash.rskcom.net\/en\/nash-suites-tracking\/","title":{"rendered":"Nash Suites &#8211; Tracking"},"content":{"rendered":"\n<div id=\"map\" style=\"height:600px;\"><\/div>\n\n<script src=\"https:\/\/api.mapbox.com\/mapbox-gl-js\/v2.15.0\/mapbox-gl.js\"><\/script>\n<link href=\"https:\/\/api.mapbox.com\/mapbox-gl-js\/v2.15.0\/mapbox-gl.css\" rel=\"stylesheet\"\/>\n\n<style>\n.custom-marker {\n  width: 44px;\n  height: 55px;\n  margin-bottom: 10px;\n}\n\n.custom-marker img {\n  width: 100%;\n  height: 100%;\n}\n<\/style>\n\n<script>\n\nmapboxgl.accessToken = 'pk.eyJ1IjoicnNrY29tIiwiYSI6ImNtbGV5N2w2dDFrOTIzZHBrbjVvN3Ewc2oifQ.UMyqFwp5dxeYKHe-FTCYuA';\n\n\/\/ ---------------- RUTA DEFINIDA POR TI ----------------\nlet routeCoords = [\n[6.105667545392051,46.22700767368728],\n[6.105508987952706,46.227184865738224],\n[6.105919042029595,46.227266101512214],\n[6.106450442838491,46.22680791449588],\n[6.106994720304542,46.22631902842154],\n[6.106158849162257,46.225768709619615],\n[6.105633096913167,46.22612632057185],\n[6.105030697104484,46.22652672014896],\n[6.105105516979214,46.22715820143464],\n[6.1067066623576,46.227955306812234],\n[6.109090774691634,46.22919850891354],\n[6.110552403985351,46.2302016323823],\n[6.111973981622464,46.23129888240916],\n[6.1121934055804426,46.23156476459301],\n[6.112183477271711,46.232013118273855],\n[6.111720705589602,46.232284133653955],\n[6.111165926975374,46.23226154596107],\n[6.110776863626777,46.231940659986584],\n[6.110776863626777,46.231236774503415],\n[6.109998736929579,46.230698503042845]\n];\n\nlet initialized = false;\n\n\/\/ ---------------- CREAR MAPA ----------------\nconst map = new mapboxgl.Map({\n  container: 'map',\n  style: 'mapbox:\/\/styles\/mapbox\/streets-v12',\n  zoom: 17\n});\n\n\/\/ ---------------- RUTA TIPO GOOGLE (A \u2192 B) ----------------\nasync function getSimpleRoute(start, end){\n\n  const url = `https:\/\/api.mapbox.com\/directions\/v5\/mapbox\/driving\/${start[0]},${start[1]};${end[0]},${end[1]}?geometries=geojson&overview=full&alternatives=false&access_token=${mapboxgl.accessToken}`;\n\n  const res = await fetch(url);\n  const data = await res.json();\n\n  const route = data.routes[0].geometry;\n\n  map.addSource('route', {\n    type: 'geojson',\n    data: {\n      type: 'Feature',\n      geometry: route\n    }\n  });\n\n  \n}\n\n\/\/ ---------------- LOAD ----------------\nmap.on('load', () => {\n\n  const start = routeCoords[0];\n  const end   = routeCoords[routeCoords.length - 1];\n\n  getSimpleRoute(start, end);\n\n  \/\/ ---------------- MARCADOR EST\u00c1TICO ----------------\n  const staticEl = document.createElement('div');\n  const staticImg = document.createElement('img');\n  staticImg.src = 'https:\/\/nash.rskcom.net\/wp-content\/uploads\/2026\/03\/icon_hotel.png';\n  staticEl.appendChild(staticImg);\n\n  new mapboxgl.Marker({\n    element: staticEl,\n    anchor: 'bottom'\n  })\n  .setLngLat([6.105703, 46.22670])\n  .addTo(map);\n});\n\n\/\/ ---------------- MARCADORES DE BUSES ----------------\nlet markers = {};\n\n\/\/ ---------------- ACTUALIZAR POSICIONES ----------------\nasync function updateBus(){\n\n  try{\n\n    const r = await fetch('https:\/\/nash.rskcom.net\/api\/get_location.php');\n    const buses = await r.json();\n\n    if(!buses) return;\n\n    let activeBusIds = [];\n\n    buses.forEach(bus => {\n\n      const lng = parseFloat(bus.longitude);\n      const lat = parseFloat(bus.latitude);\n\n      activeBusIds.push(bus.bus_id);\n\n      if(!markers[bus.bus_id]){\n\n        const el = document.createElement('div');\n        el.className = 'custom-marker';\n\n        const img = document.createElement('img');\n        img.src = 'https:\/\/nash.rskcom.net\/wp-content\/uploads\/2026\/03\/icon_bus.png';\n\n        el.appendChild(img);\n\n        markers[bus.bus_id] = new mapboxgl.Marker({\n          element: el,\n          anchor: 'bottom'\n        })\n        .setLngLat([lng, lat])\n        .addTo(map);\n\n      } else {\n        markers[bus.bus_id].setLngLat([lng, lat]);\n      }\n\n    });\n\n    Object.keys(markers).forEach(id => {\n      if(!activeBusIds.includes(id)){\n        markers[id].remove();\n        delete markers[id];\n      }\n    });\n\n    if(!initialized){\n      map.jumpTo({\n        center: [6.108607087259592, 46.22903189831529],\n        zoom: 14\n      });\n      initialized = true;\n    }\n\n  }catch(e){\n    console.log(\"Error:\", e);\n  }\n}\n\n\/\/ ---------------- LOOP ----------------\nupdateBus();\nsetInterval(updateBus, 10000);\n\n<\/script>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-1641","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/nash.rskcom.net\/en\/wp-json\/wp\/v2\/pages\/1641","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nash.rskcom.net\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/nash.rskcom.net\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/nash.rskcom.net\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nash.rskcom.net\/en\/wp-json\/wp\/v2\/comments?post=1641"}],"version-history":[{"count":2,"href":"https:\/\/nash.rskcom.net\/en\/wp-json\/wp\/v2\/pages\/1641\/revisions"}],"predecessor-version":[{"id":1956,"href":"https:\/\/nash.rskcom.net\/en\/wp-json\/wp\/v2\/pages\/1641\/revisions\/1956"}],"wp:attachment":[{"href":"https:\/\/nash.rskcom.net\/en\/wp-json\/wp\/v2\/media?parent=1641"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}