buildingSMART / IFC4.x-IF

IFC4.x Implementers Forum
30 stars 34 forks source link

Georeferencing via IfcSite and IfcProjectedCRS (IFC 4.3) #159

Open matgitbac opened 3 months ago

matgitbac commented 3 months ago

Hi Problem In relation to my recent post in the General usability issues of docs #371 forum, I would like to understand how to properly georeference multiple small, distant (>5km distances, same Projected CRS) sites in one project. I do not use IfcMapConversion, because a single set of transformation parameters would not be accurate enough for the large area.

Solution(s) My present approach is that I define multiple sites and each site is defined by local placement (IFCAXIS2PLACEMENT3D, IFCCARTESIANPOINT and IFCDIRECTION). In IfcCartesianPoint the coordinates are defined in the Gauß Krüger coordinate system and rotational angle to true north is defined in IfcDirection. This way, the local 3D model coordinates need to be defined only once and can be reused in the sites.

However, as IfcProjectedCRS links only with IfcMapconversion, does it still make sense to include these to indicate that the site offsets are Gauß Krüger coordinates?

Is this the correct approach for georeferencing multiple distant sites in one project or is there a better “best practice” approach? If there is a different approach to commonly apply, please provide some concrete examples with real data. Thank you!

Cheers Matthias

Require schema changes?

Require documentation changes?

Rule required

michelangelo-acca commented 3 months ago

It would be nice if you can share the IFC model to have a look. AFAIK the IFC Tunnel Project was addressing such issues more specifically, but I may be wrong here. Pinging @SergejMuhic.

matgitbac commented 3 months ago

Hi, thanks for the response. I pasted the IFC4.3 example below.

cheers Matthias

