carte personnalisée avec adresse dans SQL

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

carte personnalisée avec adresse dans SQL

Message par stefcio » mar. avr. 02, 2013 12:32 pm

bonjour

voici mon projet :
Je souhaite localiser les adhérent de mon association.

En cherchant sur le web je trouve des astuce pour GoogleMap mais je souhaite le faire avec OSM (pour plein de raisons :) )
Dans ma base SQL j'ai nom, prénom, adresse...
je souhaiterai afficher sur la carte
punaisse (ou autre image) avec infobulle
dans infobulle
nom prénom
adresse
tel
.....

Est ce envisageable ?

Merci d'avance.

Stéphane

sly
Messages : 489
Inscription : sam. févr. 07, 2009 6:33 pm
Localisation : Chambéry - savoie

Re: carte personnalisée avec adresse dans SQL

Message par sly » mar. avr. 02, 2013 12:56 pm

Bonjour,
stefcio a écrit :bonjour
voici mon projet :
Je souhaite localiser les adhérent de mon association.

Dans ma base SQL j'ai nom, prénom, adresse...
Le mieux, si ça avait été possible, eut été/serait de demander à tes adhérents de pointer leur maison sur une carte pour stoquer leurs coordonnées GPS, ça te permettrait ainsi d'éviter de le faire pour ceux qui ne veulent pas, ça te permettrait d'éviter les erreurs de géolocalisation foireux lié à une adresse inconnue, et ça serait au final bien plus simple et indépendant d'un quelconque système de géolocalisation d'adresses. En plus, tu pourrais le pré-remplir "grossièrement" pour tous tes adhérents existants pour qui ça marche.
Est ce envisageable ?
Oui ;-)
- géolocalisation : nominatim
- affichage : openlayers ou leaflet

stefcio

Re: carte personnalisée avec adresse dans SQL

Message par stefcio » mar. avr. 02, 2013 7:16 pm

Merci sly pour cette réponse aussi rapide !

du coup j'ai un peu regardé cela mais je galère pour l'affichage de plusieurs points.

je suis parti avec openlayers :
je me suis aidé de
fsery.fr/spip.php?article55

mais visiblement son code pour plusieurs point ne fonctionne pas ou je l'ai mal adapté :(

Du coup il me vient une autre question
comment je vais pouvoir récupéré "facilement" la localisation longitude et latitude de mes points en ayant l'adresse?

sly
Messages : 489
Inscription : sam. févr. 07, 2009 6:33 pm
Localisation : Chambéry - savoie

Re: carte personnalisée avec adresse dans SQL

Message par sly » mar. avr. 02, 2013 7:24 pm

stefcio a écrit : comment je vais pouvoir récupéré "facilement" la localisation longitude et latitude de mes points en ayant l'adresse?
ça s'appelle la "géolocalisation" et une option possible parmi tant d'autres est d'utiliser nominatim

stefcio

Re: carte personnalisée avec adresse dans SQL

Message par stefcio » mer. avr. 03, 2013 10:55 am

bonjour

Merci pour cette réponse toujours aussi rapide ;)

je résume d'un coté il faut que récupère longitude latitude avec nominatim

de l'autre l'affichage avec openlayers

là on est ok.

nominatim ne me retourne pas toujours un xml valide, mais retourne un json. n'ayant jamais travaillé en json comment via un script je vais pouvoir réinjecter mes coordonnées dans ma base SQL?

et est ce que quelqu'un a un tuto pour l'affiche de plusieurs points sur la carte car là aussi je rame...

ou alors est ce envisageable dans ma boucle de marqueur de récupérer les coordonnées via un bout de script?

Merci encore

Stéphane

stefcio

Re: carte personnalisée avec adresse dans SQL

Message par stefcio » jeu. avr. 04, 2013 7:44 pm

bonjour

j'avance tranquillement
Maintenant j'arrive à faire mon affichage de plusieurs points en utilisant ce code

Code : Tout sélectionner

for (i = 0; i < adherent.length; i++){ 
	
var dimension_icon = new OpenLayers.Size(24,24);
var offset_icon = new OpenLayers.Pixel(-(dimension_icon.w/2), -dimension_icon.h);
var icon = new OpenLayers.Icon('icons/up.png', dimension_icon, offset_icon);

lonlat=new OpenLayers.LonLat(adherent[i][2], adherent[i][1]).transform(
          new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
          new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator Projection
        );

var mon_marker=new OpenLayers.Marker(lonlat, icon);

couche_markers.addMarker(mon_marker);
mon_marker.icon.imageDiv.title = adherent[i][0];

	}
où mes coordonnées sont dans un tableau imbriqué.
maintenant j'ai un title sur chaque point, mais quitte à être gourmand je souhaiterai avoir une info-bulle
comment faire?

pour récupérer les coordonnées je vais coder un bout d'ajax pour réinjecter dans ma base SQL les coordonnées récupérées.

Stéphane

stefcio

Re: carte personnalisée avec adresse dans SQL

Message par stefcio » mar. avr. 09, 2013 9:38 am

bonjour

les choses progressent
avec ce bout de code

Code : Tout sélectionner

 // gestion icone
    var icon = new OpenLayers.Layer.Vector('icone', {
        styleMap: new OpenLayers.StyleMap({
            externalGraphic: 'icons/up.png',
            graphicWidth: 24, graphicHeight: 24, graphicYOffset: -12, graphicYOffset: -12,
            title: '${tooltip}'
        })
    });

//boucle mutlipoint en fonction du nombre de champs dans le tableau adherent

for (i = 0; i < adherent.length; i++){ 
	
    // position a marquer
    var point = new OpenLayers.Geometry.Point(adherent[i][10], adherent[i][11])
        .transform('EPSG:4326', 'EPSG:900913');

    // liaison point/icone/popup 
    icon.addFeatures([
        new OpenLayers.Feature.Vector(point, {tooltip: 'OpenLayers'})
    ]);

    // declaration du popup avec son contenu
    var popup = new OpenLayers.Popup.FramedCloud("Popup", 
        point.getBounds().getCenterLonLat(), null,
        ''+adherent[i][3]+' '+adherent[i][4]+'<br>'+adherent[i][5]+'<br>'+adherent[i][6]+'<br>', null,
        true // <-- true si on veut fermer le popup avec le bouton (X), false sinon
    );
}
    // au final on créé la carte dans la div map
	//declaration du centre de la carte
	var centre=new OpenLayers.LonLat(0,0) // Centre de la carte
	centre=centre.transform(
           new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
           new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator Projection
         );
	var zoom=11;

    carte = new OpenLayers.Map({
        div: "map", projection: "EPSG:900913",
        layers: [new OpenLayers.Layer.OSM(), icon],
    });
	carte.setCenter(centre,zoom);	
    carte.addPopup(popup);
j'arrive :
- à afficher mes points sur la carte
- centrer et zoomer sur un point déterminé

je bloque toujours sur le popup, avec ce code le popup n'apparait que sur le dernier point, et les points ne sont pas cliquable pour faire apparaitre les popup
de plus je bloque toujours sur la récupération à la volé des données lonlat via nominatim

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité