Localiser sur une carte Google Map

Bonjour,

Je souhaite ajouter une action “Localiser sur une carte” pour les adresses, je me suis inspiré du javascript de l’exemple Demo :

var u = Simplicite.ROOT + “/googlemap?lat=” + l[0] + “&lng=” + l[1] + “&info=” + encodeURIComponent("<div style=“width: 200px; height: 75px;”>" + n + “
” + a + “”);
$("#client-map").show();
window.frames.gmap.location.replace(u + “&width=500&height=450&title=false”);

J’ai bien les variable a, n et l alimentées. Je les vois dans la console quand je clique sur le bouton “Localiser sur une carte”, mais rien ne s’affiche à l’écran.

Merci d’avance pour votre aide.
Bonne journée.
Abed.

Encore une fois désolé, j’ai posté trop vite !
J’avais oublié de créér dans le template la zone “client-map”.
La carte s’affiche bien maintenant.

Mea Culpa.

J’ai bien réussi à afficher la carte au niveau d’un formulaire (une seule adresse), j’ai quand même une question complémentaire, comment et où paramétrer le bouton “Carte” au niveau d’une liste afin d’afficher une carte avec plusieurs adresses comme dans l’exemple Demo


Merci encore.

Comme dans la démo sur l’objet DemoClient, l’objet doit avoir un attribut de type Coordonnées géographiques. il faut calculer les coordonnées à la saisie d’une adresse (hook preSave). Il faut paramétrer une carte d’emplacements ( Menu Interface ). Le paramétrage consiste en la saisie de l’objet, des attributs Adresse et de l’attribut de coordonnées géographiques. Le bouton d’action est alors visible en liste et en formulaire à côté du champ. Dans le formulaire, il n’y aura qu’un seul marqueur. Le bouton de liste affichera sur la carte tous les marqueurs de la liste.

Je te remercie Nathalie pour ton aide.
Je souhaite afficher les marqueurs des biens sur une carte.


Dans l’exemple Demo, les adresses des clients se trouvent dans la même table Client, du coup, tous les paramètres renseignés viennent de la même table

Dans notre cas, les adresses des biens se trouvent dans une table Adresse qui a une jointure avec la table Bien (clé technique).

Peux-tu me dire stp si ma demande faisable, c’est-à-dire, être sur la liste des bien en cliquer sur Carte pour afficher les biens aux adresses des bien ? Si oui, quels sont les paramètres à mettre ?

J’ai fait quelques tests avec quelques combinaison sans succès.

Merci.
Abed.

Il y a un exemple de placemap dans la demo (sur l’objet DemoClient dont le code fait la géolocalisation via les services Google):



Je profite de ce post pour vous rappeler que si vous utilisez les services Google (API de géolocalisation, librairie JavaScript Google Maps, …) vous devez impérativement utiliser votre propre clé d’API Google dans le paramètre système GOOGLE_API_KEY.

Merci David pour votre retour.
Comme je l’ai dit dans mon post, la différence entre DemoClient que Nathalie m’a proposé et notre objet ImmoProperty pour lequel nous souhaitons ajouter un placemap, c’est que les adresses des biens se trouvent dans une autre table ImmoAddress. Nous avons une jointure entre les deux. (voir photo plus haut).
D’où ma question, est-ce que c’est faisable ? Si oui, quels sont les paramètres à renseigner dans le placemap ?
Concernant la clé d’API Google, j’ai cru comprendre que c’est seulement lors de la mise en production qu’on devra la changer, pas en développement.

Oui le champ d’un placemap peut être un champ ramené par reference.

Pour ce qui est de la clé d’API Google, autant le faire tout de suite car, de toute façon, nous invalidons régulièrement la clé que nous fournissons à la création de l’instance pour éviter qu’elle soit abusivement utilisée.

Parfait, donc c’est faisable.
Du coup, d’après la copie d’écran que j’avais envoyée de notre modèle, pourriez-vous me dire quels sont les attributs à renseigner dans les champs du placemap ? j’ai fait quelques essais sans succès.
Merci d’avance.
Abed.

J’ai refait le test (dans le cas de la demo en ajoutant une placemap sur l’objet “order” et en utilisant les coordonnées et d’autres champs ramenés du client), ça marche sur la UI legacy mais, effectivement, pas sur la UI responsive.

Nous investiguons