ISO-10303-21;
HEADER;
FILE_DESCRIPTION (('ViewDefinition of a railway'), '2;1');
FILE_NAME ('7_RailSignalschild', '2024-06-29T19:55:58', ('Company'), ('Company','UUID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX','LOD: 108'), 'Processor version 0.0.0.8', 'IfcApi', 'Company');
FILE_SCHEMA (('IFC4X3_ADD2'));
ENDSEC;
DATA;
#1=IFCGEOMETRICREPRESENTATIONCONTEXT('mainGeometricRepresentationContext_ident','model',3,1.E-05,#2,$);
#2=IFCAXIS2PLACEMENT3D(#3,$,#4);
#3=IFCCARTESIANPOINT((0.,0.,0.));
#4=IFCDIRECTION((0.,0.));
#5=IFCPROJECTEDCRS('EPSG:31256','Austria Gauss-Kruger East False Northing -5000 False Easting 750','EPSG:31256 Greenwich',$,'Gauss-Krueger','M34',$);
#6=IFCMAPCONVERSION(#1,#5,12835.1387,344033.811,0.,0.00074421594019598,-0.999999723071279,1.);
#7=IFCOWNERHISTORY(#10,#11,.READWRITE.,.ADDED.,1719690960,#10,#11,1719690958);
#8=IFCPERSON($,'Name','Name',$,$,$,(#13),(#12));
#9=IFCORGANIZATION($,'Company',$,(#13),(#12));
#10=IFCPERSONANDORGANIZATION(#8,#9,(#13));
#11=IFCAPPLICATION(#9,'0.0.0.8','Soft','Soft');
#12=IFCPOSTALADDRESS(.OFFICE.,'The postal address of Company','Address',$,'Address','Address','Address','Address','Address');
#13=IFCACTORROLE(.ARCHITECT.,'Developer','Developer');
#14=IFCPROJECT('7464ce09-6966-4510-9374-1211b892c801',#7,'name','desc',$,'long_name','phase',(#1),#186);
#115=IFCLOCALPLACEMENT($,#116);
#116=IFCAXIS2PLACEMENT3D(#117,$,#118);
#117=IFCCARTESIANPOINT((500.,500.,500.));
#118=IFCDIRECTION((0.,1.,2.));
#119=IFCSIGNALTYPE('328248ed-6d45-4299-bbeb-cc69842316b8',#7,'signal type','Defines the the type of a signal',$,$,$,$,'signal',.VISUAL.);
#120=IFCSIGNAL('5850c4ee-618f-4114-876d-a61734152392',#7,'1','2','signal',#115,#121,'signal',$);
#121=IFCPRODUCTDEFINITIONSHAPE('name','desc',(#122));
#122=IFCSHAPEREPRESENTATION(#123,'1','2',(#124));
#123=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('signal_geo_sc_ident','model',*,*,*,*,#1,0.,.USERDEFINED.,'UserDefinedTargetView');
#124=IFCFACETEDBREP(#125);
#125=IFCCLOSEDSHELL((#126,#133,#140,#147,#154,#161));
#126=IFCFACE((#127));
#127=IFCFACEOUTERBOUND(#128,.T.);
#128=IFCPOLYLOOP((#129,#130,#131,#132));
#129=IFCCARTESIANPOINT((0.,0.,0.));
#130=IFCCARTESIANPOINT((100.,0.,0.));
#131=IFCCARTESIANPOINT((100.,0.,200.));
#132=IFCCARTESIANPOINT((0.,0.,200.));
#133=IFCFACE((#134));
#134=IFCFACEOUTERBOUND(#135,.T.);
#135=IFCPOLYLOOP((#136,#137,#138,#139));
#136=IFCCARTESIANPOINT((100.,0.,200.));
#137=IFCCARTESIANPOINT((100.,0.,0.));
#138=IFCCARTESIANPOINT((100.,100.,0.));
#139=IFCCARTESIANPOINT((100.,100.,200.));
#140=IFCFACE((#141));
#141=IFCFACEOUTERBOUND(#142,.T.);
#142=IFCPOLYLOOP((#143,#144,#145,#146));
#143=IFCCARTESIANPOINT((100.,100.,200.));
#144=IFCCARTESIANPOINT((100.,100.,0.));
#145=IFCCARTESIANPOINT((0.,100.,0.));
#146=IFCCARTESIANPOINT((0.,100.,200.));
#147=IFCFACE((#148));
#148=IFCFACEOUTERBOUND(#149,.T.);
#149=IFCPOLYLOOP((#150,#151,#152,#153));
#150=IFCCARTESIANPOINT((0.,100.,200.));
#151=IFCCARTESIANPOINT((0.,100.,0.));
#152=IFCCARTESIANPOINT((0.,0.,0.));
#153=IFCCARTESIANPOINT((0.,0.,200.));
#154=IFCFACE((#155));
#155=IFCFACEOUTERBOUND(#156,.T.);
#156=IFCPOLYLOOP((#157,#158,#159,#160));
#157=IFCCARTESIANPOINT((0.,0.,0.));
#158=IFCCARTESIANPOINT((0.,100.,0.));
#159=IFCCARTESIANPOINT((100.,100.,0.));
#160=IFCCARTESIANPOINT((100.,0.,0.));
#161=IFCFACE((#162));
#162=IFCFACEOUTERBOUND(#163,.T.);
#163=IFCPOLYLOOP((#164,#165,#166,#167));
#164=IFCCARTESIANPOINT((100.,0.,200.));
#165=IFCCARTESIANPOINT((100.,100.,200.));
#166=IFCCARTESIANPOINT((0.,100.,200.));
#167=IFCCARTESIANPOINT((0.,0.,200.));
#168=IFCRELDEFINESBYTYPE('c8654e72-ea79-4d0e-95d7-d87e2cc1d2db',#7,'signaltype link','links the ifcsignaltype to the ifcsignal',(#120),#119);
#169=IFCRELDEFINESBYPROPERTIES('d30d4b99-ffba-4114-b3a5-b9f47830903a',#7,$,$,(#120),#21);
#170=IFCRELDEFINESBYPROPERTIES('623a1dbb-830c-47ea-a971-06866d33fd62',#7,$,$,(#120),#24);
#171=IFCRELDEFINESBYPROPERTIES('c420366f-6940-45a2-ab25-fedf4a042857',#7,$,$,(#120),#28);
#172=IFCRELDEFINESBYPROPERTIES('0c141bac-8549-4b2c-b6c2-39478efd3058',#7,$,$,(#120),#31);
#173=IFCRELDEFINESBYPROPERTIES('b3c5788b-5157-4701-b44c-b7793d91122a',#7,$,$,(#120),#34);
#174=IFCRELDEFINESBYPROPERTIES('a7ec3e8a-d790-43c3-94aa-319c583adc40',#7,$,$,(#120),#41);
#175=IFCRELDEFINESBYPROPERTIES('183284ac-033f-40e7-9f79-088a4effb6d3',#7,$,$,(#120),#43);
#176=IFCRELDEFINESBYPROPERTIES('4604482a-28e8-4276-bbec-5764987fe555',#7,$,$,(#120),#48);
#177=IFCRELDEFINESBYPROPERTIES('f31128d5-f0d6-4ad9-b73a-1bc814bd309c',#7,$,$,(#120),#70);
#178=IFCRELDEFINESBYPROPERTIES('f7e336b8-e90c-4066-b484-e9b0562e9b32',#7,$,$,(#120),#79);
#179=IFCRELDEFINESBYPROPERTIES('1498800a-0f63-494b-9a5c-ea80af6c6688',#7,$,$,(#120),#101);
#180=IFCRELDEFINESBYPROPERTIES('e9a378be-2bc6-4d46-a50c-c33a75e64555',#7,$,$,(#120),#105);
#181=IFCRELDEFINESBYPROPERTIES('561b8035-1d91-4199-851a-fc7219458089',#7,$,$,(#120),#109);
#182=IFCRELDEFINESBYPROPERTIES('dc865253-5ef1-4aae-bcce-ec10324a0717',#7,$,$,(#120),#111);
#183=IFCRELDEFINESBYPROPERTIES('0e10e67a-948c-4ce6-b317-e3b466439283',#7,$,$,(#120),#113);
#184=IFCRELCONTAINEDINSPATIALSTRUCTURE('4713dec1-2d8a-4d5a-ac09-1944eaf62b01',#7,$,$,(#120),#114);
#185=IFCRELAGGREGATES('a34dfff6-998a-485a-a6d6-9d98ca5d5c4c',#7,$,$,#14,(#114));
#186=IFCUNITASSIGNMENT((#40,#47,#53,#58,#66));

#187=IFCSITE('1b87bf55-be31-4a7f-8f15-842619fe2333',#7,'RailSignalschildSite2','The site2','Railway',#115,$,'Site 2',.ELEMENT.,(0),(0),0.,$,#12);
#188=IFCRELCONTAINEDINSPATIALSTRUCTURE('4713dec1-2d8a-4d5a-ac09-1944eaf62ccc',#7,$,$,(#189),#187);
#189=IFCSIGNAL('5850c4ee-618f-4114-876d-a61734152aaa',#7,'1','2','3',#190,#121,'signal2',$);
#190=IFCLOCALPLACEMENT($,#191);
#191=IFCAXIS2PLACEMENT3D(#192,$,#193);
#192=IFCCARTESIANPOINT((800.,800.,500.));
#193=IFCDIRECTION((0.,1.,2.));

ENDSEC;
END-ISO-10303-21;
michelangelo-acca commented 3 months ago

test_geo

At first look, your model gets localized near Vienna, but it contains some errors (invalid guids, non normalized directions, etc.).

Also, there is only 1 site in the model, and not multiple ones!

SergejMuhic commented 3 months ago

Hello, there are two operations for maps available:

