Solved

How to separate large data into small tiles with Cesium 3D Tiles

  • 18 January 2018
  • 6 replies
  • 14 views

Hi,

I'm currently using FME 2017.1 Smallword Edition. My problem is that I'm trying to convert Collada data to Cesium 3D-tiles and I don't know how to specify the coordinates to separate the large input data into small tiles.

The image is how I want to tile my dataset.

Here's the Collada data.http://bit.ly/2DhOxID

Is there any solution?

How to create 3D-Tile data in popular way?

If anyone knows the answer, please let me know.

Thank you very much

PA

icon

Best answer by takashi 18 January 2018, 06:50

View original

6 replies

Userlevel 2
Badge +17

Hi @anhphanuet, I looked at the COLLADA dataset. It contains a single aggregate geometry which consists of multiple surface (Mesh) geometries, each of which seems to represent a building.

Summary: Decompose the input aggregate into individual surfaces (buildings); Create four tile areas covering all the buildings; Filter the buildings by the tile areas, then group the buildings with ID of the tiles.

However, most transformers for spatial filtering only support vector geometries, will reject 3D models including surface. A workaround I can think of is: once save the surface geometry as an attribute (GeometryExtractor), transform it to a representative point (CenterPointReplacer), perform filtering the points by the tile areas (Clipper, SpatialFilter, or PoinaOnAreaOverlayer), then restore the surface geometry from the attribute (GeometryReplacer).

See also this workflow example. In this example, you can group the buildings by "_row" and "_column" of the tiles.

Hi @anhphanuet, I looked at the COLLADA dataset. It contains a single aggregate geometry which consists of multiple surface (Mesh) geometries, each of which seems to represent a building.

Summary: Decompose the input aggregate into individual surfaces (buildings); Create four tile areas covering all the buildings; Filter the buildings by the tile areas, then group the buildings with ID of the tiles.

However, most transformers for spatial filtering only support vector geometries, will reject 3D models including surface. A workaround I can think of is: once save the surface geometry as an attribute (GeometryExtractor), transform it to a representative point (CenterPointReplacer), perform filtering the points by the tile areas (Clipper, SpatialFilter, or PoinaOnAreaOverlayer), then restore the surface geometry from the attribute (GeometryReplacer).

See also this workflow example. In this example, you can group the buildings by "_row" and "_column" of the tiles.

Thanks, @takashi, I tried the above workspace but my computer is unable to finish the translation because of the memory exceeding problem. I guess creating 3D-Tiles data from one large dataset is not a popular way. Do you have any suggestion?

 

Thank you very much,

 

PA.

 

 

Hi @anhphanuet, I looked at the COLLADA dataset. It contains a single aggregate geometry which consists of multiple surface (Mesh) geometries, each of which seems to represent a building.

Summary: Decompose the input aggregate into individual surfaces (buildings); Create four tile areas covering all the buildings; Filter the buildings by the tile areas, then group the buildings with ID of the tiles.

However, most transformers for spatial filtering only support vector geometries, will reject 3D models including surface. A workaround I can think of is: once save the surface geometry as an attribute (GeometryExtractor), transform it to a representative point (CenterPointReplacer), perform filtering the points by the tile areas (Clipper, SpatialFilter, or PoinaOnAreaOverlayer), then restore the surface geometry from the attribute (GeometryReplacer).

See also this workflow example. In this example, you can group the buildings by "_row" and "_column" of the tiles.

Hi @takashi,

 

 

I tried to use shapefile as the input and I changed the workspace a little bit (as the image below).

 

Now the problem is the ClipperTransfromer doesn't work with the Clipper and Clippee parameters.

 

 

Is there any solution for this situation?

 

Thank you,

 

PA

 

 

 

 

I attach the workspace and shapefile.fme-workspace.zip
Userlevel 2
Badge +17
Hi @takashi,

 

 

I tried to use shapefile as the input and I changed the workspace a little bit (as the image below).

 

Now the problem is the ClipperTransfromer doesn't work with the Clipper and Clippee parameters.

 

 

Is there any solution for this situation?

 

Thank you,

 

PA

 

 

 

 

I attach the workspace and shapefile.fme-workspace.zip
You should not set '_row' and '_column' to the Group By parameter in the Clipper. Those attributes will be merged to the clipped Inside features after clipping, and then you can group them for each area using the attributes.

 

 

Badge +11
You should not set '_row' and '_column' to the Group By parameter in the Clipper. Those attributes will be merged to the clipped Inside features after clipping, and then you can group them for each area using the attributes.

 

 

@takashi, but with such a partition, the tile will not contain individual identities (in one b3dm the whole tile will be highlighted and not separate objects, and when setting the number of objects in the writer, the cesium will not be able to create the same squares of tiles) If you can tell how to fix this situation I will be very grateful.

Userlevel 1
Badge +11

@takashi, but with such a partition, the tile will not contain individual identities (in one b3dm the whole tile will be highlighted and not separate objects, and when setting the number of objects in the writer, the cesium will not be able to create the same squares of tiles) If you can tell how to fix this situation I will be very grateful.

Hi @muzhnasto,

I'd encourage you to post a new question and link back to this one for reference for better visibility. At a glance this Q&A thread appears to be solved so it's easy to miss your new comment by accident. Thanks!

Reply