lunes, 7 de julio de 2014

Convertir relación Openstreetmap en GPX (PHP)

http://www.diarioc.com.ar/fagcode/osm/rel2gpx/rel2gpx.zip

Demo: http://www.diarioc.com.ar/rel2gpx.php?id=3871050

<?php
// PHP rel2gpx. Convert OSM relations to GPX. 
// v0.09b 2014 Fabian Gervan. Contact: fagervan at gmail
// La relacion debe tener los miembros WAY ordenados. (Se la puede ordenar con JOSM).
// No es el codigo mas optimo pero funciona.
// uso: rel2gpx.php?id=666


$rel=(int)$_GET['id'];

if (
$rel==0) {echo "uso: rel2gpx.php?id=666 ";die;}
$url="http://www.openstreetmap.org/api/0.6/relation/$rel/full";

$xml file_get_contents($url);
$data = new SimpleXMLElement($xml);

foreach( 
$data->relation->tag as $row) {
    
$k=(string)$row['k'];
    
$v=(string)$row['v'];
    
$arelacion[$k]=$v;
}

//read relation members
foreach( $data->relation->member as $row) {
    
$type=(string)$row['type'];
    
$ref=(string)$row['ref'];
    if (
$type=='way')
    
$arelacion['way'][]=$ref;
}

//read relation ways
foreach( $data->way as $way) {
    
//print_r($way);

    
$id=(string)$way['id'];
    foreach(
$way->nd as $nd) {
    
$away[$id][]=(string)$nd['ref'];
    }
}

//read all nodes
 
foreach ($data->node as $node) {
    
$id=(string)$node['id'];
    
$lat=(string)$node['lat'];
    
$lon=(string)$node['lon'];
    
$anode[$id]=array('lat'=>$lat,'lon'=>$lon);

    
// se fija si tiene tag para hacer waypoints:
    
foreach($node->tag as $tag) {
    
$k=(string)$tag['k'];
    
$v=(string)$tag['v'];

    
// si es barrier o tiene name lo carga a waypoint
    
if ($k=='barrier'){$awpt[$id]=$id$anode[$id]=array('lat'=>$lat,'lon'=>$lon,'name'=>'puerta');}
    if (
$k=='name') {$awpt[$id]=$id$anode[$id]=array('lat'=>$lat,'lon'=>$lon,'name'=>$v);}
    }
    unset (
$id);
    unset (
$lat);
    unset (
$lon);
}

foreach (
$arelacion['way'] as $way) {
    foreach (
$away[$way] as $id) {
        
$asnode[]=$anode[$id];
    }
}

if (
$awpt)
    foreach(
$awpt as $id) {
    
$aswpt[]=$anode[$id];
    }

gpx($arelacion['name'],$asnode,$aswpt);

function 
gpx($name='rel',$atrk,$awpt=NULL) {
    
$name=str_replace(' ','_',$name);
    
header("Content-type: application/gpx");
    
header("Content-Disposition: attachment; filename=\"$name.gpx\";" );

    echo 
'<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" creator="linux/apache/php/mysql" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www.garmin.com/xmlschemas/GpxExtensions/v3/GpxExtensionsv3.xsd http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">'
."\n";

    
// waypoints
    
if ($awpt)
    foreach(
$awpt as $row) {
    
$lat=$row['lat'];
    
$lon=$row['lon'];
    
$name=$row['name'];
    echo 
"<wpt lat=\"$lat\" lon=\"$lon\">\n";
    echo 
"    <name>$name</name>\n";
    echo 
"    <sym>Flag, Red</sym>\n";
    echo 
"</wpt>\n\n";
    }

    
// caminos
echo '<trk>
    <name>Camino 001</name>
    <trkseg>'
;
    foreach  (
$atrk as $row) {
    echo 
"<trkpt lat=\"".$row['lat']."\" lon=\"".$row['lon']."\"/>\n";
    }
    echo 
"</trkseg></trk>\n\n";
    echo 
'</gpx>';
}

jueves, 27 de marzo de 2014

GPX2GDB



Convierte desde linea de comados archivos GPX generado por programas como "TTGPSLogger", "WhereAMI", "OSMAND", "ENDOMONDO" a archivos GDB compatible con el programa Garmin Masource.


notepad e:\gps\gpsbabel\gpx2gdb.cmd

@echo off
echo gpx2gdb - Convierte archivos gpx a gdb compatible con mapsource.
echo Uso: gpx2gdb archivo.gpx
echo on

e:\gps\gpsbabel\gpsbabel.exe -p "" -w -r -t -i gpx -f %1 -o gdb -F "%~1.gdb"
pause

sábado, 1 de marzo de 2014

Moviendo directorio OBB a la SDCARD externa

Por defecto Android de los Galaxy 3 y TAB3  guardan la carpeta OBB (almacenamiento adicional de las aplicaciones) en la SD interna que en  realidad es una SD emulada, ocupado memoria interna.
Este truco permite mover este directorio a la SD real externa.

/etc/init.d/mis_mounts
----------------
#!/system/bin/sh
mount -o bind    /data/sdext2/mnt_Android_obb   /storage/sdcard0/Android/obb
----------------


Hay que crear una segunda particion primaria en la SD con format ext4. (Como lo indica LINK2SD).
El montaje de /data/sdext2 lo hace automaticamente LINKS2SD si creamos correctamente esa partición.

mkdir /data/sdext2/mnt_Android_obb

Crearemos la nueva carpeta obb  y movemos todos los archivos de /storage/sdcard0/Android/obb a esa nueva carpeta.

# cp /storage/sdcard0/Android/obb/*  /data/sdext2/mnt_Android_obb/ -r
# rm  /storage/sdcard0/Android/obb/* -R

Hay que instalar una APP que habilite init.d (el script de montaje). Se llama Universal init.d


Si hay problemas para modificar los scripts en /etc/init.d/ es porque /system esta montado como solo lectura.
Para solucionarlo:

mount -o rw,remount -t rootfs /system

hacer los cambios y reiniciar el teléfono.

La ventaja de usar la segunda particion  (EXT2/3/4) en lugar de la primera (FAT-32) es que esta no se desmonta al conectar el dispositivo por usb.

Aplicaciones que pueden ser util:

* SSH Droid
https://play.google.com/store/apps/details?id=berserker.android.apps.sshdroid

* Universal Init.d
https://play.google.com/store/apps/details?id=com.androguide.universal.init.d

* Midnight Commander