Localiser les membres du site sur une carte

Extraire des données OSM, créer sa carte, uMap, utiliser sur un GPS ou un smartphone...
Répondre
alain17

Localiser les membres du site sur une carte

Message par alain17 » mar. oct. 09, 2012 8:31 pm

Bonjour,

J'ai créé un site http://www.cofishing.net.

Le site affiche des cartes google maps qui situent les membres du site et leurs lieux de pêche sous forme d'icones liées au type de pêche pratiquée.

Les membres enregsitrent la ville ou la région ainsi que la pays de leur lieu de pêche dans une base mysql.

j'ai un problème avec ces cartes google maps : en fin de journée, elles ne s'affichent plus. Sans doute un problème liée à la limitation du nombre de cartes et de points pour la version "free" de l'API Google.

Je recherche donc une autre solution.

Pensez-vous que OSM puisse afficher une carte comme celle que vous verrez sur mon site (si elle fonctionne !)

Où puis-je trouver des exemples de code php / HTML pour réaliser cela ?

Merci de votre aide.

Cordialement

quicky
Messages : 105
Inscription : ven. janv. 22, 2010 9:43 am

Re: Localiser les membres du site sur une carte

Message par quicky » mar. oct. 09, 2012 9:51 pm

Bonjour,

Generalement les sites utilisant le fond de carte OSM se basent sur les API javascript OpenLayers et Leaflet dont tu trouveras les documentations ici:
http://www.openlayers.org/
http://leaflet.cloudmade.com/

Pour l instant je ne vois pas la carte sur ton site donc je ne peux pas t orienter plus precisement.

PS: attention si ton site comsomme bcp de carte tu peux aussi etre blackliste sur osm. Il serait peut etre bien que tu regarde aussi les solutions de cache.

alain17

Re: Localiser les membres du site sur une carte

Message par alain17 » mar. oct. 09, 2012 10:05 pm

Merci pour la réponse.

J'ai beaucoup à apprendre sur les cartes.

En local, mes cartes Google s'affichent bien. Sur le serveur, elles ne s'affichent pas en fin de journée.

Il y a sans doute effectivement un problème de cache car les nombre de cartes affichées est faible (1 carte avec 30 points).

Comment paramétrer le cache de mon serveur ?

Merci

Cdt

alain17

Re: Localiser les membres du site sur une carte

Message par alain17 » mar. oct. 09, 2012 10:31 pm

J'ai parcouru très rapidement les docs.

Le problème, c'est que je ne connait pas javascript...

Y a t-il des exemples de code similaires à celui que j'utilise pour les cartes google maps :

Code : Tout sélectionner

<section class="grande_section">

<?php

require('libs/GoogleMapAPI.class.php');

	$gmap = new GoogleMapAPI('');
	$gmap->setDivId('carte_google_map');
	$gmap->setDirectionDivId('route');
	$gmap->setDisplayDirectionFields(true);
	$gmap->setSize(1250,600);
	$gmap->setDefaultHideMarker(false);
	$gmap->setenableAutomaticCenterZoom(true);
	$gmap->setIconSize(25,25) ;
	include_once 'modules/annonces/1_2_calculer_criteres.php';
	$sql='SELECT annonces.id_annonce, annonces.date_creation, pays.pays_fr, annonces.region, annonces.type_annonce, annonces.titre, annonces.proposition, annonces.accompagnement, annonces.hebergement, membres.id, membres.nom_utilisateur, membres.avatar ';
	$sql=$sql.'FROM (annonces INNER JOIN pays ON annonces.pays = pays.id_pays) INNER JOIN membres ON annonces.membre = membres.id ';
	$sql=$sql.'WHERE (((annonces.valide)=1))';
	$pdo = PDO2::getInstance();
	$annonces=$pdo->prepare($sql);

