Ricerca risultati ner raggio di 'n' km da un punto

rober23

Utente Attivo
4 Ott 2013
32
0
0
ciao a tutti. ho un db con un elenco di punti geograficicon latitudine e longitudine. ho bisogno di creare uno script che, dato la mia posizione attuale, mi indichi le posizioni presenti attorno a me in un raggio di 5 km. ora io ho fatto questo:

Codice:
<script type="text/javascript">
if (navigator.geolocation) {
  navigator.geolocation.getCurrentPosition(mostra_mappa);
}else{
  alert('La geo-localizzazione NON è possibile');
}
function mostra_mappa(posizione) {
	var my_lat = posizione.coords.latitude;
	var my_lon = posizione.coords.longitude;
    // Define your locations: HTML content for the info window, latitude, longitude
	var locations = [
	['Tu Sei Qui', posizione.coords.latitude, posizione.coords.longitude],
	
	/*
	SELECT *, TRUNCATE ( 6363 * sqrt( POW( RADIANS(posizione.coords.latitude ) - RADIANS(latit) , 2 ) + POW( RADIANS(posizione.coords.longitude) - RADIANS(long) , 2 ) ) , 3 ) AS distance FROM dd_loc WHERE TRUNCATE ( 6363 * sqrt( POW( RADIANS(posizione.coords.latitude) - RADIANS(latit) , 2 ) + POW( RADIANS(posizione.coords.longitude) - RADIANS(long) , 2 ) ) , 3 ) < 10 ORDER BY distance ASC";
	*/
	/*SELECT *, ( 6371 * acos( cos( radians(38.183333) ) * cos( radians( latit ) ) * cos( radians( long ) - radians(15.5668) ) + sin( radians(38.183333) ) * sin( radians( latit ) ) ) ) AS distance FROM dd_loc HAVING distance < 10 ORDER BY distance */
	<?php 

		include("connectionDB.php");
		
		$sel = "SELECT latit,long,citta, (6371 * acos(cos(rad2deg(38.183333)) * cos(rad2deg(latit)) * cos(rad2deg(long)-rad2deg(15.5668)) + sin(rad2deg(38.183333)) * sin(rad2deg(latit)))) AS distance FROM dd_loc HAVING distance < 5000 ORDER BY distance";
		$res = mysql_query($sel);
		while($dati = mysql_fetch_assoc($res)){
			echo "
				['$dati[citta]', $dati[latit], $dati[long]],
			";	
		}
	?>
      
    ];
    
    // Setup the different icons and shadows
    var iconURLPrefix = 'http://maps.google.com/mapfiles/ms/icons/';
    
    var icons = [
      iconURLPrefix + 'yellow-dot.png',
	  iconURLPrefix + 'red-dot.png',
    ]
    var icons_length = icons.length;
    
    
    var shadow = {
      anchor: new google.maps.Point(posizione.coords.latitude, posizione.coords.longitude),
      url: iconURLPrefix + 'msmarker.shadow.png'
    };

    var map = new google.maps.Map(document.getElementById('map'), {
      zoom: 50,
      center: new google.maps.LatLng(posizione.coords.latitude, posizione.coords.longitude),
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      mapTypeControl: false,
      streetViewControl: false,
      panControl: false,
      zoomControlOptions: {
         position: google.maps.ControlPosition.LEFT_BOTTOM
      }
    });

    var infowindow = new google.maps.InfoWindow({
      maxWidth: 160
    });

    var marker;
    var markers = new Array();
    
    var iconCounter = 0;
	

    
    // Add the markers and infowindows to the map
    for (var i = 0; i < locations.length; i++) {  
      marker = new google.maps.Marker({
        position: new google.maps.LatLng(locations[i][1], locations[i][2]),
        map: map,
        icon : icons[iconCounter],
        shadow: shadow
      });

      markers.push(marker);

      google.maps.event.addListener(marker, 'click', (function(marker, i) {
        return function() {
          infowindow.setContent(locations[i][0]);
          infowindow.open(map, marker);
        }
      })(marker, i));
      
      if(i>0){iconCounter=1;}
      // We only have a limited number of possible icon colors, so we may have to restart the counter
      if(iconCounter >= icons_length){
      	iconCounter = 0;
      }
	  
    }

    function AutoCenter() {
      //  Create a new viewpoint bound
      var bounds = new google.maps.LatLngBounds();
      //  Go through each...
      $.each(markers, function (index, marker) {
        bounds.extend(marker.position);
      });
      //  Fit these bounds to the map
      map.fitBounds(bounds);
    }
    AutoCenter();
	}
  </script>

il problema è che la funzione non produce risultato. nella query non riesco a inserire le coordinate del mio punto, nè quelli presenti nel db. la mia tabella ha i campi latit e long di latitudine e longitudine.

chi può darmi una dritta perchè sono bloccato da un paio di giorni su questo codice.
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Per cominciare:
PHP:
while($dati = mysql_fetch_assoc($res)){
			echo "
				['$dati[citta]', $dati[latit], $dati[long]],
			";	
		}