We have dealt with this problem in Tunnel, yes. We have prepared two (even three to be precise) concept templates for usages in the IFC spec. These draft templates provide the idea: IfcRigidOperation on maps IfcRigidOperation on IfcGeographicCRS And the template from IFC4 where the receiving software has to deal with converting coordinates with IfcMapConversion

matgitbac commented 2 months ago

Hi thanks @michelangelo-acca this shows that the georeferencing should work. However when I'm trying the code I posted, my origin appears somewhere in croatia/bosnia. Which codelines did you "repair" to show the IFC in the geotwin map? The missing site was my mistake.

Below my new try. I tried to avoid the IfcMapConversion by directly placing the sites in GK coordinates. If there are errors in the code which cause wrong georeferencing or not proper construction of the models, please specify them as I'm new to this.

@SergejMuhic Thanks for your response. I have identified IfcRigidOperation as possible option (4.10.6 Project Global Positioning Mapped) . I'd try it next if this approach does not work out.

thanks cheers Matthias


ISO-10303-21;
HEADER;
FILE_DESCRIPTION (('ViewDefinition of a railway'), '2;1');
FILE_NAME ('0_Signalschild_single_ifc_0.1.2.0_Ifc4x3.ifc', '2024-07-08T15:57:36', ('Company'), ('Company','UUID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX','LOD: 100','CRS: 31256'), 'Processor version 0.0.1.2', 'IfcApi', 'Company');
FILE_SCHEMA (('IFC4X3_ADD2'));
ENDSEC;
DATA;
#1=IFCGEOMETRICREPRESENTATIONCONTEXT('mainGeometricRepresentationContext_ident','Model',3,1.E-05,#2,$);
#2=IFCAXIS2PLACEMENT3D(#3,$,#4);
#3=IFCCARTESIANPOINT((0.,0.,0.));
#4=IFCDIRECTION((0.,0.));
#5=IFCPROJECTEDCRS('EPSG:31256','Austria Gauss-Kruger East False Northing -5000 False Easting 750','EPSG:31256 Greenwich','None','Gauss-Krueger','M34',#6);
#6=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.);
#7=IFCMAPCONVERSION(#1,#5,0.,0.,0.,$,$,1.);
#8=IFCOWNERHISTORY(#11,#12,.READWRITE.,.ADDED.,1720454260,#11,#12,1720454256);
#9=IFCPERSON($,'name','name',$,$,$,(#14),(#13));
#10=IFCORGANIZATION($,'Organisation',$,(#14),(#13));
#11=IFCPERSONANDORGANIZATION(#9,#10,(#14));
#12=IFCAPPLICATION(#10,'0.0.1.2','sw','sw');
#13=IFCPOSTALADDRESS(.OFFICE.,'The postal address of Company','',$,'','','','','');
#14=IFCACTORROLE(.ARCHITECT.,'Developer','Developer');
#15=IFCPROJECT('2gYoICns98B8nxveHQeNdh',#8,'sw',$,$,'sw',$,(#1),#316);

#103=IFCPROPERTYSINGLEVALUE('RailwaySignalType','',IFCLABEL('Other'),$);
#104=IFCPROPERTYSINGLEVALUE('IsHighType','',IFCBOOLEAN(.T.),$);
#105=IFCPROPERTYSINGLEVALUE('SignalIndicatorType','',IFCLABEL('Other'),$);
#106=IFCPROPERTYSET('0aeX88zIH0wv4dm7zCp9Wg',#8,'Pset_RailwaySignalType',$,(#103,#104,#105));
#107=IFCPROPERTYSINGLEVALUE('SignalAspectSymbol','',IFCLABEL('UNSET'),$);
#108=IFCPROPERTYSINGLEVALUE('SignalAspectType','',IFCLABEL('3-display'),$);
#109=IFCPROPERTYSINGLEVALUE('SignLegend','',IFCLABEL(''),$);
#110=IFCPROPERTYSET('3O1HxLUFH2OOIf3YsaEf99',#8,'Pset_RailwaySignalAspect',$,(#107,#108,#109));
#111=IFCPROPERTYSINGLEVALUE('SignalFrameType','',IFCLABEL('Main Frame'),$);
#112=IFCPROPERTYSET('3JVQcazez2cwj4Q5Qo2_FS',#8,'Pset_SignalFrame',$,(#111));
#114=IFCPROPERTYSET('2LD8uTgdL8Ifa5lP5elrRf',#8,'Pset_ElectricalDeviceCommon',$,(#113));
#115=IFCSITE('1co7KCFBD3LuqYQfpIBNSH',#8,'Site0','The site for the element Signalschild','Model',#116,$,'Site0',.ELEMENT.,$,$,$,$,#13);
#116=IFCLOCALPLACEMENT($,#117);
#117=IFCAXIS2PLACEMENT3D(#118,$,$);
#118=IFCCARTESIANPOINT((11124.5638,343909.436,1000.));
#119=IFCSIGNALTYPE('0boTQjAbjBpP73A7KgzwL3',#8,'signal type','Defines the the type of a signal',$,$,$,$,'signal0',.VISUAL.);
#120=IFCSIGNAL('3BdlXdx_T1L8G145FHMWjw',#8,'Signal0','signal0','signal0',#121,#125,'signal0',$);
#121=IFCLOCALPLACEMENT(#116,#122);
#122=IFCAXIS2PLACEMENT3D(#123,#124,$);
#123=IFCCARTESIANPOINT((0.,0.,0.));
#124=IFCDIRECTION((0.5,0.5,0.5));
#125=IFCPRODUCTDEFINITIONSHAPE('name','desc',(#126));
#126=IFCSHAPEREPRESENTATION(#127,'ident','type',(#128));
#127=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('ident','Model',*,*,*,*,#1,1.,.USERDEFINED.,'UserDefinedTargetView');
#128=IFCFACETEDBREP(#129);
#129=IFCCLOSEDSHELL((#130,#137,#144,#151,#158,#165));
#130=IFCFACE(((#700),#131));

