Această pagină arată cel mai bine cu JavaScript activat

Printarea 3D a unei zone din Copernicus DEM

 ·  ☕ 3 minute de citit  ·  ✍️ Alexandru Munteanu

Am observat că modelele de elevație Copernicus DEM (Digital Elevation Model) pentru GLO-30 și GLO-90 sunt disponibile gratuit via opentopography.org. Asta m-a făcut curios sa văd cum ar arăta Timișoara (chiar daca, este intr-o zonă de câmpie). De asemenea, am vrut să văd daca e posibil să printez 3D modelul de elevație.

Timișoara
Copernicus DEM: Copernicus DEM la diferite rezoluții. Sursă: spacedata.copernicus.eu

Copernicus DEM nu este singurul produs pe site-ul opentopography.org pentru zona noastră de interes:

Timișoara
opentopography.org: Seturile de date disponibile pentru regiunea selectată.

Am ales să folosesc produsul GLO-30 DEM pentru rezoluția de 30 de metrii. Din păcate, nu am văzut modelul EEA la o rezoluție de 10 metrii disponibil. Fișierul exportat ocupă doar 1.8MB odată dezarhivat.

Timișoara
opentopography.org: Copernicus DEM al Timișoarei și împrejurimile acesteia.

Acesta este fișierul pe care îl avem, cum ne indică gdalinfo:

Driver: GTiff/GeoTIFF
Files: output_COP30.tif
       output_COP30.tif.aux.xml
Size is 834, 582
Coordinate System is:
GEOGCRS["WGS 84",
    ENSEMBLE["World Geodetic System 1984 ensemble",
        MEMBER["World Geodetic System 1984 (Transit)"],
        MEMBER["World Geodetic System 1984 (G730)"],
        MEMBER["World Geodetic System 1984 (G873)"],
        MEMBER["World Geodetic System 1984 (G1150)"],
        MEMBER["World Geodetic System 1984 (G1674)"],
        MEMBER["World Geodetic System 1984 (G1762)"],
        MEMBER["World Geodetic System 1984 (G2139)"],
        ELLIPSOID["WGS 84",6378137,298.257223563,
            LENGTHUNIT["metre",1]],
        ENSEMBLEACCURACY[2.0]],
    PRIMEM["Greenwich",0,
        ANGLEUNIT["degree",0.0174532925199433]],
    CS[ellipsoidal,2],
        AXIS["geodetic latitude (Lat)",north,
            ORDER[1],
            ANGLEUNIT["degree",0.0174532925199433]],
        AXIS["geodetic longitude (Lon)",east,
            ORDER[2],
            ANGLEUNIT["degree",0.0174532925199433]],
    USAGE[
        SCOPE["Horizontal component of 3D system."],
        AREA["World."],
        BBOX[-90,-180,90,180]],
    ID["EPSG",4326]]
Data axis to CRS axis mapping: 2,1
Origin = (21.127222222222201,45.830138888888882)
Pixel Size = (0.000277777777778,-0.000277777777778)
Metadata:
  AREA_OR_POINT=Area
Image Structure Metadata:
  COMPRESSION=LZW
  INTERLEAVE=BAND
  LAYOUT=COG
Corner Coordinates:
Upper Left  (  21.1272222,  45.8301389) ( 21d 7'38.00"E, 45d49'48.50"N)
Lower Left  (  21.1272222,  45.6684722) ( 21d 7'38.00"E, 45d40' 6.50"N)
Upper Right (  21.3588889,  45.8301389) ( 21d21'32.00"E, 45d49'48.50"N)
Lower Right (  21.3588889,  45.6684722) ( 21d21'32.00"E, 45d40' 6.50"N)
Center      (  21.2430556,  45.7493056) ( 21d14'35.00"E, 45d44'57.50"N)
Band 1 Block=256x256 Type=Float32, ColorInterp=Gray
  Min=78.133 Max=124.985
  Minimum=78.133, Maximum=124.985, Mean=91.673, StdDev=5.887
  Metadata:
    STATISTICS_MAXIMUM=124.98538970947
    STATISTICS_MEAN=91.672999431603
    STATISTICS_MINIMUM=78.132995605469
    STATISTICS_STDDEV=5.8870346058939
    STATISTICS_VALID_PERCENT=100
Timișoara
QGIS: Copernicus DEM exportat din OpenTopography.org.

Importăm rasterul in QGIS, și schimbăm tipul de randare in hillshade:

Timișoara
QGIS: Copernicus DEM exportat din OpenTopography.org cu hillshade.
Timișoara
GRASS GIS: Heatmap al DEM-ului în GRASS.

Folosind modulul r.report din GRASS pentru a interoga rasterul:

r.report map=output_COP30 units=k

Acesta ne indică faptul că rasterul nostru acoperă o arie de $510km^2$

+-----------------------------------------------------------------------------+
|                         RASTER MAP CATEGORY REPORT                          |
|LOCATION: world_latlong_wgs84                        Thu Sep 29 18:41:59 2022|
|-----------------------------------------------------------------------------|
|          north: 90N    east: 180E                                           |
|REGION    south: 90S    west: 180W                                           |
|          res:     1    res:     1                                           |
|-----------------------------------------------------------------------------|
|MASK: none                                                                   |
|-----------------------------------------------------------------------------|
|MAP: (untitled) (output_COP30 in timisoaradem)                               |
|-----------------------------------------------------------------------------|
|                      Category Information                       |   square  |
|#|description                                                    | kilometers|
|-----------------------------------------------------------------------------|
|*|no data. . . . . . . . . . . . . . . . . . . . . . . . . . . . |510,065,622|
|-----------------------------------------------------------------------------|
|TOTAL                                                            |510,065,622|
+-----------------------------------------------------------------------------+

Pentru a produce un fișier STL, am folosit un plugin pentru QGIS numit DEMto3D.

Timișoara
PrusaSlicer: Feliile ce rezultă din procesul de slicing.
Timișoara
PrusaSlicer: Feliile ce rezultă din procesul de slicing.

După folosirea unei imprimante Prusa i3 MK3 și vreo 10 ore de răbdare, rezultatul arată cam așa:

Timișoara
Result: 3D Print al GLO-30 DEM pentru Timișoara.
Timișoara
Result: 3D Print of GLO-30 DEM pentru Timișoara și imprejurimi.

E ceva ce aș considera un eșec. Chiar și cu setari cum ar fi de 5 ori exagerare verticală, și opțiuni de printare detaliată cu PrusaSlicer, detaliile din print nu se pot distinge. O abordare mai bună ar fi, probabil extinderea printului pe în mai multe celule fizice astfel încât detaliile să devină mai pronunțate. O altă chestie interesantă pe viitor, ar fi să vedem dacă putem să printăm trăsături din 3D OpenStreetMap.


Alexandru Munteanu
Scris de
Alexandru Munteanu
Research Assistant, PhD Student