<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Pieren a écrit :
<blockquote
cite="mid:AANLkTikiD5TcmKx6Qtw1st9hyR2ppP44ngLb-787-l6u@mail.gmail.com"
type="cite">
<div class="gmail_quote">2010/7/19 Benoît ROUSSEAU <span dir="ltr"><<a
moz-do-not-send="true" href="mailto:adressepossible@free.fr">adressepossible@free.fr</a>></span><br>
<blockquote class="gmail_quote"
style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div bgcolor="#ffffff" text="#000000"> 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.<br>
</div>
</blockquote>
<div><br>
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é.<br>
</div>
</div>
</blockquote>
Arrête, j'en tremble déjà. Bon j'ai peut-être des solutions mais c'est
à tester.<br>
<blockquote
cite="mid:AANLkTikiD5TcmKx6Qtw1st9hyR2ppP44ngLb-787-l6u@mail.gmail.com"
type="cite">
<div class="gmail_quote">
<div><br>
</div>
<blockquote class="gmail_quote"
style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div bgcolor="#ffffff" text="#000000"> 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.<br>
</div>
</blockquote>
<div><br>
Ca dépend de l'ancienneté du bâti.<br>
</div>
</div>
</blockquote>
Pas chez nous.<br>
<blockquote
cite="mid:AANLkTikiD5TcmKx6Qtw1st9hyR2ppP44ngLb-787-l6u@mail.gmail.com"
type="cite">
<div class="gmail_quote">
<div> </div>
<blockquote class="gmail_quote"
style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div bgcolor="#ffffff" text="#000000"> 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.<br>
<br>
</div>
</blockquote>
<div><br>
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.<br>
</div>
</div>
</blockquote>
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.<br>
<br>
<tt> double Distance(ref PointD pt1seg, ref PointD pt2seg)<br>
{<br>
double ampx = pt2seg.X - pt1seg.X;<br>
double ampy = pt2seg.Y - pt1seg.Y;<br>
return Math.Sqrt((ampx * ampx) + (ampy * ampy));<br>
}<br>
<br>
PointD IntersectionOrthoPointSegment(PointD ptadr, PointD
ptseg1, PointD ptseg2)<br>
{<br>
PointD ptintersec = new PointD(Double.NaN, Double.NaN);<br>
<br>
double longueur = Distance(ref ptseg1, ref ptseg2);<br>
double déterminant = (((ptadr.X - ptseg1.X) * (ptseg2.X -
ptseg1.X)) + ((ptadr.Y - ptseg1.Y) * (ptseg2.Y - ptseg1.Y))) /
(longueur * longueur);<br>
if (déterminant < 0.0 || déterminant > 1.0)<br>
return ptintersec; // le point n'est pas dans le
segment<br>
<br>
ptintersec.X = ptseg1.X + déterminant * (ptseg2.X -
ptseg1.X);<br>
ptintersec.Y = ptseg1.Y + déterminant * (ptseg2.Y -
ptseg1.Y);<br>
<br>
return ptintersec;<br>
}<br>
<br>
</tt><tt> IntersectionVoie VoieLaPlusProche(Adresse adresse,
double distancemax)<br>
{<br>
IntersectionVoie intersection = new IntersectionVoie();<br>
PointD ptcoords = new PointD(adresse.Lon, adresse.Lat);<br>
PointD pttmp = new PointD();<br>
<br>
double distancemin = double.MaxValue;<br>
double distance = double.MaxValue;<br>
<br>
foreach (VoieAdressable voie in g_Voies)<br>
{<br>
for (int i = 0; i < voie.Points.Count - 1; i++)<br>
{<br>
pttmp = IntersectionOrthoPointSegment(ptcoords,
voie.Points[i], voie.Points[i + 1]);<br>
<br>
if (Double.IsNaN(pttmp.X))<br>
continue;<br>
<br>
distance = Distance(ref ptcoords, ref pttmp);<br>
<br>
if (distance > distancemax)<br>
continue;<br>
<br>
if (distance > distancemin)<br>
continue;<br>
<br>
distancemin = distance;<br>
intersection.Point = pttmp;<br>
intersection.IdVoie = voie.IdWay;<br>
}<br>
}</tt><br>
<br>
<blockquote
cite="mid:AANLkTikiD5TcmKx6Qtw1st9hyR2ppP44ngLb-787-l6u@mail.gmail.com"
type="cite">
<div class="gmail_quote">
<div><br>
Pieren<br>
</div>
</div>
<br>
</blockquote>
Benoît R.<br>
</body>
</html>