#700=IFCSTYLEDITEM($,(#701),$);
#701=IFCSURFACESTYLE($,.BOTH.,(#702));
#702=IFCSURFACESTYLERENDERING(#703,$,$,$,$,$,$,$,.MATT.);
#703=IFCCOLOURRGB($,0.6,0.7,0.8);

#131=IFCFACEOUTERBOUND(#132,.T.);
#132=IFCPOLYLOOP((#133,#134,#135,#136));
#133=IFCCARTESIANPOINT((0.,0.,0.));
#134=IFCCARTESIANPOINT((100.,0.,0.));
#135=IFCCARTESIANPOINT((100.,0.,200.));
#136=IFCCARTESIANPOINT((0.,0.,200.));
#137=IFCFACE((#138));
#138=IFCFACEOUTERBOUND(#139,.T.);
#139=IFCPOLYLOOP((#140,#141,#142,#143));
#140=IFCCARTESIANPOINT((100.,0.,200.));
#141=IFCCARTESIANPOINT((100.,0.,0.));
#142=IFCCARTESIANPOINT((100.,100.,0.));
#143=IFCCARTESIANPOINT((100.,100.,200.));
#144=IFCFACE((#145));
#145=IFCFACEOUTERBOUND(#146,.T.);
#146=IFCPOLYLOOP((#147,#148,#149,#150));
#147=IFCCARTESIANPOINT((100.,100.,200.));
#148=IFCCARTESIANPOINT((100.,100.,0.));
#149=IFCCARTESIANPOINT((0.,100.,0.));
#150=IFCCARTESIANPOINT((0.,100.,200.));
#151=IFCFACE((#152));
#152=IFCFACEOUTERBOUND(#153,.T.);
#153=IFCPOLYLOOP((#154,#155,#156,#157));
#154=IFCCARTESIANPOINT((0.,100.,200.));
#155=IFCCARTESIANPOINT((0.,100.,0.));
#156=IFCCARTESIANPOINT((0.,0.,0.));
#157=IFCCARTESIANPOINT((0.,0.,200.));
#158=IFCFACE((#159));
#159=IFCFACEOUTERBOUND(#160,.T.);
#160=IFCPOLYLOOP((#161,#162,#163,#164));
#161=IFCCARTESIANPOINT((0.,0.,0.));
#162=IFCCARTESIANPOINT((0.,100.,0.));
#163=IFCCARTESIANPOINT((100.,100.,0.));
#164=IFCCARTESIANPOINT((100.,0.,0.));
#165=IFCFACE((#166));
#166=IFCFACEOUTERBOUND(#167,.T.);
#167=IFCPOLYLOOP((#168,#169,#170,#171));
#168=IFCCARTESIANPOINT((100.,0.,200.));
#169=IFCCARTESIANPOINT((100.,100.,200.));
#170=IFCCARTESIANPOINT((0.,100.,200.));
#171=IFCCARTESIANPOINT((0.,0.,200.));
#172=IFCRELDEFINESBYTYPE('0UwMg7nkn5u9N7CjI07xw1',#8,'signaltype link','links the ifcsignaltype to the ifcsignal',(#120),#119);
#173=IFCRELDEFINESBYPROPERTIES('1F28jmvYT5o8uoEWoeCsR9',#8,$,$,(#120),#22);
#174=IFCRELDEFINESBYPROPERTIES('0iSykRTOn8oRGXHMerzcFi',#8,$,$,(#120),#25);
#175=IFCRELDEFINESBYPROPERTIES('1Pv7qBImr6fObOAjNVQGan',#8,$,$,(#120),#29);
#176=IFCRELDEFINESBYPROPERTIES('2TEGPzv358gAR3wtQ5l2z9',#8,$,$,(#120),#32);
#177=IFCRELDEFINESBYPROPERTIES('1K423Ae39ALAmazXlpAXl4',#8,$,$,(#120),#35);
#178=IFCRELDEFINESBYPROPERTIES('2gaRB1vsf9owsF7XHjDJZ4',#8,$,$,(#120),#42);
#179=IFCRELDEFINESBYPROPERTIES('2WBNagg9X5eP_On0S4eZl9',#8,$,$,(#120),#44);
#180=IFCRELDEFINESBYPROPERTIES('3lW_hDXwfDkP0XHMvd3_$a',#8,$,$,(#120),#49);
#181=IFCRELDEFINESBYPROPERTIES('1NtaBGMY55pew5g$Tla6H_',#8,$,$,(#120),#71);
#182=IFCRELDEFINESBYPROPERTIES('2$ECoCbG98OxmwxQWSiS0O',#8,$,$,(#120),#80);
#183=IFCRELDEFINESBYPROPERTIES('04k6kfvV18pOzg11XJs35u',#8,$,$,(#120),#102);
#184=IFCRELDEFINESBYPROPERTIES('0oXqOz8OHAThc3OwCQZRXB',#8,$,$,(#120),#106);
#185=IFCRELDEFINESBYPROPERTIES('224as3MjPBsRRzVBt4Xmhd',#8,$,$,(#120),#110);
#186=IFCRELDEFINESBYPROPERTIES('0NheKtGG151vwY4kVAgUKA',#8,$,$,(#120),#112);
#187=IFCRELDEFINESBYPROPERTIES('0oFCTFGKP8Ih9p_rBoXhnh',#8,$,$,(#120),#114);
#188=IFCRELCONTAINEDINSPATIALSTRUCTURE('2wb3w4O4b9VAGCz9FFVmiu',#8,$,$,(#120),#115);

