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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Sat 09 January 2010 18:17

feraudyh
Participant actif
Date d'inscription: 13 May 2009
Messages: 103

Imprécision de la fonction Perimeter

Je crée une région carrée de côté 3 mètres (ou c'est ce que je croyais)
La fonction MapBasic Perimeter me calcule son périmètre comme
12.009
C'est un peu grossier, non?
Bon je peux écrire ma propre routine, mais maintenant je perds  ma confiance en ObjectLen par exemple...

Au fait je commence par
set coordsys NonEarth Units "m" Bounds(0, 0)  (500,500)

Note ajouté plus tard:
En fait: ce sont les coordonnées des sommets de mes polygones d'entrée qui ont été modifiées par MapInfo.
Les coordonnées du rectangle avait été rentré avec des valeurs entieres, et pourtant...
(voir le message ci dessous)

Dernière modification par feraudyh (Sat 09 January 2010 20:32)

Hors ligne

 

#2 Sat 09 January 2010 19:29

feraudyh
Participant actif
Date d'inscription: 13 May 2009
Messages: 103

Re: Imprécision de la fonction Perimeter

Je viens d'afficher mes données. Curieusement les coordonnées des sommets de ma région sont légèrement décalés par rapport à ce que j'avais rentré.
Une affaire de système de coordonnées?
Voici le code pour les données en entrée

Code:

include "mapbasic.def"
declare sub main
declare sub addbuilding(ByVal pref as string, ByVal x1 as float, ByVal y1 as float,ByVal  xwidth as float,ByVal ydepth as float, ByVal zheight as float,ByVal utype as string)

sub main
set coordsys NonEarth Units "m" Bounds(0, 0)  (30, 30)
Create Table Building (parcel_ref char(40),areaperfloor float,height float, X_Center float,Y_Center float, type char(8), aux float)
Create Map for Building 
call addBuilding("A",1,6, 3, 3, 42, "prive")
call addBuilding("B",1,11, 3, 3,  36, "prive")
call addBuilding("C",16, 6, 4,3,  27,"public")
call addBuilding("D",20, 7, 10, 1, 30,"prive")

Commit table Building
end sub

'batiments rectangulaires
sub addBuilding(ByVal pref as string, ByVal x1 as float, ByVal y1 as float, ByVal  xwidth as float, ByVal ydepth as float, ByVal zheight as float,ByVal utype as string)
Dim  x2 as float, y2 as float, x3 as float, y3 as float, x4 as float, y4 as float
dim regionObj as Object
dim area_per_floor , center_x, center_y as float
x2 = x1+xWidth
x3=x2
y2=y1
y3= y1+ydepth
x4=x1
y4=y3
create Region into variable regionObj 1 4 (x1,y1)(x2,y2)(x3,y3)(x4,y4)
area_per_floor = Area( regionObj, "sq m" )
insert into Building  (Obj, parcel_ref,areaperfloor,height,X_Center,Y_Center, type, aux)  values (regionObj, pref, area_per_floor, zheight, CentroidX(regionObj), CentroidY(regionObj), utype,0)
end sub

Dernière modification par feraudyh (Sat 09 January 2010 21:14)

Hors ligne

 

#3 Mon 11 January 2010 16:13

Patrick PALMIER
Participant actif
Lieu: Lille
Date d'inscription: 18 Jan 2007
Messages: 97

Re: Imprécision de la fonction Perimeter

Bonjour,


le problème pourrait bien être un problème de système de coordonnées
Le code coordsys définit la projection de calcul de mapbasic (non Earth avec des bounds 0,30 0,30) OK
mais lorsque vous créez la table vous devez également indiquer la projection de la table

Essayer plutôt

Create Map for Building Coordsys NonEarth Units "m" Bounds(0, 0)  (30, 30)


Il faut repréciser le coordsys (non earth ....) pour forcer l projection de la table buildings dans votre système de projection, sinon il la crée dans la système par défaut, qui ne doit certainement pas être du non terrestre avec avec de tels paramètres d'étendue, d'où l'arrondi des coordonnées.

Dernière modification par Patrick PALMIER (Mon 11 January 2010 16:14)

Hors ligne

 

#4 Mon 11 January 2010 17:52

feraudyh
Participant actif
Date d'inscription: 13 May 2009
Messages: 103

Re: Imprécision de la fonction Perimeter

Merci beaucoup, comme je suis un débutant en SIG ces histoires de coordonées ne sont pas évidents!

Hors ligne

 

Pied de page des forums

Powered by FluxBB