MySQL result to KML file output – PHP

Agosto 16th, 2009 No Comments »

Description

This package offers a function called mysqlAKML (resource $mysqlResult, string $documentName=’kml’, string $itemName=’Placemark’); used to output a Mysql result with the following fields:

name: TEXTVALUE – The Name of the marker
description: TEXTVALUE – The description shown in the info window when marker clicked
coordinates: TEXTVALUE as (DOUBLE + ‘, ‘ + DOUBLE) like “longitude, latitude”

Usage

So an easy way to obtain the KML would be:

$qString = "SELECT
markerName AS name,
myText AS description,
CONCAT (latitude, ', ', longitude) AS coordinates
FROM myTable";
 
$result = mysql_query($qString);
$myKML = mysql_KML($result);

A complete example:

File getPoints.php

<?
require ('connetion.php');
require ('mysqlAKML-1.1.php');
 
// obtain the MySQL resutl
$makers = mysql_query($queryString);
 
// KML Content-Type (application/vnd.google-earth.kml+xml)
header ("Content-type: application/vnd.google-earth.kml+xml");
header('Content-Disposition: attachment; filename="markers.kml"');
// Display the file content
echo mysql_KML($markers);
 
mysql_close();
?>

Then, if we want to load this KML in a Google Map with the Google Maps API with JavaScript, we shoul add the following code to our load() function:

// JavaScript
function load() {
...
...
// add Markers fetched from the DB to the map
var geoXml = new GGeoXml(PATH_TO_FILE + 'getPoints.php');
map.addOverlay(geoXml);
...
...
}

Thats all! Feel free to modify the file but remember to leave my name! See the working example in the link below

Working Example

Example

Downloads

Download Package File (mysqlAKML-1.1.php)

Usefull Links

GGeoXML in Google Maps API Reference

Pasar resultado MySQL a archivo XML o E4X para AJAX

Julio 16th, 2009 2 Comments »

Gente, acá les acerco una función de mi autoría que convierte un resultado de consulta MySQL en un archivo XML, veamos un ejemplo:

Si tuvieramos la siguiente tabla usuarios:

id nombre email



1 Pablo pablo@mail.com
2 Marcos marcos@mail.com

Con la consulta SQL dada por:

SELECT * FROM usuarios;

Y queremos obtener el siguiente archivo XML:

<?xml version="1.0" encoding="UTF-8"?>
<resultados>
<item>
<id>1</id>
<nombre>Pablo</nombre>
<mail>pablo@mail.com</mail>
</item>
<item>
<id>2</id>
<nombre>Marcos</nombre>
<mail>marcos@mail.com</mail>
</item>

Simplemente debemos ejecutar la siguiente instrucción en PHP:

<?
require ('conexion.php');
require ('mysqlAXML-1.0.php');
 
header("Content-type: text/xml");
 
$consulta = "SELECT * FROM usuarios";
if (!$resultado = mysql_query($consulta))
	die ("Error en '$consulta' &lt;br /&gt;".mysql_error());
 
echo mysql_XML($resultado);
?>

O para obtener el resultado en formato E4X:

<?
echo mysql_E4X($resultado);
?>

La sintaxis general es la siguiente:

<?
mysql_XML($resultado, [ $nombreDoc='resultados', $nombreItem='item' ]);
?>

Pueden descargar el archivo ZIP con la libreria desde aquí: mysqlaxml-1.0

Paginar Vector de Resultados en PHP

Mayo 12th, 2009 No Comments »

Hace un tiempo me surgió el problema de paginar un vector (Array) de resultados de una búsqueda, por lo que busqué la forma de crear una función que me permitiera listar los items correspondientes, pasandole por parámetros el vector en cuestión, el límite de resultados a mostrar y la página solicitada.

He aquí mi solución (es una base, que necesita ser pulida, eso les dejo a ustedes ;) )

paginar.php

Código :

function paginar($v$l$p) {

Primero que nada definimos la función junto con las variables que se han de pasar como parámetro, ahora bien, necesitamos saber cuales son las condiciones de inicio de nuestro paginador, tales como la cantidad de páginas a mostrar, en función de la longitud del vector y del límite de items a desplegar:

Código :

// DEFINIMOS LA CANTIDAD DE PÁGINAS 
$paginas = ceil(count($v) / $l);

Ahora bien, si queremos mostrar cada item del vector $v necesitaremos recorrerlo con un bucle, pero… ¿desde dónde empezaríamos a mostrar y hasta dónde? Para ello necesitamos definir las condiciones de nuestro bucle recorredor como sigue:

Código :

// CONDICION DE INICIO 
$inicio = ($p-1)*$l// CONDICION DE FINAL 
$final = $p*$l;

Y ya estamos listos para empezar a recorrer el vector mostrando cada resultado dentro de un div de id=”item” dentro del div de resultados. Debemos tener en cuenta que, si no existiera el item i-ésimo dentro del vector $v tenemos que dejar de listar items:

Código :

// MOSTRAMOS LOS ITEMS RESPECTIVOS 
      echo '<div id="resultados">'; 
      for ($i=$inicio$i<$final$i++) { 
         if (isset($v[$i])) 
            echo "<div id=\"item\">$i.- $v[$i]</div>"; 
         else  
            break; 
      } 
      echo '</div>';

Listo, tenemos los resultados correspondientes a la página $p, pero necesitaríamos mostrar el total de páginas a modo de menú de hipervínculos para poder navegar entre los ítems. Para ello comprobaremos si nos encontramos en la primera pagina para no mostrar “Página anterior” o en la última para no mostrar “Página siguiente”, además de no crear un vínculo a la misma página:

Código :

// LISTAMOS LAS PÁGINAS 
      echo '<div id="paginas">'; 
      if ($p>1) 
         echo "<a href=\"index.php?p=" . ($p-1) . "\">P&aacute;gina Anterior</a>&nbsp;-&nbsp;"; 

      for ($i=1$i<=$paginas$i++) { 
         if ($i == $p) 
            echo "<strong>$i</strong>&nbsp;"; 
         else  
            echo "<a href=\"index.php?p=$i\">$i</a>&nbsp;"; 
      } 

      if ($p<$paginas) 
         echo "&nbsp;-&nbsp;<a href=\"index.php?p=" . ($p+1) . "\">P&aacute;gina Siguiente&nbsp;</a>"; 
      echo '</div>'return; 
   }

Eso sería todo, para llamar a la función simplemente realizamos:

index.php

Código :

<?php     $vector = array("hola""chau""hola""chau""hola""chau""hola""chau""hola""chau""hola""chau""hola""chau""hola""chau""hola""chau""hola""chau""hola""chau""hola""chau""hola""chau""hola""chau" );     require ("paginar.php");     if (isset($_GET[p]))        $p = $_GET[p];     else         $p=1;     paginar($vector10$p);  ?>

Espero que les sirva de base para un desarrollo más complejo, saludos!

Pueden ver el ejemplo funcionando en http://www.reweb.com.ar/labs/paginarVector/

Powered By Wordpress - Theme Provided By Wordpress Theme - No Credit Auto Loan