#276=IFCPROPERTYSINGLEVALUE('RailwaySignalType','',IFCLABEL('Other'),$);
#277=IFCPROPERTYSINGLEVALUE('IsHighType','',IFCBOOLEAN(.T.),$);
#278=IFCPROPERTYSINGLEVALUE('SignalIndicatorType','',IFCLABEL('Other'),$);
#279=IFCPROPERTYSET('17n2Dsw2L8ARDxyTMksB6s',#8,'Pset_RailwaySignalType',$,(#276,#277,#278));
#280=IFCPROPERTYSINGLEVALUE('SignalAspectSymbol','',IFCLABEL('UNSET'),$);
#281=IFCPROPERTYSINGLEVALUE('SignalAspectType','',IFCLABEL('2-display'),$);
#282=IFCPROPERTYSINGLEVALUE('SignLegend','',IFCLABEL('2'),$);
#283=IFCPROPERTYSET('2cCFn9qNv139fc53lZv3SG',#8,'Pset_RailwaySignalAspect',$,(#280,#281,#282));
#284=IFCPROPERTYSINGLEVALUE('SignalFrameType','',IFCLABEL('Main Frame'),$);
#285=IFCPROPERTYSET('1xJto1dcH5Kvfo51sRQvrO',#8,'Pset_SignalFrame',$,(#284));

#288=IFCSITE('24agONSE5FIBZ6mK_N1n$0',#8,'Site1','The site for the element Signalschild','Model',#289,$,'Site1',.ELEMENT.,$,$,$,$,#13);
#289=IFCLOCALPLACEMENT($,#290);
#290=IFCAXIS2PLACEMENT3D(#291,$,$);
#291=IFCCARTESIANPOINT((12865.1387,344053.811,1000.));
#292=IFCSIGNALTYPE('15BhLfG0TB2xR6ncQ2Uq8A',#8,'signal type','Defines the the type of a signal',$,$,$,$,'signal1',.VISUAL.);
#293=IFCSIGNAL('3o44tfvM5FYAWbSEEZXOei',#8,'Signal1','signal1','signal1',#294,#125,'signal1',$);
#294=IFCLOCALPLACEMENT(#289,#295);
#295=IFCAXIS2PLACEMENT3D(#296,#297,$);
#296=IFCCARTESIANPOINT((0.,0.,0.));
#297=IFCDIRECTION((0.,0.,0.));
#298=IFCRELDEFINESBYTYPE('3ZQASsmlr93u0LJyItZGa1',#8,'signaltype link','links the ifcsignaltype to the ifcsignal',(#293),#292);
#299=IFCRELDEFINESBYPROPERTIES('3PLma3sNvBlRKt3QaoQ0MP',#8,$,$,(#293),#195);
#300=IFCRELDEFINESBYPROPERTIES('0A8Xk1V7rBx8wefQKqaM5o',#8,$,$,(#293),#198);
#301=IFCRELDEFINESBYPROPERTIES('0RLMeK7mr10QFxC2G8OAu0',#8,$,$,(#293),#202);
#302=IFCRELDEFINESBYPROPERTIES('0NJfpstB18HhDES18NyZ17',#8,$,$,(#293),#205);
#303=IFCRELDEFINESBYPROPERTIES('3IxTp6_8z2zA5DsMKbLSSd',#8,$,$,(#293),#208);
#304=IFCRELDEFINESBYPROPERTIES('1KWywuqqTC6vlcvdhmraQG',#8,$,$,(#293),#215);
#305=IFCRELDEFINESBYPROPERTIES('2nAK_2wMjA59KsQb3IRG4i',#8,$,$,(#293),#217);
#306=IFCRELDEFINESBYPROPERTIES('2$sU_je75D5RrkynrgU9aW',#8,$,$,(#293),#222);
#307=IFCRELDEFINESBYPROPERTIES('3Xww1OMCbDGhqTLQ76aP0n',#8,$,$,(#293),#244);
#308=IFCRELDEFINESBYPROPERTIES('1umDZ2Unr6IuYBBXsFr5DA',#8,$,$,(#293),#253);
#309=IFCRELDEFINESBYPROPERTIES('1d2RGN8wnEHgjUOcs37H8V',#8,$,$,(#293),#275);
#310=IFCRELDEFINESBYPROPERTIES('0aca9A$p1CLflzqyvD5bU7',#8,$,$,(#293),#279);
#311=IFCRELDEFINESBYPROPERTIES('1zves1rQb3FR23ponGS0x6',#8,$,$,(#293),#283);
#312=IFCRELDEFINESBYPROPERTIES('2ZJsJHBlDANh_KA4FUZOLR',#8,$,$,(#293),#285);
#313=IFCRELDEFINESBYPROPERTIES('2gQ8EGXeXD3v_uIonCXj24',#8,$,$,(#293),#287);
#314=IFCRELCONTAINEDINSPATIALSTRUCTURE('1PF6oRk$94yAzFBYscQTvI',#8,$,$,(#293),#288);
#315=IFCRELAGGREGATES('1VltZ4zyzBnf_QUP4l$_Lm',#8,$,$,#15,(#115,#288));
#316=IFCUNITASSIGNMENT((#6,#41,#48,#54,#59,#67,#214,#221,#227,#240));
ENDSEC;
END-ISO-10303-21;
michelangelo-acca commented 2 months ago

test_geo_2 test_geo_2_b

We still get the model near Vienna, we have double checked the EPSG and this seems correct...can you double check?

The first screen is for the first signal, the second one is for the position of the second signal.

The file is better but still contains errors (IfcDirections, non existing IfcProperties,...) you can use the bSI Validation Service to have it checked...

...in the meantime, let's wait for the experts of this topic if they have something to say!

matgitbac commented 2 months ago

Hi @michelangelo-acca, thanks again. I think I finally managed to operate the digital twin viewer correctly :) The results show now that the sites seem properly georefrenced in "BIM-Layer" but the structures are positioned in Rome. :)

Sites Structures

