[clos] pas de points sur les cartes

Problèmes, bugs et difficultés rencontrés sur le site.
Avatar du membre
Claude Mauguier
Messages : 4233
Enregistré le : 16 févr. 2005, 01:00
Localisation : Isére

[clos] pas de points sur les cartes

Message par Claude Mauguier »

Au poil, ça marche, mais pourquoi n'y a-t-il pas d'icone sur la carte ??? (à part celle de MRI)

***EDIT***
Pour qu'on suive : c'est sur http://www.refuges.info/point/3960
Avatar du membre
sly
Messages : 5041
Enregistré le : 29 févr. 2004, 17:59
Localisation : Chambéry - Savoie

Message par sly »

un sujet = un bug ;-)
Avatar du membre
Claude Mauguier
Messages : 4233
Enregistré le : 16 févr. 2005, 01:00
Localisation : Isére

Message par Claude Mauguier »

En fait le picto apparaît bien sur les cartes de zones, mais pas sur les cartes vignettes de la page point.
Avatar du membre
Dominique
Messages : 3705
Enregistré le : 08 avr. 2006, 21:58

Message par Dominique »

L'extraction ne tient plus compte des BBox (ça marchait hier soir)
Avatar du membre
yip
Messages : 387
Enregistré le : 08 mars 2004, 23:32

Message par yip »

Oui j'ai causé le probleme, je m'en occupe.

Dominique: j'ai pensé bien faire, mais je commence à déchanter :(

Ca vient de la fonction infos_points(). Elle fait plusieur tests differents (entre autre):
1- appartenance a un polygone massif
2- appartenance a un polygone Bbox
3- appartenance a un polygone Cercle (rayon/proximité/distance)

parfois 2 test dans le meme SQL, avec les nombreuses conditions qui se superposent les unes aux autres.

J'ai voulu regrouper tout ça en 1 seul test:
-appartenance a un polygone tout-court.

L'interface OL donne un polygone qui est carré comme une BBOX
La fiche point donne un polygone qui ressemble a un cercle de proximité

Le job de la fonction n'est plus que de renvoyer les points qui appartiennent au polygone donné.
Avatar du membre
yip
Messages : 387
Enregistré le : 08 mars 2004, 23:32

Message par yip »

ca devrait etre mieux la .
Avatar du membre
Dominique
Messages : 3705
Enregistré le : 08 avr. 2006, 21:58

Message par Dominique »

Impec. Merci
Avatar du membre
sly
Messages : 5041
Enregistré le : 29 févr. 2004, 17:59
Localisation : Chambéry - Savoie

Message par sly »

yip a écrit : Dominique: j'ai pensé bien faire, mais je commence à déchanter :(
Il est vrai que nous avons laissé notre discussion en suspend, et peut-être quedans le code où il est question de distance, on ne gagne pas tant vu qu'il faut quand meme calculer la distance.


A rechercher l'abstraction ou la "généralisation" on fini par s'éloigner des 3 besoins simples actuels dont notre site a besoin et que le contre coup, c'est qu'a simplifier de quelques lignes dans la fonction, on a au final besoin de quelques lignes en plus en dehors de la fonction à chaque appel.
Ca vient de la fonction infos_points(). Elle fait plusieur tests differents (entre autre):
1- appartenance a un polygone massif
2- appartenance a un polygone Bbox

parfois 2 test dans le meme SQL
(...)
Le job de la fonction n'est plus que de renvoyer les points qui appartiennent au polygone donné.
Et là, je tente de vois l'avenir (on m'appel Irma la voyante !) : pensant qu'on peu tout regrouper dans un seul st_within tu va créer la fonction intermédiaire qui construit la géométrie, sauf que des fois, cette géométrie, c'est l'id d'un polygone de notre base ou des fois c'est un simple rectangle de bbox, mais la fonction à faire est très différente : l'une construit un WKT l'autre appel quelque chose par id, bref, ta fonction commence à devenir mutante et sans doute pénible à appeler, et tu découvres alors avec effroi que le besoin d'appartenance à une bbox se cumule à l'appartenace à un polygone (c'est pas l'un soit l'autre, mais c'est orthogonal, c'est l'un et/ou l'autre), et c'est pour ça je pense qu'il y en avait 2 . Le risque ensuite c'est e e dire qu'ilfaut la géométrie qui est l'intersection des deux (bbox intersect polygone), et là, la fonction intermédiaire de construction de géométrie prends tout à coup l'allure d'une multinationale de la pétrochimie du gaz
Avatar du membre
Claude Mauguier
Messages : 4233
Enregistré le : 16 févr. 2005, 01:00
Localisation : Isére

