camino frances
This commit is contained in:
parent
7c048d7a9d
commit
064c75866c
|
|
@ -10,6 +10,22 @@ import java.util.List;
|
|||
|
||||
public class CaminoData {
|
||||
|
||||
private static List<GPXParser.PuntoGPS> fullTrackCache = null;
|
||||
|
||||
public static List<GPXParser.PuntoGPS> getFullTrack(Context context) {
|
||||
if (fullTrackCache == null) {
|
||||
try {
|
||||
InputStream is = context.getResources().openRawResource(R.raw.camino_frances);
|
||||
fullTrackCache = GPXParser.parse(is);
|
||||
is.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
fullTrackCache = new ArrayList<>();
|
||||
}
|
||||
}
|
||||
return fullTrackCache;
|
||||
}
|
||||
|
||||
private static String loadJSONFromRaw(Context context, int resourceId) {
|
||||
try {
|
||||
InputStream is = context.getResources().openRawResource(resourceId);
|
||||
|
|
@ -139,4 +155,141 @@ public class CaminoData {
|
|||
}
|
||||
return lista;
|
||||
}
|
||||
|
||||
public static List<Etapa> getEtapasPlanificadas(Context context, double maxDist) {
|
||||
List<Etapa> etapas = new ArrayList<>();
|
||||
String json = loadJSONFromRaw(context, R.raw.caminofrances);
|
||||
List<GPXParser.PuntoGPS> track = getFullTrack(context);
|
||||
|
||||
if (json == null || track.isEmpty()) return etapas;
|
||||
|
||||
try {
|
||||
JSONArray pueblos = new JSONArray(json);
|
||||
int etapaNum = 1;
|
||||
int currentPuebloIndex = 0;
|
||||
|
||||
while (currentPuebloIndex < pueblos.length() - 1) {
|
||||
JSONObject inicioPueblo = pueblos.getJSONObject(currentPuebloIndex);
|
||||
double distAcumulada = 0;
|
||||
int desnivelPos = 0;
|
||||
int desnivelNeg = 0;
|
||||
List<Integer> perfil = new ArrayList<>();
|
||||
|
||||
int lastAlbergueIndex = -1;
|
||||
double distAtLastAlbergue = 0;
|
||||
int posAtLastAlbergue = 0;
|
||||
int negAtLastAlbergue = 0;
|
||||
List<Integer> perfilAtLastAlbergue = new ArrayList<>();
|
||||
|
||||
int searchPuebloIndex = currentPuebloIndex + 1;
|
||||
|
||||
while (searchPuebloIndex < pueblos.length()) {
|
||||
JSONObject pPrev = pueblos.getJSONObject(searchPuebloIndex - 1);
|
||||
JSONObject pCurr = pueblos.getJSONObject(searchPuebloIndex);
|
||||
|
||||
// Calculamos la distancia y desnivel entre estos dos pueblos usando el GPX
|
||||
SegmentInfo segment = getSegmentInfo(track,
|
||||
pPrev.getDouble("lat"), pPrev.getDouble("lng"),
|
||||
pCurr.getDouble("lat"), pCurr.getDouble("lng"));
|
||||
|
||||
distAcumulada += segment.distancia;
|
||||
desnivelPos += segment.desnivelPos;
|
||||
desnivelNeg += segment.desnivelNeg;
|
||||
perfil.addAll(segment.altitudes);
|
||||
|
||||
if (pCurr.optBoolean("tiene_albergue", true)) {
|
||||
lastAlbergueIndex = searchPuebloIndex;
|
||||
distAtLastAlbergue = distAcumulada;
|
||||
posAtLastAlbergue = desnivelPos;
|
||||
negAtLastAlbergue = desnivelNeg;
|
||||
perfilAtLastAlbergue = new ArrayList<>(perfil);
|
||||
}
|
||||
|
||||
if (distAcumulada > maxDist && lastAlbergueIndex != -1) {
|
||||
break;
|
||||
}
|
||||
searchPuebloIndex++;
|
||||
}
|
||||
|
||||
int endPuebloIndex = (lastAlbergueIndex != -1) ? lastAlbergueIndex : (pueblos.length() - 1);
|
||||
JSONObject finPueblo = pueblos.getJSONObject(endPuebloIndex);
|
||||
|
||||
double dTotal = lastAlbergueIndex != -1 ? distAtLastAlbergue : distAcumulada;
|
||||
int pTotal = lastAlbergueIndex != -1 ? posAtLastAlbergue : desnivelPos;
|
||||
|
||||
int dificultad = 1;
|
||||
if (dTotal > 25 || pTotal > 600) dificultad = 3;
|
||||
else if (dTotal > 18 || pTotal > 300) dificultad = 2;
|
||||
|
||||
Etapa e = new Etapa(
|
||||
"Etapa " + etapaNum++,
|
||||
inicioPueblo.getString("nombre"),
|
||||
finPueblo.getString("nombre"),
|
||||
inicioPueblo.getString("nombre") + " - " + finPueblo.getString("nombre"),
|
||||
"Francés",
|
||||
Math.round(dTotal * 10.0) / 10.0,
|
||||
dificultad, "Camino planificado con GPX.", "Ruta de alta precisión",
|
||||
finPueblo.getDouble("lat"),
|
||||
finPueblo.getDouble("lng")
|
||||
);
|
||||
e.setDesnivelPositivo(pTotal);
|
||||
e.setDesnivelNegativo(lastAlbergueIndex != -1 ? negAtLastAlbergue : desnivelNeg);
|
||||
e.setPerfilElevacion(lastAlbergueIndex != -1 ? perfilAtLastAlbergue : perfil);
|
||||
|
||||
etapas.add(e);
|
||||
currentPuebloIndex = endPuebloIndex;
|
||||
if (currentPuebloIndex >= pueblos.length() - 1) break;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return etapas;
|
||||
}
|
||||
|
||||
private static class SegmentInfo {
|
||||
double distancia = 0;
|
||||
int desnivelPos = 0;
|
||||
int desnivelNeg = 0;
|
||||
List<Integer> altitudes = new ArrayList<>();
|
||||
}
|
||||
|
||||
private static SegmentInfo getSegmentInfo(List<GPXParser.PuntoGPS> track, double lat1, double lon1, double lat2, double lon2) {
|
||||
SegmentInfo info = new SegmentInfo();
|
||||
int startIdx = findNearestIndex(track, lat1, lon1);
|
||||
int endIdx = findNearestIndex(track, lat2, lon2);
|
||||
|
||||
if (startIdx > endIdx) { int temp = startIdx; startIdx = endIdx; endIdx = temp; }
|
||||
|
||||
for (int i = startIdx; i < endIdx; i++) {
|
||||
GPXParser.PuntoGPS p1 = track.get(i);
|
||||
GPXParser.PuntoGPS p2 = track.get(i + 1);
|
||||
info.distancia += calcularDistancia(p1.lat, p1.lng, p2.lat, p2.lng);
|
||||
|
||||
int diff = (int)(p2.alt - p1.alt);
|
||||
if (diff > 0) info.desnivelPos += diff;
|
||||
else info.desnivelNeg += Math.abs(diff);
|
||||
|
||||
if (i % 10 == 0) info.altitudes.add((int)p1.alt); // Muestreo para no saturar el gráfico
|
||||
}
|
||||
return info;
|
||||
}
|
||||
|
||||
private static int findNearestIndex(List<GPXParser.PuntoGPS> track, double lat, double lon) {
|
||||
int nearest = 0;
|
||||
double minDist = Double.MAX_VALUE;
|
||||
for (int i = 0; i < track.size(); i++) {
|
||||
double d = calcularDistancia(lat, lon, track.get(i).lat, track.get(i).lng);
|
||||
if (d < minDist) {
|
||||
minDist = d;
|
||||
nearest = i;
|
||||
}
|
||||
}
|
||||
return nearest;
|
||||
}
|
||||
|
||||
private static double calcularDistancia(double lat1, double lon1, double lat2, double lon2) {
|
||||
float[] results = new float[1];
|
||||
android.location.Location.distanceBetween(lat1, lon1, lat2, lon2, results);
|
||||
return results[0] / 1000.0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,10 +35,14 @@ public class Etapa implements Serializable {
|
|||
this.latitud = latitud;
|
||||
this.longitud = longitud;
|
||||
this.imagenUrl = "https://picsum.photos/seed/" + nombre.replace(" ", "") + "/800/400";
|
||||
// Valores por defecto para el ejemplo
|
||||
this.desnivelPositivo = (int) (distancia * 15);
|
||||
this.desnivelNegativo = (int) (distancia * 12);
|
||||
this.perfilElevacion = generarPerfilMock(distancia);
|
||||
// Valores por defecto
|
||||
this.desnivelPositivo = 0;
|
||||
this.desnivelNegativo = 0;
|
||||
this.perfilElevacion = new ArrayList<>();
|
||||
}
|
||||
|
||||
public void setPerfilElevacion(List<Integer> perfil) {
|
||||
this.perfilElevacion = perfil;
|
||||
}
|
||||
|
||||
private List<Integer> generarPerfilMock(double dist) {
|
||||
|
|
|
|||
|
|
@ -34,6 +34,19 @@ public class EtapaAdapter extends RecyclerView.Adapter<EtapaAdapter.EtapaViewHol
|
|||
holder.tvNombre.setText(titulo);
|
||||
holder.tvDistancia.setText(etapa.getDistancia() + " km");
|
||||
|
||||
// Configuración del tag de dificultad
|
||||
int dificultad = etapa.getDificultad();
|
||||
if (dificultad == 3) {
|
||||
holder.tvDificultad.setText("DIFÍCIL");
|
||||
holder.tvDificultad.setBackgroundColor(android.graphics.Color.parseColor("#D32F2F")); // Rojo
|
||||
} else if (dificultad == 2) {
|
||||
holder.tvDificultad.setText("MODERADA");
|
||||
holder.tvDificultad.setBackgroundColor(android.graphics.Color.parseColor("#FBC02D")); // Amarillo/Naranja
|
||||
} else {
|
||||
holder.tvDificultad.setText("FÁCIL");
|
||||
holder.tvDificultad.setBackgroundColor(android.graphics.Color.parseColor("#388E3C")); // Verde
|
||||
}
|
||||
|
||||
Glide.with(holder.itemView.getContext())
|
||||
.load(etapa.getImagenUrl())
|
||||
.placeholder(android.R.drawable.ic_menu_gallery)
|
||||
|
|
@ -53,13 +66,14 @@ public class EtapaAdapter extends RecyclerView.Adapter<EtapaAdapter.EtapaViewHol
|
|||
|
||||
// El ViewHolder es el "molde" para los elementos de la vista
|
||||
public static class EtapaViewHolder extends RecyclerView.ViewHolder {
|
||||
TextView tvNombre, tvDistancia;
|
||||
TextView tvNombre, tvDistancia, tvDificultad;
|
||||
ImageView ivMiniatura;
|
||||
|
||||
public EtapaViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
tvNombre = itemView.findViewById(R.id.tvNombreEtapa);
|
||||
tvDistancia = itemView.findViewById(R.id.tvDistancia);
|
||||
tvDificultad = itemView.findViewById(R.id.tvDificultadTag);
|
||||
ivMiniatura = itemView.findViewById(R.id.ivEtapaMiniatura);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,16 +44,16 @@ public class EtapasActivity extends AppCompatActivity {
|
|||
String[] opcionesCaminos = {"Norte", "Francés"};
|
||||
|
||||
ArrayAdapter<String> adapterCaminos = new ArrayAdapter<>(this,
|
||||
android.R.layout.simple_spinner_item, opcionesCaminos);
|
||||
adapterCaminos.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
R.layout.spinner_item, opcionesCaminos);
|
||||
adapterCaminos.setDropDownViewResource(R.layout.spinner_item);
|
||||
spinnerCaminos.setAdapter(adapterCaminos);
|
||||
|
||||
// 5. Configuración del Spinner para distancia máxima
|
||||
Spinner spinnerDistancia = findViewById(R.id.spinnerDistancia);
|
||||
String[] opcionesDistancia = {"Sin límite", "15 km", "20 km", "25 km"};
|
||||
ArrayAdapter<String> adapterDistancia = new ArrayAdapter<>(this,
|
||||
android.R.layout.simple_spinner_item, opcionesDistancia);
|
||||
adapterDistancia.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
R.layout.spinner_item, opcionesDistancia);
|
||||
adapterDistancia.setDropDownViewResource(R.layout.spinner_item);
|
||||
spinnerDistancia.setAdapter(adapterDistancia);
|
||||
|
||||
AdapterView.OnItemSelectedListener listener = new AdapterView.OnItemSelectedListener() {
|
||||
|
|
@ -80,13 +80,22 @@ public class EtapasActivity extends AppCompatActivity {
|
|||
}
|
||||
|
||||
private void actualizarListaEtapas(String camino, double maxDistancia, RecyclerView recyclerView) {
|
||||
List<Etapa> todas = CaminoData.getEtapasPorCamino(this, camino);
|
||||
List<Etapa> filtradas = new ArrayList<>();
|
||||
for (Etapa e : todas) {
|
||||
if (e.getDistancia() <= maxDistancia) {
|
||||
filtradas.add(e);
|
||||
List<Etapa> filtradas;
|
||||
|
||||
if (camino.equalsIgnoreCase("Francés") && maxDistancia < 1000) {
|
||||
// Si es el Camino Francés y hay un límite de distancia, usamos el planificador dinámico
|
||||
filtradas = CaminoData.getEtapasPlanificadas(this, maxDistancia);
|
||||
} else {
|
||||
// Para otros casos o sin límite, usamos las etapas predefinidas
|
||||
List<Etapa> todas = CaminoData.getEtapasPorCamino(this, camino);
|
||||
filtradas = new ArrayList<>();
|
||||
for (Etapa e : todas) {
|
||||
if (e.getDistancia() <= maxDistancia) {
|
||||
filtradas.add(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EtapaAdapter adapter = new EtapaAdapter(filtradas);
|
||||
recyclerView.setAdapter(adapter);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,45 @@
|
|||
package es.tatvil.elfarodelperegrino;
|
||||
|
||||
import android.util.Xml;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class GPXParser {
|
||||
public static class PuntoGPS {
|
||||
public double lat, lng, alt;
|
||||
|
||||
public PuntoGPS(double lat, double lng, double alt) {
|
||||
this.lat = lat;
|
||||
this.lng = lng;
|
||||
this.alt = alt;
|
||||
}
|
||||
}
|
||||
|
||||
public static List<PuntoGPS> parse(InputStream in) throws Exception {
|
||||
List<PuntoGPS> puntos = new ArrayList<>();
|
||||
XmlPullParser parser = Xml.newPullParser();
|
||||
parser.setInput(in, null);
|
||||
|
||||
int eventType = parser.getEventType();
|
||||
PuntoGPS puntoActual = null;
|
||||
|
||||
while (eventType != XmlPullParser.END_DOCUMENT) {
|
||||
String tag = parser.getName();
|
||||
if (eventType == XmlPullParser.START_TAG) {
|
||||
if ("trkpt".equalsIgnoreCase(tag)) {
|
||||
double lat = Double.parseDouble(parser.getAttributeValue(null, "lat"));
|
||||
double lon = Double.parseDouble(parser.getAttributeValue(null, "lon"));
|
||||
puntoActual = new PuntoGPS(lat, lon, 0);
|
||||
} else if ("ele".equalsIgnoreCase(tag) && puntoActual != null) {
|
||||
puntoActual.alt = Double.parseDouble(parser.nextText());
|
||||
}
|
||||
} else if (eventType == XmlPullParser.END_TAG && "trkpt".equalsIgnoreCase(tag)) {
|
||||
if (puntoActual != null) puntos.add(puntoActual);
|
||||
}
|
||||
eventType = parser.next();
|
||||
}
|
||||
return puntos;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/spiritual_surface" />
|
||||
<corners android:radius="12dp" />
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="@color/maritime_blue_mary" />
|
||||
</shape>
|
||||
|
|
@ -12,38 +12,44 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:padding="8dp"
|
||||
android:padding="12dp"
|
||||
android:background="@color/spiritual_black"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Selecciona el Camino:"
|
||||
android:textColor="@color/text_primary"
|
||||
android:textSize="14sp"
|
||||
android:layout_marginStart="8dp"/>
|
||||
android:textColor="@color/spiritual_text_dim"
|
||||
android:textSize="12sp"
|
||||
android:textStyle="bold"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginBottom="4dp"/>
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/spinnerCaminos"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:background="@android:drawable/btn_dropdown" />
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginBottom="12dp"
|
||||
android:background="@drawable/spinner_background"
|
||||
android:popupBackground="@color/spiritual_surface" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Distancia máxima por etapa:"
|
||||
android:textColor="@color/text_primary"
|
||||
android:textSize="14sp"
|
||||
android:layout_marginStart="8dp"/>
|
||||
android:textColor="@color/spiritual_text_dim"
|
||||
android:textSize="12sp"
|
||||
android:textStyle="bold"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginBottom="4dp"/>
|
||||
|
||||
<Spinner
|
||||
android:id="@+id/spinnerDistancia"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:background="@android:drawable/btn_dropdown" />
|
||||
android:layout_height="48dp"
|
||||
android:background="@drawable/spinner_background"
|
||||
android:popupBackground="@color/spiritual_surface" />
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
|
|
|
|||
|
|
@ -42,6 +42,19 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:text="0.0 km"
|
||||
android:textColor="#757575"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvDificultadTag"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingHorizontal="8dp"
|
||||
android:paddingVertical="2dp"
|
||||
android:textSize="10sp"
|
||||
android:textStyle="bold"
|
||||
android:textColor="#FFFFFF"
|
||||
android:background="@android:color/holo_green_dark"
|
||||
android:layout_marginTop="4dp"
|
||||
android:text="FÁCIL"/>
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@android:id/text1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="12dp"
|
||||
android:textColor="@color/spiritual_gold"
|
||||
android:textSize="16sp"
|
||||
android:background="@color/spiritual_surface" />
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
Roncesvalle
|
||||
Burguete
|
||||
Zubiri
|
||||
Pamplona
|
||||
Puente la Reina
|
||||
Estella
|
||||
Viana
|
||||
Logroño
|
||||
Navarrete
|
||||
Nájera
|
||||
Santo Domingo de la Calzada
|
||||
Burgos
|
||||
Castrojeriz
|
||||
Frómista
|
||||
Carrión de los Condes
|
||||
Sahagún
|
||||
León
|
||||
Hospital de Órbigo
|
||||
Astorga
|
||||
Ponferrada
|
||||
Villafranca del Bierzo
|
||||
O Cebreiro
|
||||
Triacastela
|
||||
Sarria
|
||||
Portomarín
|
||||
Palas de Rei
|
||||
Melide
|
||||
Arzúa
|
||||
Santiago de Compostela
|
||||
|
|
@ -1,597 +0,0 @@
|
|||
[
|
||||
{
|
||||
"nombre": "Saint-Jean-Pied-de-Port",
|
||||
"lat": 43.1636,
|
||||
"lng": -1.2394
|
||||
},
|
||||
{
|
||||
"nombre": "Huntto",
|
||||
"lat": 43.1345,
|
||||
"lng": -1.2461
|
||||
},
|
||||
{
|
||||
"nombre": "Orisson",
|
||||
"lat": 43.1234,
|
||||
"lng": -1.2642
|
||||
},
|
||||
{
|
||||
"nombre": "Roncesvalles",
|
||||
"lat": 43.0092,
|
||||
"lng": -1.3194
|
||||
},
|
||||
{
|
||||
"nombre": "Burguete",
|
||||
"lat": 42.9891,
|
||||
"lng": -1.3341
|
||||
},
|
||||
{
|
||||
"nombre": "Espinal",
|
||||
"lat": 42.9774,
|
||||
"lng": -1.3735
|
||||
},
|
||||
{
|
||||
"nombre": "Viscarret",
|
||||
"lat": 42.9492,
|
||||
"lng": -1.4111
|
||||
},
|
||||
{
|
||||
"nombre": "Lintzoáin",
|
||||
"lat": 42.9413,
|
||||
"lng": -1.4285
|
||||
},
|
||||
{
|
||||
"nombre": "Zubiri",
|
||||
"lat": 42.9298,
|
||||
"lng": -1.5042
|
||||
},
|
||||
{
|
||||
"nombre": "Larrasoaña",
|
||||
"lat": 42.9094,
|
||||
"lng": -1.5235
|
||||
},
|
||||
{
|
||||
"nombre": "Akerreta",
|
||||
"lat": 42.8986,
|
||||
"lng": -1.5264
|
||||
},
|
||||
{
|
||||
"nombre": "Zuriáin",
|
||||
"lat": 42.8794,
|
||||
"lng": -1.5542
|
||||
},
|
||||
{
|
||||
"nombre": "Irotz",
|
||||
"lat": 42.8712,
|
||||
"lng": -1.5678
|
||||
},
|
||||
{
|
||||
"nombre": "Zabaldika",
|
||||
"lat": 42.8634,
|
||||
"lng": -1.5794
|
||||
},
|
||||
{
|
||||
"nombre": "Trinidad de Arre",
|
||||
"lat": 42.8425,
|
||||
"lng": -1.6136
|
||||
},
|
||||
{
|
||||
"nombre": "Pamplona",
|
||||
"lat": 42.8125,
|
||||
"lng": -1.6458
|
||||
},
|
||||
{
|
||||
"nombre": "Cizur Menor",
|
||||
"lat": 42.7936,
|
||||
"lng": -1.6741
|
||||
},
|
||||
{
|
||||
"nombre": "Zariquiegui",
|
||||
"lat": 42.7478,
|
||||
"lng": -1.7164
|
||||
},
|
||||
{
|
||||
"nombre": "Uterga",
|
||||
"lat": 42.7142,
|
||||
"lng": -1.7584
|
||||
},
|
||||
{
|
||||
"nombre": "Muruzábal",
|
||||
"lat": 42.6931,
|
||||
"lng": -1.7652
|
||||
},
|
||||
{
|
||||
"nombre": "Obanos",
|
||||
"lat": 42.6806,
|
||||
"lng": -1.7856
|
||||
},
|
||||
{
|
||||
"nombre": "Puente la Reina",
|
||||
"lat": 42.6719,
|
||||
"lng": -1.8156
|
||||
},
|
||||
{
|
||||
"nombre": "Mañeru",
|
||||
"lat": 42.6661,
|
||||
"lng": -1.8672
|
||||
},
|
||||
{
|
||||
"nombre": "Cirauqui",
|
||||
"lat": 42.6736,
|
||||
"lng": -1.8986
|
||||
},
|
||||
{
|
||||
"nombre": "Lorca",
|
||||
"lat": 42.6725,
|
||||
"lng": -1.9794
|
||||
},
|
||||
{
|
||||
"nombre": "Villatuerta",
|
||||
"lat": 42.6592,
|
||||
"lng": -2.0306
|
||||
},
|
||||
{
|
||||
"nombre": "Estella",
|
||||
"lat": 42.6717,
|
||||
"lng": -2.0306
|
||||
},
|
||||
{
|
||||
"nombre": "Ayegui",
|
||||
"lat": 42.6558,
|
||||
"lng": -2.0461
|
||||
},
|
||||
{
|
||||
"nombre": "Azqueta",
|
||||
"lat": 42.6394,
|
||||
"lng": -2.1125
|
||||
},
|
||||
{
|
||||
"nombre": "Villamayor de Monjardín",
|
||||
"lat": 42.6286,
|
||||
"lng": -2.1386
|
||||
},
|
||||
{
|
||||
"nombre": "Los Arcos",
|
||||
"lat": 42.5694,
|
||||
"lng": -2.1917
|
||||
},
|
||||
{
|
||||
"nombre": "Sansol",
|
||||
"lat": 42.5564,
|
||||
"lng": -2.2614
|
||||
},
|
||||
{
|
||||
"nombre": "Torres del Río",
|
||||
"lat": 42.5519,
|
||||
"lng": -2.2725
|
||||
},
|
||||
{
|
||||
"nombre": "Viana",
|
||||
"lat": 42.5153,
|
||||
"lng": -2.3719
|
||||
},
|
||||
{
|
||||
"nombre": "Logroño",
|
||||
"lat": 42.4627,
|
||||
"lng": -2.4447
|
||||
},
|
||||
{
|
||||
"nombre": "Navarrete",
|
||||
"lat": 42.4286,
|
||||
"lng": -2.5622
|
||||
},
|
||||
{
|
||||
"nombre": "Nájera",
|
||||
"lat": 42.4161,
|
||||
"lng": -2.7319
|
||||
},
|
||||
{
|
||||
"nombre": "Azofra",
|
||||
"lat": 42.4239,
|
||||
"lng": -2.7917
|
||||
},
|
||||
{
|
||||
"nombre": "Cirueña",
|
||||
"lat": 42.4114,
|
||||
"lng": -2.8942
|
||||
},
|
||||
{
|
||||
"nombre": "Santo Domingo de la Calzada",
|
||||
"lat": 42.4406,
|
||||
"lng": -2.9531
|
||||
},
|
||||
{
|
||||
"nombre": "Grañón",
|
||||
"lat": 42.4503,
|
||||
"lng": -3.0286
|
||||
},
|
||||
{
|
||||
"nombre": "Redecilla del Camino",
|
||||
"lat": 42.4386,
|
||||
"lng": -3.0642
|
||||
},
|
||||
{
|
||||
"nombre": "Viloria de Rioja",
|
||||
"lat": 42.4244,
|
||||
"lng": -3.1022
|
||||
},
|
||||
{
|
||||
"nombre": "Belorado",
|
||||
"lat": 42.4203,
|
||||
"lng": -3.1903
|
||||
},
|
||||
{
|
||||
"nombre": "Tosantos",
|
||||
"lat": 42.4136,
|
||||
"lng": -3.2458
|
||||
},
|
||||
{
|
||||
"nombre": "Villafranca Montes de Oca",
|
||||
"lat": 42.3875,
|
||||
"lng": -3.3106
|
||||
},
|
||||
{
|
||||
"nombre": "San Juan de Ortega",
|
||||
"lat": 42.3789,
|
||||
"lng": -3.4358
|
||||
},
|
||||
{
|
||||
"nombre": "Agés",
|
||||
"lat": 42.3742,
|
||||
"lng": -3.4794
|
||||
},
|
||||
{
|
||||
"nombre": "Atapuerca",
|
||||
"lat": 42.3778,
|
||||
"lng": -3.5097
|
||||
},
|
||||
{
|
||||
"nombre": "Burgos",
|
||||
"lat": 42.3439,
|
||||
"lng": -3.6969
|
||||
},
|
||||
{
|
||||
"nombre": "Tardajos",
|
||||
"lat": 42.3475,
|
||||
"lng": -3.8186
|
||||
},
|
||||
{
|
||||
"nombre": "Rabé de las Calzadas",
|
||||
"lat": 42.3403,
|
||||
"lng": -3.8344
|
||||
},
|
||||
{
|
||||
"nombre": "Hornillos del Camino",
|
||||
"lat": 42.3394,
|
||||
"lng": -3.9264
|
||||
},
|
||||
{
|
||||
"nombre": "Hontanas",
|
||||
"lat": 42.3117,
|
||||
"lng": -4.0453
|
||||
},
|
||||
{
|
||||
"nombre": "Castrojeriz",
|
||||
"lat": 42.2881,
|
||||
"lng": -4.1378
|
||||
},
|
||||
{
|
||||
"nombre": "Itero de la Vega",
|
||||
"lat": 42.2861,
|
||||
"lng": -4.2542
|
||||
},
|
||||
{
|
||||
"nombre": "Boadilla del Camino",
|
||||
"lat": 42.2592,
|
||||
"lng": -4.3494
|
||||
},
|
||||
{
|
||||
"nombre": "Frómista",
|
||||
"lat": 42.2683,
|
||||
"lng": -4.4069
|
||||
},
|
||||
{
|
||||
"nombre": "Población de Campos",
|
||||
"lat": 42.2708,
|
||||
"lng": -4.4467
|
||||
},
|
||||
{
|
||||
"nombre": "Villarmentero de Campos",
|
||||
"lat": 42.2858,
|
||||
"lng": -4.5103
|
||||
},
|
||||
{
|
||||
"nombre": "Villalcázar de Sirga",
|
||||
"lat": 42.3164,
|
||||
"lng": -4.5425
|
||||
},
|
||||
{
|
||||
"nombre": "Carrión de los Condes",
|
||||
"lat": 42.3392,
|
||||
"lng": -4.6061
|
||||
},
|
||||
{
|
||||
"nombre": "Calzadilla de la Cueza",
|
||||
"lat": 42.3592,
|
||||
"lng": -4.8386
|
||||
},
|
||||
{
|
||||
"nombre": "Lédigos",
|
||||
"lat": 42.3556,
|
||||
"lng": -4.9192
|
||||
},
|
||||
{
|
||||
"nombre": "Terradillos de los Templarios",
|
||||
"lat": 42.3533,
|
||||
"lng": -4.9567
|
||||
},
|
||||
{
|
||||
"nombre": "Moratinos",
|
||||
"lat": 42.3578,
|
||||
"lng": -4.9911
|
||||
},
|
||||
{
|
||||
"nombre": "San Nicolás del Real Camino",
|
||||
"lat": 42.3614,
|
||||
"lng": -5.0211
|
||||
},
|
||||
{
|
||||
"nombre": "Sahagún",
|
||||
"lat": 42.3719,
|
||||
"lng": -5.0286
|
||||
},
|
||||
{
|
||||
"nombre": "Bercianos del Real Camino",
|
||||
"lat": 42.3875,
|
||||
"lng": -5.1464
|
||||
},
|
||||
{
|
||||
"nombre": "El Burgo Ranero",
|
||||
"lat": 42.4239,
|
||||
"lng": -5.2217
|
||||
},
|
||||
{
|
||||
"nombre": "Reliegos",
|
||||
"lat": 42.4847,
|
||||
"lng": -5.3517
|
||||
},
|
||||
{
|
||||
"nombre": "Mansilla de las Mulas",
|
||||
"lat": 42.5036,
|
||||
"lng": -5.4158
|
||||
},
|
||||
{
|
||||
"nombre": "León",
|
||||
"lat": 42.5989,
|
||||
"lng": -5.5672
|
||||
},
|
||||
{
|
||||
"nombre": "Virgen del Camino",
|
||||
"lat": 42.5786,
|
||||
"lng": -5.6417
|
||||
},
|
||||
{
|
||||
"nombre": "Villadangos del Páramo",
|
||||
"lat": 42.5169,
|
||||
"lng": -5.7667
|
||||
},
|
||||
{
|
||||
"nombre": "San Martín del Camino",
|
||||
"lat": 42.4939,
|
||||
"lng": -5.8119
|
||||
},
|
||||
{
|
||||
"nombre": "Hospital de Órbigo",
|
||||
"lat": 42.4631,
|
||||
"lng": -5.8825
|
||||
},
|
||||
{
|
||||
"nombre": "Santibáñez de Valdeiglesias",
|
||||
"lat": 42.4647,
|
||||
"lng": -5.9239
|
||||
},
|
||||
{
|
||||
"nombre": "Astorga",
|
||||
"lat": 42.4578,
|
||||
"lng": -6.0567
|
||||
},
|
||||
{
|
||||
"nombre": "Murias de Rechivaldo",
|
||||
"lat": 42.4608,
|
||||
"lng": -6.1039
|
||||
},
|
||||
{
|
||||
"nombre": "Santa Catalina de Somoza",
|
||||
"lat": 42.4553,
|
||||
"lng": -6.1583
|
||||
},
|
||||
{
|
||||
"nombre": "El Ganso",
|
||||
"lat": 42.4517,
|
||||
"lng": -6.2081
|
||||
},
|
||||
{
|
||||
"nombre": "Rabanal del Camino",
|
||||
"lat": 42.4808,
|
||||
"lng": -6.2831
|
||||
},
|
||||
{
|
||||
"nombre": "Foncebadón",
|
||||
"lat": 42.4947,
|
||||
"lng": -6.3422
|
||||
},
|
||||
{
|
||||
"nombre": "Acebo",
|
||||
"lat": 42.5097,
|
||||
"lng": -6.4172
|
||||
},
|
||||
{
|
||||
"nombre": "Molinaseca",
|
||||
"lat": 42.5375,
|
||||
"lng": -6.5203
|
||||
},
|
||||
{
|
||||
"nombre": "Ponferrada",
|
||||
"lat": 42.5458,
|
||||
"lng": -6.5911
|
||||
},
|
||||
{
|
||||
"nombre": "Camponaraya",
|
||||
"lat": 42.5811,
|
||||
"lng": -6.6703
|
||||
},
|
||||
{
|
||||
"nombre": "Cacabelos",
|
||||
"lat": 42.5997,
|
||||
"lng": -6.7264
|
||||
},
|
||||
{
|
||||
"nombre": "Villafranca del Bierzo",
|
||||
"lat": 42.6075,
|
||||
"lng": -6.8111
|
||||
},
|
||||
{
|
||||
"nombre": "Trabadelo",
|
||||
"lat": 42.6503,
|
||||
"lng": -6.8858
|
||||
},
|
||||
{
|
||||
"nombre": "La Portela de Valcarce",
|
||||
"lat": 42.6681,
|
||||
"lng": -6.9467
|
||||
},
|
||||
{
|
||||
"nombre": "Vega de Valcarce",
|
||||
"lat": 42.6644,
|
||||
"lng": -6.9478
|
||||
},
|
||||
{
|
||||
"nombre": "Las Herrerías",
|
||||
"lat": 42.6931,
|
||||
"lng": -7.0039
|
||||
},
|
||||
{
|
||||
"nombre": "La Faba",
|
||||
"lat": 42.7003,
|
||||
"lng": -7.0286
|
||||
},
|
||||
{
|
||||
"nombre": "O Cebreiro",
|
||||
"lat": 42.7081,
|
||||
"lng": -7.0436
|
||||
},
|
||||
{
|
||||
"nombre": "Liñares",
|
||||
"lat": 42.7161,
|
||||
"lng": -7.0864
|
||||
},
|
||||
{
|
||||
"nombre": "Hospital da Condesa",
|
||||
"lat": 42.7214,
|
||||
"lng": -7.1122
|
||||
},
|
||||
{
|
||||
"nombre": "Padornelo",
|
||||
"lat": 42.7239,
|
||||
"lng": -7.1306
|
||||
},
|
||||
{
|
||||
"nombre": "Triacastela",
|
||||
"lat": 42.7558,
|
||||
"lng": -7.2417
|
||||
},
|
||||
{
|
||||
"nombre": "Samos",
|
||||
"lat": 42.7303,
|
||||
"lng": -7.3275
|
||||
},
|
||||
{
|
||||
"nombre": "Sarria",
|
||||
"lat": 42.7778,
|
||||
"lng": -7.4161
|
||||
},
|
||||
{
|
||||
"nombre": "Barbadelo",
|
||||
"lat": 42.7664,
|
||||
"lng": -7.4642
|
||||
},
|
||||
{
|
||||
"nombre": "Ferreiros",
|
||||
"lat": 42.7417,
|
||||
"lng": -7.5494
|
||||
},
|
||||
{
|
||||
"nombre": "Portomarín",
|
||||
"lat": 42.8078,
|
||||
"lng": -7.6167
|
||||
},
|
||||
{
|
||||
"nombre": "Gonzar",
|
||||
"lat": 42.8436,
|
||||
"lng": -7.6964
|
||||
},
|
||||
{
|
||||
"nombre": "Ventas de Narón",
|
||||
"lat": 42.8594,
|
||||
"lng": -7.7319
|
||||
},
|
||||
{
|
||||
"nombre": "Ligonde",
|
||||
"lat": 42.8642,
|
||||
"lng": -7.7711
|
||||
},
|
||||
{
|
||||
"nombre": "Palas de Rei",
|
||||
"lat": 42.8733,
|
||||
"lng": -7.8694
|
||||
},
|
||||
{
|
||||
"nombre": "Casanova",
|
||||
"lat": 42.8839,
|
||||
"lng": -7.9342
|
||||
},
|
||||
{
|
||||
"nombre": "Leboreiro",
|
||||
"lat": 42.8881,
|
||||
"lng": -7.9864
|
||||
},
|
||||
{
|
||||
"nombre": "Melide",
|
||||
"lat": 42.9153,
|
||||
"lng": -8.0142
|
||||
},
|
||||
{
|
||||
"nombre": "Boente",
|
||||
"lat": 42.9169,
|
||||
"lng": -8.0811
|
||||
},
|
||||
{
|
||||
"nombre": "Ribadiso da Baixo",
|
||||
"lat": 42.9231,
|
||||
"lng": -8.1467
|
||||
},
|
||||
{
|
||||
"nombre": "Arzúa",
|
||||
"lat": 42.9272,
|
||||
"lng": -8.1642
|
||||
},
|
||||
{
|
||||
"nombre": "Salceda",
|
||||
"lat": 42.9136,
|
||||
"lng": -8.2831
|
||||
},
|
||||
{
|
||||
"nombre": "O Pedrouzo",
|
||||
"lat": 42.9039,
|
||||
"lng": -8.3611
|
||||
},
|
||||
{
|
||||
"nombre": "Monte do Gozo",
|
||||
"lat": 42.8894,
|
||||
"lng": -8.4942
|
||||
},
|
||||
{
|
||||
"nombre": "Santiago de Compostela",
|
||||
"lat": 42.8806,
|
||||
"lng": -8.5447
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,163 @@
|
|||
[
|
||||
{
|
||||
"nombre": "Saint-Jean-Pied-de-Port",
|
||||
"lat": 43.1636,
|
||||
"lng": -1.2394,
|
||||
"alt": 172,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Huntto",
|
||||
"lat": 43.1345,
|
||||
"lng": -1.2461,
|
||||
"alt": 608,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Orisson",
|
||||
"lat": 43.1234,
|
||||
"lng": -1.2642,
|
||||
"alt": 792,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Puerto de Ibañeta",
|
||||
"lat": 43.0205,
|
||||
"lng": -1.3242,
|
||||
"alt": 1057,
|
||||
"tiene_albergue": false
|
||||
},
|
||||
{
|
||||
"nombre": "Roncesvalles",
|
||||
"lat": 43.0092,
|
||||
"lng": -1.3194,
|
||||
"alt": 950,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Burguete",
|
||||
"lat": 42.9891,
|
||||
"lng": -1.3341,
|
||||
"alt": 885,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Espinal",
|
||||
"lat": 42.9774,
|
||||
"lng": -1.3735,
|
||||
"alt": 870,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Viscarret",
|
||||
"lat": 42.9492,
|
||||
"lng": -1.4111,
|
||||
"alt": 780,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Zubiri",
|
||||
"lat": 42.9298,
|
||||
"lng": -1.5042,
|
||||
"alt": 526,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Larrasoaña",
|
||||
"lat": 42.9094,
|
||||
"lng": -1.5235,
|
||||
"alt": 485,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Pamplona",
|
||||
"lat": 42.8125,
|
||||
"lng": -1.6458,
|
||||
"alt": 446,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Puente la Reina",
|
||||
"lat": 42.6719,
|
||||
"lng": -1.8156,
|
||||
"alt": 345,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Estella",
|
||||
"lat": 42.6717,
|
||||
"lng": -2.0306,
|
||||
"alt": 425,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Logroño",
|
||||
"lat": 42.4627,
|
||||
"lng": -2.4447,
|
||||
"alt": 384,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Santo Domingo de la Calzada",
|
||||
"lat": 42.4406,
|
||||
"lng": -2.9531,
|
||||
"alt": 638,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Burgos",
|
||||
"lat": 42.3439,
|
||||
"lng": -3.6969,
|
||||
"alt": 856,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "León",
|
||||
"lat": 42.5989,
|
||||
"lng": -5.5672,
|
||||
"alt": 837,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Astorga",
|
||||
"lat": 42.4578,
|
||||
"lng": -6.0567,
|
||||
"alt": 869,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Ponferrada",
|
||||
"lat": 42.5458,
|
||||
"lng": -6.5911,
|
||||
"alt": 543,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "O Cebreiro",
|
||||
"lat": 42.7081,
|
||||
"lng": -7.0436,
|
||||
"alt": 1330,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Sarria",
|
||||
"lat": 42.7778,
|
||||
"lng": -7.4161,
|
||||
"alt": 454,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Portomarín",
|
||||
"lat": 42.8078,
|
||||
"lng": -7.6167,
|
||||
"alt": 387,
|
||||
"tiene_albergue": true
|
||||
},
|
||||
{
|
||||
"nombre": "Santiago de Compostela",
|
||||
"lat": 42.8806,
|
||||
"lng": -8.5447,
|
||||
"alt": 260,
|
||||
"tiene_albergue": true
|
||||
}
|
||||
]
|
||||
Loading…
Reference in New Issue