The question is: Why are the IfcSites properly georeferenced east of Vienna, but the IfcSignal relative displaced (0,0,0) to the site is in Rome?

`ISO-10303-21; HEADER; FILE_DESCRIPTION (('redacted'), '2;1'); FILE_NAME ('redacted', '2024-07-12T14:40:28', ('redacted'), ('redacted','',''), 'redacted', 'redacted', 'redacted'); FILE_SCHEMA (('IFC4X3_ADD2')); ENDSEC; DATA;

1=IFCOWNERHISTORY(#4,#5,.READWRITE.,.ADDED.,1720795228,#4,#5,1720795228);

2=IFCPERSON($,'redacted','',$,$,$,(#7),(#6));

3=IFCORGANIZATION($,'redacted',$,(#7),(#6));

4=IFCPERSONANDORGANIZATION(#2,#3,(#7));

5=IFCAPPLICATION(#3,'0.2.3.0','redacted','redacted');

6=IFCPOSTALADDRESS(.OFFICE.,'redacted','redacted','redacted',$,'redacted','redacted','redacted','redacted','redacted');

7=IFCACTORROLE(.ARCHITECT.,'Developer','Developer');

8=IFCPROJECT('1BaL05mqDDBx5uyVEPkV65',#1,'redacted',$,$,'redacted',$,$,#90);

9=IFCGEOMETRICREPRESENTATIONCONTEXT('mainGeometricRepresentationContext_ident','Model',3,0.,#10,$);

10=IFCAXIS2PLACEMENT3D(#11,$,$);

11=IFCCARTESIANPOINT((0.,0.,0.));

12=IFCPROJECTEDCRS('EPSG:31256','Gauss-Kruger East False Northing -5000 False Easting 750','EPSG:31256 Greenwich','None','Gauss-Krueger','M34',$);

13=IFCMAPCONVERSION(#9,#12,0.,0.,0.,$,$,1.);

14=IFCSITE('1GpU6BxyL2bQ3OWs45GFh2',#1,'Site0','redacted','Model',#15,$,'Site0',.ELEMENT.,$,$,$,$,#6);

15=IFCLOCALPLACEMENT($,#16);

16=IFCAXIS2PLACEMENT3D(#17,$,$);

17=IFCCARTESIANPOINT((11124.5638,343909.436,0.));

18=IFCSIGNALTYPE('2o5YGjj7P5u9TJAPZGOlJA',#1,'signal type','Defines the type of a signal',$,$,$,$,'signal',.VISUAL.);

19=IFCSIGNAL('33u6QapK1AkQMaiaR3k3He',#1,'signal','redacted','signal',#20,#23,'0 generated signal',$);

20=IFCLOCALPLACEMENT(#15,#21);

21=IFCAXIS2PLACEMENT3D(#22,$,$);

22=IFCCARTESIANPOINT((0.,0.,0.));

23=IFCPRODUCTDEFINITIONSHAPE('name','desc',(#24));

24=IFCSHAPEREPRESENTATION(#25,'ident','type',(#26));

25=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('ident','Model',,,,,#9,1.,.USERDEFINED.,'UserDefinedTargetView');

26=IFCFACETEDBREP(#27);

27=IFCCLOSEDSHELL((#28,#35,#42,#49,#56,#63));

28=IFCFACE((#29));

29=IFCFACEOUTERBOUND(#30,.T.);

30=IFCPOLYLOOP((#31,#32,#33,#34));

31=IFCCARTESIANPOINT((0.,0.,0.));

32=IFCCARTESIANPOINT((1000.,0.,0.));

33=IFCCARTESIANPOINT((1000.,0.,2000.));

34=IFCCARTESIANPOINT((0.,0.,2000.));

35=IFCFACE((#36));

36=IFCFACEOUTERBOUND(#37,.T.);

37=IFCPOLYLOOP((#38,#39,#40,#41));

38=IFCCARTESIANPOINT((1000.,0.,2000.));

39=IFCCARTESIANPOINT((1000.,0.,0.));

40=IFCCARTESIANPOINT((1000.,1000.,0.));

41=IFCCARTESIANPOINT((1000.,1000.,2000.));

42=IFCFACE((#43));

43=IFCFACEOUTERBOUND(#44,.T.);

44=IFCPOLYLOOP((#45,#46,#47,#48));

45=IFCCARTESIANPOINT((1000.,1000.,2000.));

46=IFCCARTESIANPOINT((1000.,1000.,0.));

47=IFCCARTESIANPOINT((0.,1000.,0.));

48=IFCCARTESIANPOINT((0.,1000.,2000.));

49=IFCFACE((#50));

50=IFCFACEOUTERBOUND(#51,.T.);

51=IFCPOLYLOOP((#52,#53,#54,#55));

52=IFCCARTESIANPOINT((0.,1000.,2000.));

53=IFCCARTESIANPOINT((0.,1000.,0.));

54=IFCCARTESIANPOINT((0.,0.,0.));

55=IFCCARTESIANPOINT((0.,0.,2000.));

56=IFCFACE((#57));

57=IFCFACEOUTERBOUND(#58,.T.);

58=IFCPOLYLOOP((#59,#60,#61,#62));

59=IFCCARTESIANPOINT((0.,0.,0.));

60=IFCCARTESIANPOINT((0.,1000.,0.));

61=IFCCARTESIANPOINT((1000.,1000.,0.));

62=IFCCARTESIANPOINT((1000.,0.,0.));

63=IFCFACE((#64));

64=IFCFACEOUTERBOUND(#65,.T.);

65=IFCPOLYLOOP((#66,#67,#68,#69));

66=IFCCARTESIANPOINT((1000.,0.,2000.));

67=IFCCARTESIANPOINT((1000.,1000.,2000.));

68=IFCCARTESIANPOINT((0.,1000.,2000.));

69=IFCCARTESIANPOINT((0.,0.,2000.));

70=IFCRELDEFINESBYTYPE('1lHgsvjGX4CwEiJwv1iWv6',#1,'signaltype link','links the ifcsignaltype to the ifcsignal',(#19),#18);

71=IFCRELCONTAINEDINSPATIALSTRUCTURE('1wIU018TfECRthfixMFxNo',#1,$,$,(#19),#14);

72=IFCSITE('1xEf6iBYX0GRxxv8wpzUl5',#1,'Site1','The site for the element Signalschild','Model',#73,$,'Site1',.ELEMENT.,$,$,$,$,#6);

73=IFCLOCALPLACEMENT($,#74);

74=IFCAXIS2PLACEMENT3D(#75,$,$);

75=IFCCARTESIANPOINT((12865.1387,344053.811,0.));

76=IFCSIGNALTYPE('0Oa4RL3zfBUeCqw1Yk_EGe',#1,'signal type','Defines the type of a signal',$,$,$,$,'signal',.VISUAL.);

77=IFCSIGNAL('3tXgHUSx14pAD11dhATTvA',#1,'signal','parsed from file \ifcapi\Dispatcher\inputData\1_empty_signalschild.xemf','signal',#78,#83,'1 generated signal',$);

78=IFCLOCALPLACEMENT(#73,#79);

79=IFCAXIS2PLACEMENT3D(#80,#81,#82);

80=IFCCARTESIANPOINT((0.,0.,0.));

81=IFCDIRECTION((0.,0.,1.));

82=IFCDIRECTION((1.,0.,0.));

83=IFCPRODUCTDEFINITIONSHAPE('name','desc',(#84));

84=IFCSHAPEREPRESENTATION(#85,'ident','type',(#26));

85=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('ident','Model',,,,,#9,1.,.USERDEFINED.,'UserDefinedTargetView');

86=IFCRELDEFINESBYTYPE('1cdxkMpfLDye6OW9a4ssuz',#1,'signaltype link','links the ifcsignaltype to the ifcsignal',(#77),#76);

87=IFCRELCONTAINEDINSPATIALSTRUCTURE('3oRrWBcXL3vxh4FATOxj$v',#1,$,$,(#77),#72);

88=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.);

89=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.);

90=IFCUNITASSIGNMENT((#88,#89));

91=IFCRELAGGREGATES('2nfvxNfH11gP0n7E4i5oQo',#1,$,$,#8,(#14,#72));

ENDSEC; END-ISO-10303-21; `

