[clos] pas de points sur les cartes
-
- Messages : 4233
- Enregistré le : 16 févr. 2005, 01:00
- Localisation : Isére
[clos] pas de points sur les cartes
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
***EDIT***
Pour qu'on suive : c'est sur http://www.refuges.info/point/3960
-
- Messages : 5041
- Enregistré le : 29 févr. 2004, 17:59
- Localisation : Chambéry - Savoie
-
- Messages : 4233
- Enregistré le : 16 févr. 2005, 01:00
- Localisation : Isére
-
- Messages : 3705
- Enregistré le : 08 avr. 2006, 21:58
-
- Messages : 387
- Enregistré le : 08 mars 2004, 23:32
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é.
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é.
-
- Messages : 3705
- Enregistré le : 08 avr. 2006, 21:58
-
- Messages : 5041
- Enregistré le : 29 févr. 2004, 17:59
- Localisation : Chambéry - Savoie
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.yip a écrit : Dominique: j'ai pensé bien faire, mais je commence à déchanter :(
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.
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 gazCa 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é.
-
- Messages : 4233
- Enregistré le : 16 févr. 2005, 01:00
- Localisation : Isére
-
- Messages : 387
- Enregistré le : 08 mars 2004, 23:32
-
- Messages : 5041
- Enregistré le : 29 févr. 2004, 17:59
- Localisation : Chambéry - Savoie
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.yip a écrit : j'ai seulement regroupé la distance et la BBox.
Exact, et je souhaite toujours m'y tenir.Tu connais la philosophie Unix Sly : des petites fonctions qui font qu'un seul taf, et qui le font bien.
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);
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)
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);
Code : Tout sélectionner
$conditions=analyse_conditions_point($_GET);
$points=infos_points($conditions);
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