if (!$annonces->execute()) 
{
	
	echo $annonces->errorInfo();
}
else
{
	//$image_oui='<img src="/images/image/check_16.png" alt="oui" />';
	//$image_non='<img src="/images/image/no_16.png" alt="non" />';
	
	$coordtab0 = array();
	$coordtab1 = array();
	$coordtab10 = array();
	$annonces->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
	
	while( $ligne = $annonces->fetch() ) // on récupère la liste des annonces
	{	
		$id_annonce      = $ligne->id_annonce;
		$date_creation   = $ligne->date_creation;
		$pays            = utf8_encode($ligne->pays_fr);
		$region          = $ligne->region;
		$localisation    = "'".$region." ".$pays."'";
		$localisation    = strtolower($localisation);
		$type_annonce    = $ligne->type_annonce;
		$titre           = $ligne->titre;
		$proposition     = $ligne->proposition;
		$accompagnement  = $ligne->accompagnement ;
		$hebergement     = $ligne->hebergement;
		$id_membre       = $ligne->id;
		$pseudo = $ligne->nom_utilisateur;
		$avatar          = $ligne->avatar ;
		include_once 'modeles/toolbox.php';
		$str_date_creation = date_longue($date_creation);
		if ($type_annonce==0)
		{
		$libelle1=_PROPOSITION;
		$libelle2=TEXT_3650;
		$libelle3=TEXT_3660;
		$libelle4=_PROPOSITION_DETAILLEE;
		
		}
		if ($type_annonce==1)
		{
		$libelle1=_RECHERCHE;
		$libelle2=TEXT_3670;
		$libelle3=TEXT_3680;
		$libelle4=_DEMANDE_DETAILLEE;
		}
		
		//On construit le code HTML affiché dans l'infobulle de chaque point sur la carte
		
		$html= '<a href="index.php?module=annonces&action=1_4_1_afficher_google_map_2';
		$html=$html.'&id_annonce='.$id_annonce;
		$html=$html.'&pays_fr='.str_replace(" ","%20",$pays);
		$html=$html.'&region='.str_replace(" ","%20",$region);
		$html=$html.'&type_annonce='.$type_annonce;
		$html=$html.'">';
		$html=$html.'<p>'._ANNONCE_N.  $id_annonce  ._POSTEE_LE. $str_date_creation ;
		$html=$html.' par <mark>'.$pseudo.'</mark></p></a>';		
		//$html=$html.'<img class="avatar" src="/images/avatar/'.$avatar.' " alt="'.$avatar.'"/></p>';
		$html=$html.'<p><strong>'.$titre.'</strong></p>';
		$html=$html.'<p>'.$region.' - '.$pays.'</p>';
		//$html=$html.'<textarea rows="4" cols="50">'.$proposition.'</textarea>';
		
		if ($accompagnement==1)
		{
		$html=$html.'<p>'.$pseudo.$libelle2._OUI.'</p>';
		}
		else
		{
		$html=$html.'<p>'.$libelle2._NON.'</p>';
		}
		
		if ($hebergement==1)
		{
		$html=$html.'<p>'.$pseudo.$libelle3._OUI.'</p>';
		}
		else
		{
		$html=$html.'<p>'.$pseudo.$libelle3._NON.'</p>';
		}
		
			
		include_once 'modeles/annonces.php';		
		
		$html=$html.'<p>'._MODE_DE_PECHE;
		$modes_de_peche=lire_mode_de_peche_de_l_annonce($id_annonce);
		$modes_de_peche->setFetchMode(PDO::FETCH_OBJ);
		while(  $ligne = $modes_de_peche->fetch() )
		{
			$id_mode= $ligne->id_mode;
			$mode= $ligne->mode_de_peche;
			$html=$html.$mode.'  ';
		}
		$html=$html.'</p>';
		
		$html=$html.'<p>'._TYPE_DE_PECHE;
		$types_de_peche=lire_type_de_peche_de_l_annonce ($id_annonce);
		$types_de_peche->setFetchMode(PDO::FETCH_OBJ);
		while(  $ligne = $types_de_peche->fetch() )
		{
			$id_type= $ligne->id_type_de_peche;
			$type= $ligne->type_de_peche;
			$html=$html.$type.'  ';
		}
		$html=$html.'</p>';
		
		$html=$html.'<p>'._POISSONS_RECHERCHES;
		$poissons=lire_poisson_de_l_annonce ($id_annonce);
				$poissons->setFetchMode(PDO::FETCH_OBJ);
				while(  $ligne = $poissons->fetch() )
				{
					$id_poisson= $ligne->id_poisson;
					$poisson= $ligne->poisson;
					$html=$html.$poisson.'  ';
				}	
		$html=$html.'</p>';	
		
		
		$html=str_replace("\"", """, $html);
	
		
		if ($type_annonce==0)
		// Offre COFISHING
		{
			$coordtab0 []= array($localisation,$html);
		}
		if ($type_annonce==1)
		// Demande COFISHING

		{
			$coordtab1 []= array($localisation,$html);
		}
		if ($type_annonce==10)
		// Offre COFISHING PRO
		{
			$coordtab10 []= array($localisation,$html);
		}
		
	}
	$annonces->closeCursor();
	$icone0='images/image/offre.png';
	$icone1='images/image/demande.png';
	$icone10='images/image/offre_pro.png';
	$gmap->addArrayMarkerByAddress($coordtab0,_PROPOSITION,$icone0);
	$gmap->addArrayMarkerByAddress($coordtab1,_RECHERCHE,$icone1);
	$gmap->addArrayMarkerByAddress($coordtab10,_PROPOSITION,$icone10);
	
            
}		


$gmap->generate();
echo $gmap->getGoogleMap();
?>
</section>;



Merci


Cdt

Avatar de l’utilisateur
cquest
Messages : 1916
Inscription : ven. avr. 16, 2010 12:22 am
Localisation : Val de Marne
Contact :

Re: Localiser les membres du site sur une carte

Message par cquest » mer. oct. 10, 2012 7:46 am

alain17 a écrit :J'ai parcouru très rapidement les docs.

Le problème, c'est que je ne connait pas javascript...
C'est l'occasion de s'y mettre, tu ne le regrettera pas et ton site non plus ;)

BrunoC
Messages : 374
Inscription : sam. juin 23, 2012 11:07 am
Localisation : Nantes
Contact :

Re: Localiser les membres du site sur une carte

Message par BrunoC » mer. oct. 10, 2012 1:32 pm

alain17 a écrit : Y a t-il des exemples de code similaires à celui que j'utilise pour les cartes google maps :
Tu un premier exemple d'affichage de points contenus dans fichier statique. Tout le code est dans la page web (pas de php): bibliothèque javascript Openlayers + fond de carte OSM 'Mapnik'. Cela permettra de te familiariser avec Openlayers:
http://wiki.openstreetmap.org/wiki/FR:O ... er_example

Un second exemple proche de ta réalisation, où le contenu du fichier statique est remplacé par une requête sur une base de donnée, le requête étant traitée par du code PHP :
http://wiki.openstreetmap.org/wiki/Open ... ynamic_POI

ab_fabe@hotmail.com

Re: Localiser les membres du site sur une carte

Message par ab_fabe@hotmail.com » mer. oct. 10, 2012 1:41 pm

Bonjour,

En complément de ce qu'ont proposé les autres, cette page donne des exemples pour Openlayers et Leaflet :
http://switch2osm.org/using-tiles/

Fabien

alain17

Re: Localiser les membres du site sur une carte

Message par alain17 » mer. oct. 10, 2012 6:30 pm

Merci à tous. je vais regarder tout ça de près.

Autre question : dans les libraries évoquées pour OSM, y a t-il des fonctions de géocodage. Autrement dit, plutôt que de donner les coordonnées d'un point, puis-je donner la ville, la région, le pays contenus dans mes tables mysql en littéral ?


Cordialement

quicky
Messages : 105
Inscription : ven. janv. 22, 2010 9:43 am

Re: Localiser les membres du site sur une carte

Message par quicky » mer. oct. 10, 2012 6:58 pm

alain17 a écrit :Merci à tous. je vais regarder tout ça de près.

Autre question : dans les libraries évoquées pour OSM, y a t-il des fonctions de géocodage. Autrement dit, plutôt que de donner les coordonnées d'un point, puis-je donner la ville, la région, le pays contenus dans mes tables mysql en littéral ?
Nominatim est ton ami : http://wiki.openstreetmap.org/wiki/Nominatim

Par contre l outil n est pas parfait, il faut que les donneees soient dans la base OSM et a une certaine epoque il avait beaucoup de retard par rapport a la base OSM, je ne sais pas si la situation a change.

Avatar de l’utilisateur
cquest
Messages : 1916
Inscription : ven. avr. 16, 2010 12:22 am
Localisation : Val de Marne
Contact :

Re: Localiser les membres du site sur une carte

Message par cquest » jeu. oct. 11, 2012 12:56 pm

Nominatim n'est plus en retard sur la base (à ce qu'il me semble).

La limite est bien que les données nécessaires soient présentes dans OSM.
En gros, au niveau ville, ça ira, ensuite, pour les rues c'est variable d'une ville à l'autre et pour les adresses complètes il y en a quand même très peu.

Ab_fab

Re: Localiser les membres du site sur une carte

Message par Ab_fab » jeu. oct. 11, 2012 2:32 pm

http://nominatim.openstreetmap.org/ annonce des données en date du 10 octobre, donc grosso modo un jour de retard.
Ca s'est souvent compté en semaines, voire en mois dans le passé. Pas si mal, donc :-)

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 11 invités