You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<p>Most GIS file formats do <strong>not</strong> preserve topological information. This means that neighborhood information is lost as soon as geometries are saved to disk. To illustrate this issue, we consider a geotable over a <code>CartesianGrid</code>:</p>
@@ -399,53 +399,53 @@ <h2 data-number="3.2" class="anchored" data-anchor-id="file-formats"><span class
399
399
</thead>
400
400
<tbody>
401
401
<trclass="odd">
402
-
<tdstyle="text-align: center;">0.0382305</td>
403
-
<tdstyle="text-align: center;">0.60292</td>
402
+
<tdstyle="text-align: center;">0.979718</td>
403
+
<tdstyle="text-align: center;">0.383864</td>
404
404
<tdstyle="text-align: center;">Quadrangle((x: 0.0 m, y: 0.0 m), ..., (x: 0.0 m, y: 1.0 m))</td>
405
405
</tr>
406
406
<trclass="even">
407
-
<tdstyle="text-align: center;">0.106163</td>
408
-
<tdstyle="text-align: center;">0.989514</td>
407
+
<tdstyle="text-align: center;">0.892466</td>
408
+
<tdstyle="text-align: center;">0.488793</td>
409
409
<tdstyle="text-align: center;">Quadrangle((x: 1.0 m, y: 0.0 m), ..., (x: 1.0 m, y: 1.0 m))</td>
410
410
</tr>
411
411
<trclass="odd">
412
-
<tdstyle="text-align: center;">0.18793</td>
413
-
<tdstyle="text-align: center;">0.547123</td>
412
+
<tdstyle="text-align: center;">0.794076</td>
413
+
<tdstyle="text-align: center;">0.788655</td>
414
414
<tdstyle="text-align: center;">Quadrangle((x: 2.0 m, y: 0.0 m), ..., (x: 2.0 m, y: 1.0 m))</td>
415
415
</tr>
416
416
<trclass="even">
417
-
<tdstyle="text-align: center;">0.0315388</td>
418
-
<tdstyle="text-align: center;">0.272782</td>
417
+
<tdstyle="text-align: center;">0.674345</td>
418
+
<tdstyle="text-align: center;">0.443076</td>
419
419
<tdstyle="text-align: center;">Quadrangle((x: 3.0 m, y: 0.0 m), ..., (x: 3.0 m, y: 1.0 m))</td>
420
420
</tr>
421
421
<trclass="odd">
422
-
<tdstyle="text-align: center;">0.663114</td>
423
-
<tdstyle="text-align: center;">0.942687</td>
422
+
<tdstyle="text-align: center;">0.702333</td>
423
+
<tdstyle="text-align: center;">0.620565</td>
424
424
<tdstyle="text-align: center;">Quadrangle((x: 4.0 m, y: 0.0 m), ..., (x: 4.0 m, y: 1.0 m))</td>
425
425
</tr>
426
426
<trclass="even">
427
-
<tdstyle="text-align: center;">0.794098</td>
428
-
<tdstyle="text-align: center;">0.517486</td>
427
+
<tdstyle="text-align: center;">0.13348</td>
428
+
<tdstyle="text-align: center;">0.640933</td>
429
429
<tdstyle="text-align: center;">Quadrangle((x: 5.0 m, y: 0.0 m), ..., (x: 5.0 m, y: 1.0 m))</td>
430
430
</tr>
431
431
<trclass="odd">
432
-
<tdstyle="text-align: center;">0.472546</td>
433
-
<tdstyle="text-align: center;">0.999054</td>
432
+
<tdstyle="text-align: center;">0.0464712</td>
433
+
<tdstyle="text-align: center;">0.523528</td>
434
434
<tdstyle="text-align: center;">Quadrangle((x: 6.0 m, y: 0.0 m), ..., (x: 6.0 m, y: 1.0 m))</td>
435
435
</tr>
436
436
<trclass="even">
437
-
<tdstyle="text-align: center;">0.834748</td>
438
-
<tdstyle="text-align: center;">0.303973</td>
437
+
<tdstyle="text-align: center;">0.128001</td>
438
+
<tdstyle="text-align: center;">0.950535</td>
439
439
<tdstyle="text-align: center;">Quadrangle((x: 7.0 m, y: 0.0 m), ..., (x: 7.0 m, y: 1.0 m))</td>
440
440
</tr>
441
441
<trclass="odd">
442
-
<tdstyle="text-align: center;">0.684592</td>
443
-
<tdstyle="text-align: center;">0.245918</td>
442
+
<tdstyle="text-align: center;">0.18781</td>
443
+
<tdstyle="text-align: center;">0.686134</td>
444
444
<tdstyle="text-align: center;">Quadrangle((x: 8.0 m, y: 0.0 m), ..., (x: 8.0 m, y: 1.0 m))</td>
445
445
</tr>
446
446
<trclass="even">
447
-
<tdstyle="text-align: center;">0.882847</td>
448
-
<tdstyle="text-align: center;">0.712778</td>
447
+
<tdstyle="text-align: center;">0.324341</td>
448
+
<tdstyle="text-align: center;">0.46076</td>
449
449
<tdstyle="text-align: center;">Quadrangle((x: 9.0 m, y: 0.0 m), ..., (x: 9.0 m, y: 1.0 m))</td>
450
450
</tr>
451
451
<trclass="odd">
@@ -458,7 +458,7 @@ <h2 data-number="3.2" class="anchored" data-anchor-id="file-formats"><span class
458
458
</div>
459
459
</div>
460
460
<p>If we save the geotable to a <code>.geojson</code> file on disk, and then load it back, we observe that the <code>CartesianGrid</code> gets replaced by a <code>GeometrySet</code>:</p>
@@ -488,53 +488,53 @@ <h2 data-number="3.2" class="anchored" data-anchor-id="file-formats"><span class
488
488
</thead>
489
489
<tbody>
490
490
<trclass="odd">
491
-
<tdstyle="text-align: center;">0.0382305</td>
492
-
<tdstyle="text-align: center;">0.60292</td>
491
+
<tdstyle="text-align: center;">0.979718</td>
492
+
<tdstyle="text-align: center;">0.383864</td>
493
493
<tdstyle="text-align: center;">PolyArea((x: 0.0 m, y: 0.0 m), ..., (x: 0.0 m, y: 1.0 m))</td>
494
494
</tr>
495
495
<trclass="even">
496
-
<tdstyle="text-align: center;">0.106163</td>
497
-
<tdstyle="text-align: center;">0.989514</td>
496
+
<tdstyle="text-align: center;">0.892466</td>
497
+
<tdstyle="text-align: center;">0.488793</td>
498
498
<tdstyle="text-align: center;">PolyArea((x: 1.0 m, y: 0.0 m), ..., (x: 1.0 m, y: 1.0 m))</td>
499
499
</tr>
500
500
<trclass="odd">
501
-
<tdstyle="text-align: center;">0.18793</td>
502
-
<tdstyle="text-align: center;">0.547123</td>
501
+
<tdstyle="text-align: center;">0.794076</td>
502
+
<tdstyle="text-align: center;">0.788655</td>
503
503
<tdstyle="text-align: center;">PolyArea((x: 2.0 m, y: 0.0 m), ..., (x: 2.0 m, y: 1.0 m))</td>
504
504
</tr>
505
505
<trclass="even">
506
-
<tdstyle="text-align: center;">0.0315388</td>
507
-
<tdstyle="text-align: center;">0.272782</td>
506
+
<tdstyle="text-align: center;">0.674345</td>
507
+
<tdstyle="text-align: center;">0.443076</td>
508
508
<tdstyle="text-align: center;">PolyArea((x: 3.0 m, y: 0.0 m), ..., (x: 3.0 m, y: 1.0 m))</td>
509
509
</tr>
510
510
<trclass="odd">
511
-
<tdstyle="text-align: center;">0.663114</td>
512
-
<tdstyle="text-align: center;">0.942687</td>
511
+
<tdstyle="text-align: center;">0.702333</td>
512
+
<tdstyle="text-align: center;">0.620565</td>
513
513
<tdstyle="text-align: center;">PolyArea((x: 4.0 m, y: 0.0 m), ..., (x: 4.0 m, y: 1.0 m))</td>
514
514
</tr>
515
515
<trclass="even">
516
-
<tdstyle="text-align: center;">0.794098</td>
517
-
<tdstyle="text-align: center;">0.517486</td>
516
+
<tdstyle="text-align: center;">0.13348</td>
517
+
<tdstyle="text-align: center;">0.640933</td>
518
518
<tdstyle="text-align: center;">PolyArea((x: 5.0 m, y: 0.0 m), ..., (x: 5.0 m, y: 1.0 m))</td>
519
519
</tr>
520
520
<trclass="odd">
521
-
<tdstyle="text-align: center;">0.472546</td>
522
-
<tdstyle="text-align: center;">0.999054</td>
521
+
<tdstyle="text-align: center;">0.0464712</td>
522
+
<tdstyle="text-align: center;">0.523528</td>
523
523
<tdstyle="text-align: center;">PolyArea((x: 6.0 m, y: 0.0 m), ..., (x: 6.0 m, y: 1.0 m))</td>
524
524
</tr>
525
525
<trclass="even">
526
-
<tdstyle="text-align: center;">0.834748</td>
527
-
<tdstyle="text-align: center;">0.303973</td>
526
+
<tdstyle="text-align: center;">0.128001</td>
527
+
<tdstyle="text-align: center;">0.950535</td>
528
528
<tdstyle="text-align: center;">PolyArea((x: 7.0 m, y: 0.0 m), ..., (x: 7.0 m, y: 1.0 m))</td>
529
529
</tr>
530
530
<trclass="odd">
531
-
<tdstyle="text-align: center;">0.684592</td>
532
-
<tdstyle="text-align: center;">0.245918</td>
531
+
<tdstyle="text-align: center;">0.18781</td>
532
+
<tdstyle="text-align: center;">0.686134</td>
533
533
<tdstyle="text-align: center;">PolyArea((x: 8.0 m, y: 0.0 m), ..., (x: 8.0 m, y: 1.0 m))</td>
534
534
</tr>
535
535
<trclass="even">
536
-
<tdstyle="text-align: center;">0.882847</td>
537
-
<tdstyle="text-align: center;">0.712778</td>
536
+
<tdstyle="text-align: center;">0.324341</td>
537
+
<tdstyle="text-align: center;">0.46076</td>
538
538
<tdstyle="text-align: center;">PolyArea((x: 9.0 m, y: 0.0 m), ..., (x: 9.0 m, y: 1.0 m))</td>
539
539
</tr>
540
540
<trclass="odd">
@@ -547,7 +547,7 @@ <h2 data-number="3.2" class="anchored" data-anchor-id="file-formats"><span class
547
547
</div>
548
548
</div>
549
549
<p>Other file formats such as <code>.ply</code> and <code>.msh</code> are widely used in <ahref="https://en.wikipedia.org/wiki/Computer_graphics">computer graphics</a> to save geospatial data over meshes, and preserve topological information:</p>
<p>Do we gain anything by not adhering to <strong>programming interfaces</strong>?</p>
572
572
</blockquote>
573
573
<p>The answer is an emphatic <strong>YES</strong>! It means that we have total freedom to innovate and improve the representation of various geometries and geospatial domains with Julia’s amazing type system. To give a simple example, let’s take a look at the <code>Triangle</code> geometry:</p>
<p>If we treated this geometry as a generic polygon represented by a vector of vertices in memory, like it is done in <ahref="https://github.com/JuliaGeo/GeoInterface.jl">GeoInterface.jl</a> for example, we wouldn’t be able to dispatch optimized code that is only valid for a triangle:</p>
0 commit comments