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é ?

Annonce

GEODATA DAYS 2024

#1 Tue 24 July 2007 11:23

Pierre.J
Participant occasionnel
Lieu: Nantes - Paris
Date d'inscription: 1 Nov 2006
Messages: 37

[Mapbasic]Extraire les coordonnées amont aval d'un polyligne

Bonjour à tous,

J'aimerais remplir de maniere automatique quatre champs de ma BD mapinfo (Xamont Yamont Xaval Yaval).
La projection est en Lambert II. Mes objets sont des polylignes.
En fouillant un peu sur le forum j ai trouve qqs posts concernant la création d'un tel MBX. J ai bien compris la commande "ObjectNode" et "ObjectInfo" et j'arrive à la mettre en oeuvre par une requete SQL. Malheureusement les voix de la programmation me sont encore innaccessible et je n'arrive pas à me mettre en marche le bout de code que j'ai trouvé.
Est ce que l'un d entre vous connait l existence d un tel MBX et/ou pourrait m expliquer comment le créer?

Cordialement,

Pierre J

Hors ligne

 

#2 Wed 25 July 2007 15:43

Florent
Participant actif
Lieu: Nantes
Date d'inscription: 5 Sep 2005
Messages: 86
Site web

Re: [Mapbasic]Extraire les coordonnées amont aval d'un polyligne

Bonjour,

En fouillant dans mes archives voici une routine que j'avais développée.
A adapter à vos besoins

Code:

