|
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 |
Aperçu |
---|
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 |
|
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 :
|
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é !
|
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 |
|
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? |