Pieren a écrit :
2010/7/19 Benoît ROUSSEAU <adressepossi...@free.fr>
    En zone urbaine, à mon avis, pas encore testé, bosser avec ton ton plug va plus vite. Les adresses sont proches, ça va vite. Comme déjà évoqué, à mon avis ce sera plus utile en campagne.

C'est risqué parce que ton outil sera utilisé pour tous les cas de figure une fois disponible. Et on le voit en ce moment avec les doublons ou avec d'autres outils, certains attachent plus d'importance à la quantité qu'à la qualité.
Arrête, j'en tremble déjà. Bon j'ai peut-être des solutions mais c'est à tester.

 
    La règle des BALs c'est terminé en campagne les BALs persos au portail sont remplacées par des totems en "milieu" d'îlot.

Ca dépend de l'ancienneté du bâti.
Pas chez nous.
 
        Tous ce que tu évoques comme relation d'informations supplémentaires à adresses peut se faire comme tu le dis, mais par la suite. Attaquer l'api et calculer la façade la plus proche où dans la visée ortho n'est ni complexe ni gourmand en calculs.


C'est justement ma crainte. C'est de faire faire la partie la plus utile mais la plus difficile par d'autres, plus tard. Il vaut mieux placer l'adresse au meilleur endroit au moment de sa création que d'espérer que chaque application ira spéculer sans trop se planter dans les relations entre adresses et autres POIs. Mais j'ai bien conscience que c'est un vrai challenge au niveau logiciel.
Ca n'a rien de difficile, c'est déjà dans le logiciel et c'est de loin le plus simple que j'ai eu à coder, c'est quelques lignes. Entre les projections, les communications avec le cadastre et l'api, le parser SVG, le reconnaissance des chiffres, ... Comme tu le dis au dessus, je ne veux pas générer des erreurs en nombre automatiquement, j'aimerai rester dans l'acceptable. Et dans ce cas, à moins de m'expliquer une méthode pour assurer un nombre tolérable d'erreur, pour ma part je ne m'engage pas là dessus. Mais rien n'empêche par la suite d'associer automatiquement les adresses aux bâti les plus proches, ca n'a rien de difficile même à l'échelle de la France car c'est finalement très peu de points. Je donnerai tous les éléments si qqun souhaite le faire.

        double Distance(ref PointD pt1seg, ref PointD pt2seg)
        {
            double ampx = pt2seg.X - pt1seg.X;
            double ampy = pt2seg.Y - pt1seg.Y;
            return Math.Sqrt((ampx * ampx) + (ampy * ampy));
        }

        PointD IntersectionOrthoPointSegment(PointD ptadr, PointD ptseg1, PointD ptseg2)
        {
            PointD ptintersec = new PointD(Double.NaN, Double.NaN);
           
            double longueur = Distance(ref ptseg1, ref ptseg2);
            double déterminant = (((ptadr.X - ptseg1.X) * (ptseg2.X - ptseg1.X)) + ((ptadr.Y - ptseg1.Y) * (ptseg2.Y - ptseg1.Y))) / (longueur * longueur);
            if (déterminant < 0.0 || déterminant > 1.0)
                return ptintersec;   // le point n'est pas dans le segment

            ptintersec.X = ptseg1.X + déterminant * (ptseg2.X - ptseg1.X);
            ptintersec.Y = ptseg1.Y + déterminant * (ptseg2.Y - ptseg1.Y);
           
            return ptintersec;
        }

        IntersectionVoie VoieLaPlusProche(Adresse adresse, double distancemax)
        {
            IntersectionVoie intersection = new IntersectionVoie();
            PointD ptcoords = new PointD(adresse.Lon, adresse.Lat);
            PointD pttmp = new PointD();

            double distancemin = double.MaxValue;
            double distance = double.MaxValue;

            foreach (VoieAdressable voie in g_Voies)
            {
                for (int i = 0; i < voie.Points.Count - 1; i++)
                {
                    pttmp = IntersectionOrthoPointSegment(ptcoords, voie.Points[i], voie.Points[i + 1]);

                    if (Double.IsNaN(pttmp.X))
                        continue;

                    distance = Distance(ref ptcoords, ref pttmp);

                    if (distance > distancemax)
                        continue;

                    if (distance > distancemin)
                        continue;

                    distancemin = distance;
                    intersection.Point = pttmp;
                    intersection.IdVoie = voie.IdWay;
                }
            }



Pieren

Benoît R.
_______________________________________________
Talk-fr mailing list
Talk-fr@openstreetmap.org
http://lists.openstreetmap.org/listinfo/talk-fr

Reply via email to