Do Case i_ObjectType
 
                        '=================================
                        'Objet de type ligne
                        Case OBJ_TYPE_LINE

                            s_ObjectType = "Ligne"
                            f_Angle = 0
                            s_Comment = ""
                            
                            f_NodeX = ObjectGeography(s_TabObjet, OBJ_GEO_LINEBEGX)
                            f_NodeY = ObjectGeography(s_TabObjet, OBJ_GEO_LINEBEGY)
                            Insert Into s_TempName Values (s_TabName, i_Row, s_ObjectType, 1, 1, f_NodeX, f_NodeY, f_Angle, s_Comment)

                            f_NodeX = ObjectGeography(s_TabObjet, OBJ_GEO_LINEENDX)
                            f_NodeY = ObjectGeography(s_TabObjet, OBJ_GEO_LINEENDY)
                            Insert Into s_TempName Values (s_TabName, i_Row, s_ObjectType, 1, 1, f_NodeX, f_NodeY, f_Angle, s_Comment)                        

                        '=================================
                        'Objet de type multiligne
                        Case OBJ_TYPE_PLINE

                            s_ObjectType = "Multiligne"
                            f_Angle = 0
                            s_Comment = ""

                            For i_ObjectRow = 1 to ObjectInfo(s_TabObjet, OBJ_INFO_NPOLYGONS) 
                                For i_NodeNum = 1 to ObjectInfo(s_TabObjet, OBJ_INFO_NPOLYGONS + i_ObjectRow)                                    
                                    f_NodeX = ObjectNodeX(s_TabObjet, i_ObjectRow, i_NodeNum)
                                    f_NodeY = ObjectNodeY(s_TabObjet, i_ObjectRow, i_NodeNum)                                    
                                    Insert Into s_TempName Values (s_TabName, i_Row, s_ObjectType, i_ObjectRow, i_NodeNum, f_NodeX, f_NodeY, f_Angle, s_Comment)
                                Next
                            Next

                        '=================================
                        'Objet de type polygone
                        Case OBJ_TYPE_REGION

                            s_ObjectType = "Polygone"
                            f_Angle = 0
                            s_Comment = ""

                            For i_ObjectRow = 1 to ObjectInfo(s_TabObjet, OBJ_INFO_NPOLYGONS)
                                For i_NodeNum = 1 to ObjectInfo(s_TabObjet, OBJ_INFO_NPOLYGONS + i_ObjectRow) - 1
                                    s_Comment = ""
                                    f_NodeX = ObjectNodeX(s_TabObjet, i_ObjectRow, i_NodeNum)
                                    f_NodeY = ObjectNodeY(s_TabObjet, i_ObjectRow, i_NodeNum)
                                    Insert Into s_TempName Values (s_TabName, i_Row, s_ObjectType, i_ObjectRow, i_NodeNum, f_NodeX, f_NodeY, f_Angle, s_Comment)
                                Next
                            Next
 
                        '=================================
                        'Objet de type rectangle
                        Case OBJ_TYPE_RECT

                            s_ObjectType = "Rectangle"
                            i_ObjectRow = 1
                            f_Angle = 0
                            s_Comment = ""

                            i_NodeNum = 1
                            f_NodeX = ObjectGeography(s_TabObjet, OBJ_GEO_MINX)    
                            f_NodeY = ObjectGeography(s_TabObjet, OBJ_GEO_MAXY)                                    
                            Insert Into s_TempName Values (s_TabName, i_Row, s_ObjectType, i_ObjectRow, i_NodeNum, f_NodeX, f_NodeY, f_Angle, s_Comment)
                            
                            i_NodeNum = 2
                            f_NodeX = ObjectGeography(s_TabObjet, OBJ_GEO_MAXX)    
                            f_NodeY = ObjectGeography(s_TabObjet, OBJ_GEO_MAXY)                                    
                            Insert Into s_TempName Values (s_TabName, i_Row, s_ObjectType, i_ObjectRow, i_NodeNum, f_NodeX, f_NodeY, f_Angle, s_Comment)

                            i_NodeNum = 3
                            f_NodeX = ObjectGeography(s_TabObjet, OBJ_GEO_MINX)    
                            f_NodeY = ObjectGeography(s_TabObjet, OBJ_GEO_MAXY)                                    
                            Insert Into s_TempName Values (s_TabName, i_Row, s_ObjectType, i_ObjectRow, i_NodeNum, f_NodeX, f_NodeY, f_Angle, s_Comment)

                            i_NodeNum = 4
                            f_NodeX = ObjectGeography(s_TabObjet, OBJ_GEO_MINX)    
                            f_NodeY = ObjectGeography(s_TabObjet, OBJ_GEO_MINY)                                    
                            Insert Into s_TempName Values (s_TabName, i_Row, s_ObjectType, i_ObjectRow, i_NodeNum, f_NodeX, f_NodeY, f_Angle, s_Comment)

                        '=================================
                        'Objet de type point
                        Case OBJ_TYPE_POINT

                            s_ObjectType = "Point"
                            i_ObjectRow = 1
                            i_NodeNum = 1
                            f_Angle = 0
                            s_Comment = ""

                            f_NodeX = ObjectGeography(s_TabObjet, OBJ_GEO_POINTX)
                            f_NodeY = ObjectGeography(s_TabObjet, OBJ_GEO_POINTY)

                             'Insert le résultat dans la table de sortie
                            Insert Into s_TempName Values (s_TabName, i_Row, s_ObjectType, 1, 1, f_NodeX, f_NodeY, f_Angle, s_Comment)

                        '===================
                        'Objet de type texte.
                        Case OBJ_TYPE_TEXT

                            s_ObjectType = "Texte"
                            i_ObjectRow = 1
                            i_NodeNum = 1        
                            f_Angle = ObjectGeography(s_TabObjet,OBJ_GEO_TEXTANGLE)
                            s_Comment = ""

                            f_NodeX = ObjectGeography(s_TabObjet, OBJ_GEO_TEXTLINEX)
                            f_NodeY = ObjectGeography(s_TabObjet, OBJ_GEO_TEXTLINEY)
                        
                            Insert Into s_TempName Values (s_TabName, i_Row, s_ObjectType, 1, 1, f_NodeX, f_NodeY, f_Angle, s_Comment)
 
                        '=========================
                        'Objet de type multipoints.
                        Case OBJ_TYPE_MPOINT    
                                
                            If ObjectInfo(s_TabObjet, OBJ_INFO_NONEMPTY) then

                                s_ObjectType = "Multipoints"
                                i_ObjectRow = 1
                                f_Angle = 0
                                s_Comment = ""

                                For i_NodeNum = 1 to ObjectInfo(s_TabObjet, OBJ_INFO_NPNTS)                                            
                                    f_NodeX = ObjectNodeX(s_TabObjet, i_ObjectRow, i_NodeNum)
                                    f_NodeY = ObjectNodeY(s_TabObjet, i_ObjectRow, i_NodeNum)                                        
                                    Insert Into s_TempName Values (s_TabName, i_Row, s_ObjectType, i_ObjectRow, i_NodeNum, f_NodeX, f_NodeY, f_Angle, s_Comment)
                                Next

                            End if                                                    
                                 
                        '===================
                        'Autres type d'objet.
                        Case Else
                            s_ObjectType = ""
                            i_ObjectRow = 0
                            i_NodeNum = 0
                            f_NodeX = 0
                            f_NodeY = 0
                            f_Angle = 0

                            Do case i_ObjectType

                                Case OBJ_TYPE_ROUNDRECT    
                                    s_ObjectType = "Rectangle arrondi"

                                Case OBJ_TYPE_FRAME    
                                    s_ObjectType = "Cadre"

                                Case OBJ_TYPE_ELLIPSE    
                                    s_ObjectType = "Ellipse"

                                Case OBJ_TYPE_ARC
                                    s_ObjectType = "Arc"

                                Case OBJ_TYPE_COLLECTION
                                    s_ObjectType = "Collection d'objets"

                                Case Else
                                    s_ObjectType = i_ObjectType

                            End Case

                            s_Comment = "Non pris en charge"
                            Insert Into s_TempName Values (s_TabName, i_Row, s_ObjectType, i_ObjectRow, i_NodeNum, f_NodeX, f_NodeY, f_Angle, s_Comment)    

                    End case

Bonne continuation


Florent

Hors ligne

 

#3 Wed 25 July 2007 15:54

Florent
Participant actif
Lieu: Nantes
Date d'inscription: 5 Sep 2005
Messages: 86
Site web

Re: [Mapbasic]Extraire les coordonnées amont aval d'un polyligne

Suite au message précédent.

En pièce jointe, la version compilée opérationnelle et les sources.

Le code est placé sous licence GPL.
Aucune garantie d'aucune sorte sur ce module.

A utiliser comme bon vous semble.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Florent

Hors ligne

 

#4 Thu 26 July 2007 09:01

Pierre.J
Participant occasionnel
Lieu: Nantes - Paris
Date d'inscription: 1 Nov 2006
Messages: 37

Re: [Mapbasic]Extraire les coordonnées amont aval d'un polyligne

Merci beaucoup!
Voila qui devrait me faciliter la tâche.

Hors ligne

 

Pied de page des forums

Powered by FluxBB