Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2941 connectés 

 


Dernière réponse
Sujet : [PHP] cherche une fonction
shinji Voilàaaa c'est finis, encore....
 
Non sans déconner, c'est fait! ça peut être amélioré mais les 2 solutions marchent. Un plus pour la version je clique, ça envoi la position au serveur qui renvoi le nom de la commune car elle marche, pas de temps de chargement comme pour les areas, marche quelque soit le navigateur avec aucun beug.
 
La solution des areas mérite quand même une attention car elle est plus intéractive, je pense l'utiliser quand même sur de plus petites cartes. Cela dit, si tu trouve d'où vient le prob (le alt ne s'aafiche pas pour toutes les communes sous Netscape et pas du tout sous IE) Pourtant le alt marche sous IE, j'ai testé mais on dirait que cela vient du contour trop détaillé ou précis des communes?
 
Envoi moi un mail si tu veux toujours le résultat : yannbarrault@yahoo.fr

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
shinji Voilàaaa c'est finis, encore....
 
Non sans déconner, c'est fait! ça peut être amélioré mais les 2 solutions marchent. Un plus pour la version je clique, ça envoi la position au serveur qui renvoi le nom de la commune car elle marche, pas de temps de chargement comme pour les areas, marche quelque soit le navigateur avec aucun beug.
 
La solution des areas mérite quand même une attention car elle est plus intéractive, je pense l'utiliser quand même sur de plus petites cartes. Cela dit, si tu trouve d'où vient le prob (le alt ne s'aafiche pas pour toutes les communes sous Netscape et pas du tout sous IE) Pourtant le alt marche sous IE, j'ai testé mais on dirait que cela vient du contour trop détaillé ou précis des communes?
 
Envoi moi un mail si tu veux toujours le résultat : yannbarrault@yahoo.fr
Mara's dad Les fonctions intersect et ccrw, je les ai trouvées là :
http://www.enseignement.polytechni [...] 0/a10.html
 
Je ne sais pas comment elles marchent. La notion de produit vectoriel est trop vieille pour moi !
 
Celà dit, j'ai fait quelques tests qui ont tous donnés le bon résultat !
 
Pas la peine, d'envoyer le résultat pour le moment ! J'attend  la version finale avec frames et tests d'intersection :)

 

[edtdd]--Message édité par Mara's dad--[/edtdd]

shinji

Mara's dad a écrit a écrit :

Je vois pas trop l'intérêt du javascript pour appeler ta page php... Un lien fait la même chose, non ?
 
Mais si tu veux pas que toute ta carte soit rechargée, utilise les frames !
 
Ex : La carte à gauche, et à droite, un tableau vertical qui donne des infos sur la ville courrante.
Quand tu clique sur la carte (sans les AREAs, mais juste avec le ismap), tu envoie au serveur les coordonées. Il trouve la ville, et renvoie les infos dans le tableau de gauche.
 
Au fait, çà prend combien de temps pour générer les 13000 <AREA...> ?
 
Et la taille de la page reçu, c'est quoi ?  




Salut!
 
La taille est donc de 250ko pour 1300 communes, 70ko pour 350 communes.
La page met moins de 5 sec à s'afficher. C'est très correct.
 
Par contre, que ce soit netscape ou IE, ils réagissent bizarrement aux "alt" :  
-sous Netscape, certains "alt" ne marchent pas et pas obligatoirement les mêmes d'une fois sur l'autre (étrange).
-sous IE, un alt ne marche si le polygone n'est pas trop compliqué.
ex:  
ce alt ci marche:
<HTML>
<BODY>
<IMG src="http://127.0.0.1/PHP/carte/area.jpg" usemap="#map1">;
<MAP name="map1">
<AREA shape="poly" href="http://127.0.0.1/PHP/carte/carte21.php?numco=35250" alt="rennes" coords="0,0 300,0 300,300 0,300 0,0">
</MAP>
</BODY>
</HTML>

Celui-ci ne marche pas:
<HTML>
<BODY>
<IMG src="http://127.0.0.1/PHP/carte/area.jpg" usemap="#map1">;
<MAP name="map1">
<AREA shape="poly" href="http://127.0.0.1/PHP/carte/carte21.php?numco=35250" alt="rennes" coords="0,0 300,0 300,300 0,300 0,0748,972 748,976 744,979 734,978 734,973 731,972 723,977 722,975 724,971 729,965 725,961 727,959 729,958 734,958 736,961 746,956">
</MAP>
</BODY>
</HTML>
 
Voilà!
Le résultat est serait excellent s'il n'y avait pas ces quelques "ratés".
 
J'ai bien envie d'essayer la méthode de la carte à gauche avec ismap et quand on clique, on envoie au serveur qui nous renvoi les données dans un tableau à droite de la carte.
Pour ça, il faut avoir une frame pour la carte et une pour le tableau non? sinon la carte est rechargée, c'est ça?
 
Enfin, j'ai du mal à comprendre les fonctions intersect et ccrw, si tu pouvait juste me dire le but (ex, celle-ci test si les deux vecteurs que constituent les segments sont colinéaires ce qui veut dire que les segments ne se croisent pas).
 
Merci, je peux t'envoyer le premier résultat même s'il n'est pas encore peaufiné.

shinji au fait la taille c'est 300Ko mais pour 1300 communes et une carte de 1000*2000. J'essayerais plus petit lundi.
Bon Week End
shinji Le javascript, c'était parce que si je met un lien, il n'y aura plus la carte ce sera une nouvelle page ou elle sera rechargée, non?
Est-ce que tu pourais m'expliquer si t'as compris les 2 fonctions parce que je m'arrache à essayer de comprendre.
 
Je dois y aller, je continue dès lundi matin.
 
Merci, à plus!
Mara's dad Je vois pas trop l'intérêt du javascript pour appeler ta page php... Un lien fait la même chose, non ?
 
Mais si tu veux pas que toute ta carte soit rechargée, utilise les frames !
 
Ex : La carte à gauche, et à droite, un tableau vertical qui donne des infos sur la ville courrante.
Quand tu clique sur la carte (sans les AREAs, mais juste avec le ismap), tu envoie au serveur les coordonées. Il trouve la ville, et renvoie les infos dans le tableau de gauche.
 
Au fait, çà prend combien de temps pour générer les 13000 <AREA...> ?
 
Et la taille de la page reçu, c'est quoi ?
youdontcare shinji > est-ce indiscret de te demander sur quel site tu bosses ?
shinji Moi ça marche sous Netscape, pas sous IE 5.00 ? Mais il déconne en ce moment IE sur mon poste, je vais le ré-installer bientôt.
Un truc bizarre sinon, c'est que ça marche pour Netscape mais pas pour tous les polygones, et pas  tout le temps les mêmes. A quoi cela peut être dû? Manque mémoire, exécution trop longue.
Enfin c'est pas hyper grave, j'ai obtenu le résultat voulut. Je vais chercher quand j'aurai réussit avec les intersections mais pour cela, je suis en train de me replonger dans les cours sur les produits vectoriels ou scalaire pour essayer de comprendre les 2 fonctions. Je te fait signe dès que la solution 2 marche et je t'enverrai le tout à ce moment là.
Sinon, tu me disais que c'est possible de mettre une fonction javascript à la place de "href". Et est-ce que cette fonction pourrait afficher/raffraichir sur la même page le résultat d'un script php.
Au final, on aurait une carte des communes et quand on clique dessus, on appelle une fonction javascript qui envoi le numéro de la commune à un script PHP(qui cherche une donnée sur cette commune) et qui renvoi un résultat, ce résultat apparaissant dans un tableau ou un truc comme ça mais sur la même page que la carte. Si tu vois ce que je veut dire?
 
Merci en tout cas! Le PHP c'est génial mais le javascript aussi !
Connaissait pas et j'apprécie :)
Mara's dad Ben moi j'ai que IE 5.0 (NT4) au boulot, et çà marche bien !
shinji Le alt ne marche que sous Netscape apparement?
Y a-t-il un moyen de le faire avec IE ?
Mara's dad Avec ce code :  

Code :
  1. <IMG src="images/x.gif" usemap="#toto">
  2. <MAP name=toto>
  3. <AREA href="testimg.php?x=1" shape="rect" coords="0,0,10,25" alt="coucou">
  4. <AREA href="testimg.php?x=2" shape="rect" coords="10,0,25,25" alt="TOTO">
  5. </MAP>


 
Les infobulles (alt="TOTO et alt="coucou" ) fonctionnent très bien !

shinji ça marche, j'ai une carte avec une area (donc un lien avec en paramètre le n° de la comune) pour chaque commune.
Seulement le alt, il fait rien, je ne l'utilise peut ê pas bien.  
J'ai cherché sur le web et dans un bouquin et c'est marqué que ça sert à remplacer un objet graphique que le browser ne peut afficher?
Voici mon script:
 
<?
   echo"<HTML>";
   echo"   <HEAD>";
   echo"      <TITLE>The cool site!</TITLE>";
   echo"   </HEAD>";
   echo"   <BODY>";
   echo"     <IMG src=\"http://126.234.1.4/carte/carte21.php\" usemap=\"#map1\">";
   echo"     <MAP name=\"map1\">";
 
   $conn1 = Ora_Logon("scott","tiger" );
   $curs1 = ora_open($conn1);
   $queryauto1="select * from BRETAGNE";
   ora_parse($curs1,$queryauto1);
   ora_exec($curs1);
   while(ora_fetch($curs1)){
               $chaine="<Area alt=";
               $nomcommune = ora_getcolumn($curs1,1);
               $chaine=$chaine."\"$nomcommune\"";
               $chaine=$chaine." href=\"http://126.234.1.4/carte/carte.php?numco=";
               $commune = ora_getcolumn($curs1,0);
               $chaine=$chaine."$commune";
               $coord = ora_getcolumn($curs1,4);
               $ptsco=explode(",",$coord);
               $nb=count($ptsco)/2;
               $chaine=$chaine."\" shape=\"poly\" coords=\""."$coord"."\">";
               echo $chaine."<br>";
         }
   ora_close($curs1);
   echo"     </MAP>";
   echo"   </BODY>   ";
   echo"</HTML>";
?>
 
J'essaye l'autre solution en attendant. Merci
shinji Merci, je continue avec les areas mais après j'essaye l'autre solution, on verra laquelle est la mieux.
Pour moi la pause est finie, je m'y remet, ça avance!
Merci! Je te tiens au courant!
Mara's dad Bon, une petite pose, çà mérite un bon sandwich et une bonne mousse !
Mara's dad J'ai trouvé !
 

Code :
  1. if( intersect( 2, 3, 8, 8, 3, 6, 7, 2) )
  2. echo( "Intersection !" );
  3. else
  4. echo( "PAS Intersection !" );
  5. function intersect( $p1x, $p1y, $p2x, $p2y, $p3x, $p3y, $p4x, $p4y)
  6. {
  7. return( ccw ( $p1x, $p1y, $p2x, $p2y, $p3x, $p3y) * ccw ( $p1x, $p1y, $p2x, $p2y, $p4x, $p4y) <= 0 ) && ( ccw( $p3x, $p3y, $p4x, $p4y, $p1x, $p1y) * ccw( $p3x, $p3y, $p4x, $p4y, $p2x, $p2y) <= 0 );
  8. }
  9. function ccw ( $p0x, $p0y, $p1x, $p1y, $p2x, $p2y)
  10. {
  11. $dx1 = $p1x - $p0x;
  12. $dy1 = $p1y - $p0y;
  13. $dx2 = $p2x - $p0x;
  14. $dy2 = $p2y - $p0y;
  15. if( $dx1 * $dy2 > $dy1 * $dx2 ) return 1;
  16. else if( $dx1 * $dy2 < $dy1 * $dx2) return -1;
  17. else
  18. {
  19.     if( $dx1 * $dx2 < 0 || $dy1 * $dy2 < 0 ) return -1;
  20.       else if( $dx1 * $dx1 + $dy1 * $dy1 >= $dx2 * $dx2 + $dy2 * $dy2 ) return 0;
  21.       else return 1;
  22.    }
  23. }


 
Adapté de  : http://www.enseignement.polytechni [...] 0/a10.html

shinji Putain quel con je fais! des fois :)
Mara's dad Plusieurs problèmes :  
 
La chaîne href\"... n'est pas fermée par un \"
Il n'y a pas de > pour fermer les area.
 
Le résultat de :
[code]
$chaine="<Area href=\"http://126.234.1.4/carte/carte21.php?resultat=\">";
echo "chaine=" . $chaine . "<br>";
$chaine="<Area href=\"http://126.234.1.4/carte/carte21.php?resultat=\">";
echo "chaine2=" . $chaine . "<br>";
[\code]
 
est :
chaine=
chaine2=
 
Ce qui est normal, il n'affiche pas les <area...> mais il sont dans le source généré.
shinji Je continue sur les area mais j'essayerais ton truc avec x,y.
Pour le alt, c'est cool! :)
 
Sinon j'ai un prob :  
 
<?
$chaine="<Area href=\"http://126.234.1.4/carte/carte21.php?resultat=";
echo "chaine=".$chaine."<br>";
$chaine="";
$chaine="yann";
//$chaine="<Area href=\"http://126.234.1.4/carte/carte21.php?resultat=";
echo "chaine2=".$chaine."<br>";
?>
 
Je comprends pas pourquoi si je ne met pas cette ligne en commentaires, à l'affichage, il n'y a plus rien à "chaine=2..."
Mara's dad

shinji a écrit a écrit :

avec le alt, le nom de paris va s'afficher?
Pour le résultat, dès que j'ai finis...
merci  




 
Oui, comme les bulles d'info pour une image, sans même avoir besoin de faire un click !

Mara's dad Autre chose, pour les coordonées, si tu veux faire le traitement sur le serveur :
 
<A href="testimg.php">
 <IMG src="images/x.gif" ismap alt="target">
</A>
 
Mettre l'image dans un lien <a href=...></a>, et utiliser le mot clef ismap.
 
L'url du lien devient testimg.php?x,y
 
et donc dans $QUERY_STRING tu récupère une chaîne de la forme "x,y" donc "123,563" par exemple !
 
Bon mais c'est un peu tard vu que t'as l'air parti sur les AREAs !
 
Pour les intersection de segment, j'ai une piste, mais c'est pas encore çà !
shinji avec le alt, le nom de paris va s'afficher?
Pour le résultat, dès que j'ai finis...
merci
Mara's dad Non, j'ai pas Oracle, mais avec les données d'un coté (sous forme de fichier plat zippé), et la structure, je peux me débrouiller !
 
Pour le coup du javascript, c'est possible, mais s'il s'agit juste d'afficher le nom de la commune, un alt suffit !
 
<AREA alt="Paris (75)" shape="rect" coords="0,0,118,28">
shinji En fait dans ma BDD, j'ai pour chaque polygone, les coordonnées de son contour, les coordonnées du centroide(pas le vrai centre) et celles du rectangle qui entoure le polygone. Donc je recherche les polygones dont le point x,y est à l'intérieur du rectangle. Seulement des fois, selon l'endroit ou l'on clique, le point appartient à plusieurs rectangle. Mais bon, ça enlève  déjà un bon nombre de possibilités.
 
Voici la requète :
 
$queryauto1="select * from BRETAGNE where MINX<'".$x."' AND MINY<'".$y."' AND MAXX>'".$x."' AND MAXY>'".$y."'";
 
Sinon pour les maps, ça avance mais je me pose cette question : c'est pas forcément un lien hypertexte l'area, ça peut être une fonction javascrit?
 
Parce que je veut garder la carte à l'écran en permanence et avoir un petit cadre dans lequel je met à jour le nom de la commune sur laquelle on clique.
 
Je veux bien te filer le résultat mais j'ai une BDD Oracle alors ? je t'envoi les scripts et le contenu de la BDD par mail? avec la description de la BDD? T'as peut être pas Oracle?
Mara's dad Oui, je veux bien le résultat !
 
Comment elle fait ta requête pour arriver à ce résultat ? ? ?
 
Pour le problème des segments qui se coupent ou pas, j'y réfléchi !
shinji C'est peut être bon alors parce que j'ai ma requète qui me rend que 1 , 2 voir 3 polygones donc c'est pas la mort non plus! J'ai juste à déterminer le bon entre 2 ou 3.  
Je suis en train d'essayer avec les maps.
 
Le problème que j'ai pour ma solution c'est comment savoir si un segment en coupe un autre en php?
 
Tout ça c'est pour afficher une carte avec des communes, et quuand l'utilisateur clique sur l'une d'elle, que ça affiche le nom de la commune.(la carte avec les communes est générées en php selon des critères, couleurs, légendes...).
 
Si tu veux je t'envoi le résultat une fois que j'aurai finis?
Mara's dad Ton algo fonctionne !
 
Je résume : tu choisi un point de coordonées genre (-1,-1) pour être certain qu'il soit en dehors de tous tes polys.
A partir de se point et du point (x,y) et on à un segment.
Pour chaque poly à tester, tu calcul le nombre de segment  (rejoignant les sommets du poly) qui coupe ton segment. S'il est impair, c'est que le point est dans ce poly.
Et il va faloir que tu fasse tout çà en moyenne 650 fois !
Sauf si tu à un autre algo qui te permette de ne tester que les poly les plus probables !
 
C'est sûr que générer 1300 area c'est pas la mort. Le problème à ce moment là, c'est la taille de la page générée !
 
On peux te demander à quoi sert tout çà ?
shinji En fait si vous voulez tout savoir, j'ai une carte générée en php. (un ensemble de polygones (convexe c'est quoi?)) L'utilisateur clique sur un des polygones, je récupère en javascript les coordonnées (x,y) où l'utilisateur clique. Je recherche les polygones qui sont proches avec une requète mais dès fois il m'en retourne 2 (ou plus rare). J'ai les coordonnées du contour de chaque polygone et il me reste a savoir à quel polygone appartient le point (x,y) parmis ceux renvoyé par la requète.
Je pense Mara's Dad mais je suis pas sûr( ce serait pas la 1ère fois que je me goure) que avec des map ce serait le bordel car la carte sur laquelle l'utilisateur peut être différente d'une fois sur l'autre (carte générée par PHP préalablement). Faire des maps area dynamiquement ? Peut être, je sais pas trop? Ce serait pas trop long en exécution?
art_dupond ma méthode marche pour n'importe quel polygone, convexe ou pas convexe. non ?
Mara's dad Ok, mais pourquoi se fair ch... si le client te dis déjà quel poly à été sélectionné ?
 