Thanks :)

evandroAlfieri commented 2 months ago

@matgitbac can you wrap your IFC snippet as code?

Like this

Otherwise the # points to all existing issue in this repository. Thanks

matgitbac commented 2 months ago

I wrapped it, but it messes up the layout.

evandroAlfieri commented 2 months ago

If you prefer, you can submit a pull request with your file (we have a Files folder). Then, just keep updating that file, or submit others. And then use the GitHub issue for discussion, just pointing at the file. This not only is the recommended workflow, but would also make the issue more readable for yourself and others. I can help if you need assistance

hadxp commented 2 months ago

nice on the eyes, wrapped version:

ISO-10303-21;
HEADER;
FILE_DESCRIPTION (('redacted'), '2;1');
FILE_NAME ('redacted', '2024-07-12T14:40:28', ('redacted'), ('redacted','',''), 'redacted', 'redacted', 'redacted');
FILE_SCHEMA (('IFC4X3_ADD2'));
ENDSEC;
DATA;
#1=IFCOWNERHISTORY(#4,#5,.READWRITE.,.ADDED.,1720795228,#4,#5,1720795228);
#2=IFCPERSON($,'redacted','',$,$,$,(#7),(#6));
#3=IFCORGANIZATION($,'redacted',$,(#7),(#6));
#4=IFCPERSONANDORGANIZATION(#2,#3,(#7));
#5=IFCAPPLICATION(#3,'0.2.3.0','redacted','redacted');
#6=IFCPOSTALADDRESS(.OFFICE.,'redacted','redacted','redacted',$,'redacted','redacted','redacted','redacted','redacted');
#7=IFCACTORROLE(.ARCHITECT.,'Developer','Developer');
#8=IFCPROJECT('1BaL05mqDDBx5uyVEPkV65',#1,'redacted',$,$,'redacted',$,$,#90);
#9=IFCGEOMETRICREPRESENTATIONCONTEXT('mainGeometricRepresentationContext_ident','Model',3,0.,#10,$);
#10=IFCAXIS2PLACEMENT3D(#11,$,$);
#11=IFCCARTESIANPOINT((0.,0.,0.));
#12=IFCPROJECTEDCRS('EPSG:31256','Gauss-Kruger East False Northing -5000 False Easting 750','EPSG:31256 Greenwich','None','Gauss-Krueger','M34',$);
#13=IFCMAPCONVERSION(#9,#12,0.,0.,0.,$,$,1.);
#14=IFCSITE('1GpU6BxyL2bQ3OWs45GFh2',#1,'Site0','redacted','Model',#15,$,'Site0',.ELEMENT.,$,$,$,$,#6);
#15=IFCLOCALPLACEMENT($,#16);
#16=IFCAXIS2PLACEMENT3D(#17,$,$);
#17=IFCCARTESIANPOINT((11124.5638,343909.436,0.));
#18=IFCSIGNALTYPE('2o5YGjj7P5u9TJAPZGOlJA',#1,'signal type','Defines the type of a signal',$,$,$,$,'signal',.VISUAL.);
#19=IFCSIGNAL('33u6QapK1AkQMaiaR3k3He',#1,'signal','redacted','signal',#20,#23,'0 generated signal',$);
#20=IFCLOCALPLACEMENT(#15,#21);
#21=IFCAXIS2PLACEMENT3D(#22,$,$);
#22=IFCCARTESIANPOINT((0.,0.,0.));
#23=IFCPRODUCTDEFINITIONSHAPE('name','desc',(#24));
#24=IFCSHAPEREPRESENTATION(#25,'ident','type',(#26));
#25=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('ident','Model',*,*,*,*,#9,1.,.USERDEFINED.,'UserDefinedTargetView');
#26=IFCFACETEDBREP(#27);
#27=IFCCLOSEDSHELL((#28,#35,#42,#49,#56,#63));
#28=IFCFACE((#29));
#29=IFCFACEOUTERBOUND(#30,.T.);
#30=IFCPOLYLOOP((#31,#32,#33,#34));
#31=IFCCARTESIANPOINT((0.,0.,0.));
#32=IFCCARTESIANPOINT((1000.,0.,0.));
#33=IFCCARTESIANPOINT((1000.,0.,2000.));
#34=IFCCARTESIANPOINT((0.,0.,2000.));
#35=IFCFACE((#36));
#36=IFCFACEOUTERBOUND(#37,.T.);
#37=IFCPOLYLOOP((#38,#39,#40,#41));
#38=IFCCARTESIANPOINT((1000.,0.,2000.));
#39=IFCCARTESIANPOINT((1000.,0.,0.));
#40=IFCCARTESIANPOINT((1000.,1000.,0.));
#41=IFCCARTESIANPOINT((1000.,1000.,2000.));
#42=IFCFACE((#43));
#43=IFCFACEOUTERBOUND(#44,.T.);
#44=IFCPOLYLOOP((#45,#46,#47,#48));
#45=IFCCARTESIANPOINT((1000.,1000.,2000.));
#46=IFCCARTESIANPOINT((1000.,1000.,0.));
#47=IFCCARTESIANPOINT((0.,1000.,0.));
#48=IFCCARTESIANPOINT((0.,1000.,2000.));
#49=IFCFACE((#50));
#50=IFCFACEOUTERBOUND(#51,.T.);
#51=IFCPOLYLOOP((#52,#53,#54,#55));
#52=IFCCARTESIANPOINT((0.,1000.,2000.));
#53=IFCCARTESIANPOINT((0.,1000.,0.));
#54=IFCCARTESIANPOINT((0.,0.,0.));
#55=IFCCARTESIANPOINT((0.,0.,2000.));
#56=IFCFACE((#57));
#57=IFCFACEOUTERBOUND(#58,.T.);
#58=IFCPOLYLOOP((#59,#60,#61,#62));
#59=IFCCARTESIANPOINT((0.,0.,0.));
#60=IFCCARTESIANPOINT((0.,1000.,0.));
#61=IFCCARTESIANPOINT((1000.,1000.,0.));
#62=IFCCARTESIANPOINT((1000.,0.,0.));
#63=IFCFACE((#64));
#64=IFCFACEOUTERBOUND(#65,.T.);
#65=IFCPOLYLOOP((#66,#67,#68,#69));
#66=IFCCARTESIANPOINT((1000.,0.,2000.));
#67=IFCCARTESIANPOINT((1000.,1000.,2000.));
#68=IFCCARTESIANPOINT((0.,1000.,2000.));
#69=IFCCARTESIANPOINT((0.,0.,2000.));
#70=IFCRELDEFINESBYTYPE('1lHgsvjGX4CwEiJwv1iWv6',#1,'signaltype link','links the ifcsignaltype to the ifcsignal',(#19),#18);
#71=IFCRELCONTAINEDINSPATIALSTRUCTURE('1wIU018TfECRthfixMFxNo',#1,$,$,(#19),#14);
#72=IFCSITE('1xEf6iBYX0GRxxv8wpzUl5',#1,'Site1','redacted','Model',#73,$,'Site1',.ELEMENT.,$,$,$,$,#6);
#73=IFCLOCALPLACEMENT($,#74);
#74=IFCAXIS2PLACEMENT3D(#75,$,$);
#75=IFCCARTESIANPOINT((12865.1387,344053.811,0.));
#76=IFCSIGNALTYPE('0Oa4RL3zfBUeCqw1Yk_EGe',#1,'signal type','Defines the type of a signal',$,$,$,$,'signal',.VISUAL.);
#77=IFCSIGNAL('3tXgHUSx14pAD11dhATTvA',#1,'signal','redacted','signal',#78,#83,'1 generated signal',$);
#78=IFCLOCALPLACEMENT(#73,#79);
#79=IFCAXIS2PLACEMENT3D(#80,#81,#82);
#80=IFCCARTESIANPOINT((0.,0.,0.));
#81=IFCDIRECTION((0.,0.,1.));
#82=IFCDIRECTION((1.,0.,0.));
#83=IFCPRODUCTDEFINITIONSHAPE('name','desc',(#84));
#84=IFCSHAPEREPRESENTATION(#85,'ident','type',(#26));
#85=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('ident','Model',*,*,*,*,#9,1.,.USERDEFINED.,'UserDefinedTargetView');
#86=IFCRELDEFINESBYTYPE('1cdxkMpfLDye6OW9a4ssuz',#1,'signaltype link','links the ifcsignaltype to the ifcsignal',(#77),#76);
#87=IFCRELCONTAINEDINSPATIALSTRUCTURE('3oRrWBcXL3vxh4FATOxj$v',#1,$,$,(#77),#72);
#88=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.);
#89=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.);
#90=IFCUNITASSIGNMENT((#88,#89));
#91=IFCRELAGGREGATES('2nfvxNfH11gP0n7E4i5oQo',#1,$,$,#8,(#14,#72));
ENDSEC;
END-ISO-10303-21;
michelangelo-acca commented 2 months ago

image

Can you check that in the top right area, this is the situation that you have on the Georeferencing Tab? It is the last one...if it is set to Manual, switch to Georeferenced and the Signals should appear near Vienna automatically!