Questo ti produrrà un errore di sintassi con javascript perchè stamperà anche per l'ultimo elemento una virgola che non serve.
La puoi risolvere abbastanza semplicemente (inoltre non richiamare mai gli array a quel modo):
HTML:
var locations = [
	['Tu Sei Qui', posizione.coords.latitude, posizione.coords.longitude]

        // codice vario...
PHP:
        while($dati = mysql_fetch_assoc($res)){
			echo "
                               ,['", $dati['citta'], "', ", $dati['latit'], ", ", $dati['long'], "]
			";	
		}

Detto questo mi pare di capire che c'è un difetto logico nella tua applicazione: tu hai dei dati che ottieni tramite javascript, questi dati non puoi passarli ad una query SQL che agisce da php, anche se è scritta nella funzione javascript coinvolta per il semplice motivo che php viene parsato dal server a monte mentre javascript viene eseguito dal client a valle.

La soluzione ideale sarebbe di implementare una richiesta asincrona che passi i dati di latitudine e longitudine di riferimento ad uno script php che poi ti ritorna come risultato l'array di cordinate adiacenti di cui hai bisogno.
 
Ultima modifica:

rober23

Utente Attivo
4 Ott 2013
32
0
0
scusami non sono molto pratico...io ad esempio ho fatto una prova, isolando la sola quety:

Codice:
$sel = "SELECT latit,long,citta, (6371*acos(cos(rad2deg(38.183333))*cos(rad2deg(latit))*cos(rad2deg(long)-rad2deg(15.5668))+sin(rad2deg(38.183333))*sin(rad2deg(latit)))) AS distance FROM dd_loc HAVING distance < 5000 ORDER BY distance";
$res = mysql_query($sel);

while($dati = mysql_fetch_assoc($res)){
	echo $dati["latit"]."-".$dati["long"];	
}

e non funziona nemmeno. nel codice js se la query la metto come "select + from dd_loc", funziona. solo che il problema di selezionare solo i dati le cui coordinate sono a una distanza di 5 km non me lo fa
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
Prova a controllare se ritornano errori da mysql:

PHP:
$sel = "SELECT latit,long,citta, (6371*acos(cos(rad2deg(38.183333))*cos(rad2deg(latit))*cos(rad2deg(long)-rad2deg(15.5668))+sin(rad2deg(38.183333))*sin(rad2deg(latit)))) AS distance FROM dd_loc HAVING distance < 5000 ORDER BY distance";
$res = mysql_query($sel);

#> Controllo Errori
if (!$res)
    echo 'MySql Errors(', mysql_errno(), '): ', mysql_error(), "\n\n";

while($dati = mysql_fetch_assoc($res)){
	echo $dati["latit"]."-".$dati["long"];	
}
 
Discussioni simili
Autore Titolo Forum Risposte Data
Alex_70 [PHP] Ricerca con risultati cliccabili PHP 21
P Google risultati di ricerca inappropriati SEO e Posizionamento 1
T Monitorare risultati Google in base alla località e device di ricerca SEO e Posizionamento 0
G Risultati evidenziato dopo ricerca Classic ASP 4
M [PHP] Evidenziare le parole cercate nei risultati di una ricerca PHP 1
M Domanda riguardo i risultati della ricerca di google Joomla 14
T.W. Aiuto Per Ordinare Risultati Ricerca Da File CSV PHP 2
N Salvataggio risultati ricerca. Classic ASP 0
G Problema nella pagine dei risultati ricerca Wordpress WordPress 2
O Ricerca e Stampo Risultati Db PHP 2
G paginare risultati di ricerca PHP 8
G visualizzare risultati ricerca dopo form nella stessa pagina e mantenimento filtri PHP 1
A Ordinare query sql in base ai risultati di ricerca PHP 1
C Visualizzazione risultati ricerca PHP 0
D aprire una popup per i risultati di una ricerca Javascript 2
E impostazioni pagina risultati motore ricerca interno sito HTML e CSS 5
F access ricerca record con apostrofo. MS Access 0
C Ricerca Prodotti Woocommerce Javascript 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
G Menù a tendina di ricerca con query PHP 1
R Problema query con ricerca id numerico PHP 2
L Mysql: Nascondere le pagine dopo una ricerca PHP 1
F Visualizzazione motore di ricerca SEO e Posizionamento 2
B Stringa sql per ricerca su più campi Database 1
F Funzione Glob - ricerca file contenente una parola PHP 1
P Ricerca campo data PHP 1
L titolo del sito nella pagina di ricerca di google SEO e Posizionamento 2
A Creare un modulo di ricerca avanzata con dreamweaver HTML e CSS 0
L Ricerca valore mysql e incremento PHP 73
E Problema motore di ricerca FULL_TEXT PHP 0
motleyrulez Ricerca filtro con Ajax PHP 1
Shyson [CSS] Posizionare casella di ricerca HTML e CSS 3
P Query di ricerca profonda MySQL 0
T Query per ricerca ritardo evento MS Access 7
B Campo ricerca domini HTML e CSS 4
V Ricerca volontari questionario tesi - Ricambio Offerte e Richieste di Lavoro e/o Collaborazione 0
L Ricerca sviluppatori PHP tempo indeterminato Milano Offerte e Richieste di Lavoro e/o Collaborazione 0
S [PHP] Creare collegamento filtri di ricerca al database PHP 6
L [PHP] Ricerca su search bar esterna PHP 1
D Ente di Formazione accreditato in Regione Lazio ricerca Front End Developer Offerte e Richieste di Lavoro e/o Collaborazione 3
N [WordPress] Ricerca tema WordPress 6
Federico.Marcelo Alla ricerca di scrittori post guest Offerte e Richieste di Lavoro e/o Collaborazione 0
ANDREA20 [PHP] motore di ricerca nel sito PHP 11
O [PHP] Ricerca record tramite post PHP 7
GraceHawk [MS Access] Findfirst per ricerca record MS Access 1
T [PHP] Ricerca nel database PHP 2
A [Javascript] Mostrare un marker se è vicino al risultato di ricerca con google maps Javascript 3
V Semplice barra di ricerca con filtro categorie prodotti E-Commerce 0

Discussioni simili