Pour l'amour de l'algo ?
 
Mais non, il a autre chose à faire shinji !
youdontcare oui mais môssieur veut faire ça sur le serveur, on dirait :D
Mara's dad youdontcare a posé la bonne question :
 
IL EST CONVEXE OU PAS ton polygône ?
 
C'est important pour touver une solution !
 
Sinon, au vu de tes autre Posts ( trouver la position du curseur au moment d'un click sur une image ;) ), j'ai l'impression que tu cherche à savoir dans quelle parie d'une image l'utilisateur à clické. Si c'est çà, tu te prend la tête pour rien, parce-que c'est déja prévu !
 
Exemple :
 
<img src=toto.jpg usemap=tata>
<map name=tata>
   <area url=page.php?zone=1 SHAPE=POLY COORDS="0,0,300,0,300,100,0,100,0,0">
   <area url=page.php?zone=2 SHAPE=POLY COORDS="0,100,300,100,300,200,0,200,0,100">
</map>
 
Voir donc la doc HTML : http://www.w3.org/TR/html4/struct/ [...] def-coords
 
Comme il est dit dans la doc, la dernière paire de coorodonnée d'un polygône doit être la même que la première pour fermer le polygône !
 
J'ai bon ?
art_dupond bon, je pense avoir une solution.
 
Tu cherches le centre de masse G de ton polygone. Il est forcement intérieur.  
Ensuite, tu relies G à tous les sommets, mais tu ne gardes que les segments qui ne coupent pas les côtés.
Si deux sommets consécutifs ne sont pas reliés à la fin de cette procedure, tu relies les deux sommets les plus proches (non consecutifs) reliés.
 
Donc si dans un octogone, les sommets 1,2,3,4,7,8 sont reliés, il faudra ensuite relier les sommets 4 et 7 entre eux.
 
Puis il faut recommencer (donc trouver le centre de masse...) avec le polygone formé par les sommets non relies (donc 4,5,6,7 dans l'exemple), sauf s'il n'y a qu'un sommet entre les deux sommets qu'on a relié (parce que le fait de les avoir reliés aura donc fait un triangle)
 
On s'arrête quand tous les sommets sont reliés.
 
Ensuite, reste à tester si le point est dans les triangles formés.
 
bong, c'est peut être pas la meilleure solutiong  :sleep: , mais je pense que ca peut marcher.
 
 
euh, il faut relier les sommets avec des droites, mais garder les coordonnées des triangles ainsi formés.

 

[edtdd]--Message édité par art_dupond--[/edtdd]

shinji Il faut que je sache si le polygone est à l'intérieur du polygone pas sur un segment. Je pense que la triangulation est une solution. Je vais essayer, attention,... c'est partis, adieuuuuuuu
art_dupond ben un polygone, c'est une suite de segments. non ?
 
ou pit-être que la question est de tester si le point est intérieur au polygone...
 
 
bon je vais réfléchier un peu pour ca...
youdontcare art_dupond > non. ta fonction teste si le point appartient à un segment, pas à un polygone. en changeant le == par un >= qq part on peut tester pour un point à l'intérieur d'un polygone, à condition que ce dernier soit convexe.
 
mais bon l'est pas convexe le polygone, hein ?
art_dupond pour voir si un point appartient à un segment :  
 
 
A (Xa,Ya)
B (Xb,Yb)
 
P (x,y)
 
P appartient à [A,B] si [dist (AP) + dist (PB)] == dist (AB)
 
 
 
enfin je crois parce que je suis pas très réveillé là...
youdontcare phew ... je connais pas l'algo, mais ça doit ressembler à une triangulation + test si le point appartient à un des triangles.
 
bon courage :D c'est pas à toi que je disais de chercher sous google tt à l'heure ? hmmmm ?
art_dupond tu fais une fonction pour voir si le point appartient à un segment de droite, puis tu testes pour tous les cotés. Non ?
shinji C'est si dur que ça?  
ça mérite bien un coup de main alors!
S'il vous plaît.
shinji Je cherche une fonction qui me permetrais de savoir si un point (x,y) appartient à un polygone (x1,y1,x2,y2,...xn,yn)?
Vous connaissez pas une fonction qui fait ça ou qui pourrait me faciliter la tache?

Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR