Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Thu 05 December 2002 11:07

Serge Lasgouzes
Invité

Point sur milieu polyligne

Bonjour.
Je recherche un bout de code Mapbasic a integrer dans un programme mapbasic existant afin de calculer les coordonnees d'un point milieu d'un polyligne. (Nativement Mapinfo donne le barycentre qui n'est pas obligatoirement sur la polyligne)
Merci d'avance

 

#2 Fri 06 December 2002 11:35

Eric Mauvière
Invité

Re: Point sur milieu polyligne

Bonjour,

Je vous suggere le programme suivant, qui cree un point au milieu d’une polyligne precedemment selectionnee :

include c:devmapbasic.def
dim pl as object,j as integer, xc,yc,x1,y1,x2,y2,dist,t,l,d,long as
float

'il faut que le systeme de coordonnees de la carte soit defini en metres
'pour que la suite soit coherente

run command set  + tableinfo(selection,TAB_INFO_COORDSYS_CLAUSE)
set distance units m

if SelectionInfo(SEL_INFO_NROWS) 1 then
note un objet et un seul doivent etre selectionnes
else
fetch rec 1 from selection
pl=selection.obj
long= objectlen(pl, m )
if objectinfo(pl,OBJ_INFO_TYPE)OBJ_TYPE_LINE and
objectinfo(pl,OBJ_INFO_TYPE)OBJ_TYPE_PLINE then
note cet objet n'est pas une (poly)ligne simple
elseif objectinfo(pl,OBJ_INFO_NPOLYGONS)>1 then
note la polyligne selectionnee a plusieurs segments. Veuillez
choisir une polyligne simple
elseif objectinfo(pl,OBJ_INFO_NPOLYGONS+ 1)long/2 then
d=long/2-dist
t=d/l
xc=x1 + t*(x2-x1)
yc=y1 + t*(y2-y1)
exit for
end if
dist=dist+((x2-x1)^2 + (y2-y1)^2)^(1/2)
x1=x2
y1=y2
next
Create Point Into Window frontwindow() ( xc,yc )
end if
end if

 

#3 Fri 06 December 2002 13:36

Jacques Paris
Invité

Re: Point sur milieu polyligne

Simplement pour signaler l’absence d’une ligne cruciale a placer avant
x1=objectnodex(...)
Long=objectlength(pl, m )
Pour revenir sur un aspect de la question, il se peut que ce point (xc,yc) ne soit pas exactement sur la ligne a cause de l’utilisation d’une grille de base des coordonnees dans MI qui n’est pas « continue » (2 milliards de positions pour couvrir les differences de « bounds »). Pour en etre sur, il faudrait inserer ce point comme un nœud dans la polyligne qui risque ainsi d’etre transformee

Jacques Paris

 

Pied de page des forums

Powered by FluxBB