#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