C’est corrigé (cf. https://www.simplicite.io/resources/4.0/releasenote/releasenote-patchlevel-11.md)

Si votre instance est en auto update elle sera mises à jour cette nuit, sinon si vous me donnez son nom je peux forcer une MAJ

Merci David.

Je ne sais pas si notre instance est en auto ou pas. C’est la e3m.demo.
J’en profite pour vous dire que nous avons changé la clé d’API Google

Merci d’avance.
Abed.

OK pour la clé, merci

Je ne sais pas qui vous a créé cette instance mais elle n’est pas protégée, pas en autoupdate (et date du 13 décembre !) et elle n’est pas sauvegardée (ce sont les stratégies par défaut sur le serveur demo.simplicite.io)

PI sur ce serveur demo les instances sont théoriquement supprimées au bout d’un mois.

A partir du moment où vous vous servez d’une instance de manière plus pérenne que de la simple evaluation il faut nous demander de la mettre sur un serveur approprié.

Bonjour,

Je me permet de réutiliser ce Post pour demander s’il était possible que le bouton “Carte” de liste affiche sur la carte tous les marqueurs de la liste (et non pas les adresse de la page sur laquelle on est).

En effet, si on a une liste avec beaucoup d’adresses (plus de 100), donc forcément sur plusieurs pages, le fait de cliquer sur Carte affiche uniquement les marqueurs de la page sur laquelle on est. Ensuite, il faut passer sur une autres pages pour afficher les autres marqueurs.

Merci d’avance pour votre aide.
Abed.

Si la table contient 1 million de lignes ça n’a pas de sens d’afficher 1 million de marqueurs… Même si on ne se limite pas à la page courante il faudrait obligatoirement limiter le nombre de marqueurs d’une manière ou d’une autre.

J’ai logué le point, il sera discuté dans les semaines qui viennent.

Bonjour,
Je suis à la recherche d’une solution pour afficher effectivement toutes les adresses (nous avons 17000 actuellement) en cliquant sur la carte. J’ai trouvé ce post et je voudrai savoir si une solution est déjà proposé
Merci d’avance

Le mécanisme des placemaps est fait pour afficher une carte avec des infos, exemple sur le customer dans la demo:

Bien entendu votre objet métier doit avoir un attribut de type coordonnées géographiques que vous devez calculer ou obtenir à partir d’autres infos de l’objet (typiquement avec le ou les attributs d’adresse). Dans le cas de la démo c’est fait dans le hook preSave de l’objet en utilisant un appel de geolocalisation Google (cf. GMapTool https://docs.simplicite.io/4.0/javadoc/com/simplicite/util/tools/GMapTool.html)

	@Override
	public String preSave() {
		if (!isBatchInstance()) try {
			ObjectField coords = getField("demoCliCoords");

			ObjectField a1 = getField("demoCliAddress1");
			ObjectField a2 = getField("demoCliAddress2");
			ObjectField zc = getField("demoCliZipCode");
			ObjectField ci = getField("demoCliCity");
			ObjectField co = getField("demoCliCountry");

			if (coords.isEmpty() || a1.hasChanged() || a2.hasChanged() || zc.hasChanged() || ci.hasChanged() || co.hasChanged()) {
				String a = a1.getValue() + (a2.isEmpty() ? "" : ", " + a2.getValue()) + ", " + zc.getValue() + ", " + ci.getValue() + ", " + co.getValue();
				AppLog.info(getClass(), "preSave", "Try to geocode " + a, getGrant());
				Location c = new GMapTool(getGrant()).geocodeOne(a);
				AppLog.info(getClass(), "preSave", "Coordinates = " + c, getGrant());
				coords.setValue(c==null ?  "" : c.toString());
			}
		} catch (Exception e) {
			AppLog.error(getClass(), "preSave", null, e, getGrant());
		}
		return super.preSave();
	}

On a d’autres exemples où on binde à un attribut texte l’autocomplete Google Maps ce qui permet de récuperer aussi les coordonnées géographiques, cf. https://docs.simplicite.io/documentation/04-ui/responsive.md#third-party-googlemaps-autocomplete

Etc.

Bonjour,
j’ai déjà mon objet et ma map et tout fonctionne bien.


Ma question était plutôt: j’ai une liste avec beaucoup d’adresses (17000), donc sur plusieurs pages. En cliquant sur la Carte, uniquement les adresses de la page sur laquelle on est s’affichent.

Le but est qu’en cliquant sur la carte, on visualise toutes les adresses de la liste entière. Est ce possible?

On a volontairement limité l’affichage de la placemap aux items courants de la liste, justement pour éviter des extractions de données énormes depuis le serveur et, en prime, un navigateur planté à l’arrivée…

Dans votre cas 17000 marqueurs sur une carte ça n’a de toute façon aucun sens (pas plus qu’un tableau de 17000 lignes), c’est humainement inexploitable. Ce serait donc un “gâchis” technologique.

La bonne solution c’est plutôt des marqueurs groupés qui dépenderaient du niveau de zoom et/ou du nombre d’items dans la zone affichée ou dans le genre. On va creuser cette piste pour voir si on pourrait en faire une feature générique.

1 Like

Bonjour,
Dans la suite de l’utilisation de la Map, j’ai un soucis:
Dans la table, j’ai

Quand j’affiche la map sur cette page je n’ai pas tous les sites.
Par exemple, voilà la carte que j’obtiens :

Sur cette carte il manque deux sites que je peux bien visualiser si je ne les selectionne que tous les deux :

Ceci est peut être lié au fait que nous avons les mêmes coordonnées pour différents sites et donc maps n’affiche que l’un d’eux?
Si c’est le cas, y a t il un moyen de visualiser tous les sites mêmes ceux qui ont les mêmes long et lat (on peut voir les points superposées sur Maps?)?

Merci d’avance