Message par Claude Mauguier »

sly a écrit :et là, la fonction intermédiaire de construction de géométrie prends tout à coup l'allure d'une multinationale de la pétrochimie du gaz
...de schiste.
Avatar du membre
yip
Messages : 387
Enregistré le : 08 mars 2004, 23:32

Message par yip »

ok j'arrete là.

j'ai seulement regroupé la distance et la BBox.

Tu connais la philosophie Unix Sly : des petites fonctions qui font qu'un seul taf, et qui le font bien.

J'ai voulu l'appliquer a infos_points, 1 seul taf , points dans un poly, mais c'est trop dur.
Avatar du membre
sly
Messages : 5041
Enregistré le : 29 févr. 2004, 17:59
Localisation : Chambéry - Savoie

Message par sly »

yip a écrit : j'ai seulement regroupé la distance et la BBox.
Et il fallait le faire ! c'est une bonne idée, car il faut factoriser le code, et c'est deux fonctions sont très similaires.
Tu connais la philosophie Unix Sly : des petites fonctions qui font qu'un seul taf, et qui le font bien.
Exact, et je souhaite toujours m'y tenir.
Mais sous unix, tu trouvera aussi le concept de l'alias, prends par exemple la commande "zgrep $texte $file.gz" elle recherche un texte dans un fichier compressé. Pourtant, tout bon unixien sait qu'il obtient le même résultat avec gunzip $file.gz -c | grep $texte

En interne, le code de grep et le code de gunzip ne sont bien sûr pas dupliqués, mais on obtient un petit wrapper sympa, plus rapide à taper et qui donne le même résultat.

La fonction infos_points avait ce problème : le code du st_within était dupliqué pour bbox et distance, l'idée de créer une fonction qui génère la géométrie est bonne, on avait 3 choix pour le faire :

Code : Tout sélectionner

$c->geometrie=creation_geometrie("bbox","45,7,46,8"); 
ou 
$c->geometrie=creation_geometrie("cercle",45,7,1000);
$points=infos_points($c);
On garde une interface simple pour rentrer les conditions de géométrie, mais une fonction intermédiaire s'occupe de créer cette géométrie, et on la passe à infos_points

Code : Tout sélectionner

$c->bbox="45,7,46,8"; 
ou 
$c->cercle="45,7,1000";
$points=infos_points($c);

Dans infos_points :
if ($c->bbox or $c->cercle)
  sql=st_within(geom,creation_geometrie("bbox",$c->bbox); (Ou truc du genre)
On conserve l'interface initiale également simple, mais on factorise le code de synthèse géométrique et de condition SQL

La 3ème : la tienne, on fait presque comme la première, mais c'est lors de l'appel qu'on doit construire le tableau définissant la géométrie.

Perso, celle que je préfère, c'est la 4ème ;-) Où l'on généralise encore plus l'appel à infos_points() et on écrit une pré-fonction qui centralise l'analyse des conditions, et appelle infos_points qui elle est factorisée comme dans 1

Le code du fichier point_recherche.php devient alors aussi simple que ça :

Code : Tout sélectionner

$conditions=analyse_conditions_point($_POST);
$points=infos_points($conditions);
dans nav.php

Code : Tout sélectionner

$conditions=analyse_conditions_point($_GET);
$points=infos_points($conditions);
Son rôle étant de faire l'interface entre nos formulaires de recherche, nos appels à l'exportation, nos appels aux GML.

Elle, s'occupera ensuite de voir que la demande comporte un "&bbox=45,7,6,75"
De ça, elle déduit qu'il faut une condition de box, elle appelle elle la fonction creation_geometrie, constuit le tableau nécessaire, et renvoi l'objet "$conditions" pré-maché que la fonction infos_points peut consommer.
On se garde toutefois la possibilité d'appeler infos_points en direct, pour des cas de figure plus sioux