22< html xmlns ="http://www.w3.org/1999/xhtml " lang ="en " xml:lang ="en "> < head >
33
44< meta charset ="utf-8 ">
5- < meta name ="generator " content ="quarto-1.6.39 ">
5+ < meta name ="generator " content ="quarto-1.6.40 ">
66
77< meta name ="viewport " content ="width=device-width, initial-scale=1.0, user-scalable=yes ">
88
7171< script src ="site_libs/quarto-html/tippy.umd.min.js "> </ script >
7272< script src ="site_libs/quarto-html/anchor.min.js "> </ script >
7373< link href ="site_libs/quarto-html/tippy.css " rel ="stylesheet ">
74- < link href ="site_libs/quarto-html/quarto-syntax-highlighting-e26003cea8cd680ca0c55a263523d882 .css " rel ="stylesheet " class ="quarto-color-scheme " id ="quarto-text-highlighting-styles ">
75- < link href ="site_libs/quarto-html/quarto-syntax-highlighting-dark-d166b450ba5a8e9f7a0ab969bf6592c1 .css " rel ="prefetch " class ="quarto-color-scheme quarto-color-alternate " id ="quarto-text-highlighting-styles ">
74+ < link href ="site_libs/quarto-html/quarto-syntax-highlighting-549806ee2085284f45b00abea8c6df48 .css " rel ="stylesheet " class ="quarto-color-scheme " id ="quarto-text-highlighting-styles ">
75+ < link href ="site_libs/quarto-html/quarto-syntax-highlighting-dark-8ea72dc5fed832574809a9c94082fbbb .css " rel ="prefetch " class ="quarto-color-scheme quarto-color-alternate " id ="quarto-text-highlighting-styles ">
7676< script src ="site_libs/bootstrap/bootstrap.min.js "> </ script >
7777< link href ="site_libs/bootstrap/bootstrap-icons.css " rel ="stylesheet ">
78- < link href ="site_libs/bootstrap/bootstrap-348f9480ca2773527746b0ae0a361280 .min.css " rel ="stylesheet " append-hash ="true " class ="quarto-color-scheme " id ="quarto-bootstrap " data-mode ="light ">
79- < link href ="site_libs/bootstrap/bootstrap-dark-46f389c8df888532cbd1bee5f85f9066 .min.css " rel ="prefetch " append-hash ="true " class ="quarto-color-scheme quarto-color-alternate " id ="quarto-bootstrap " data-mode ="dark ">
78+ < link href ="site_libs/bootstrap/bootstrap-4f6263ad221f763a4834f521a0a25b97 .min.css " rel ="stylesheet " append-hash ="true " class ="quarto-color-scheme " id ="quarto-bootstrap " data-mode ="light ">
79+ < link href ="site_libs/bootstrap/bootstrap-dark-c1b3eac806c2add337f6f2869449eb23 .min.css " rel ="prefetch " append-hash ="true " class ="quarto-color-scheme quarto-color-alternate " id ="quarto-bootstrap " data-mode ="dark ">
8080< script id ="quarto-search-options " type ="application/json "> {
8181 "location" : "sidebar" ,
8282 "copy-button" : false ,
@@ -375,7 +375,7 @@ <h2 data-number="3.1" class="anchored" data-anchor-id="geoio.jl"><span class="he
375375< section id ="file-formats " class ="level2 " data-number ="3.2 ">
376376< h2 data-number ="3.2 " class ="anchored " data-anchor-id ="file-formats "> < span class ="header-section-number "> 3.2</ span > File formats</ h2 >
377377< 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 grid:</ p >
378- < div id ="0b6ade95 " class ="cell " data-execution_count ="2 ">
378+ < div id ="167a9b04 " class ="cell " data-execution_count ="2 ">
379379< div class ="sourceCode cell-code " id ="cb3 "> < pre class ="sourceCode julia code-with-copy "> < code class ="sourceCode julia "> < span id ="cb3-1 "> < a href ="#cb3-1 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="im "> using</ span > < span class ="bu "> GeoIO</ span > </ span >
380380< span id ="cb3-2 "> < a href ="#cb3-2 " aria-hidden ="true " tabindex ="-1 "> </ a > </ span >
381381< span id ="cb3-3 "> < a href ="#cb3-3 " aria-hidden ="true " tabindex ="-1 "> </ a > earth < span class ="op "> =</ span > GeoIO.< span class ="fu "> load</ span > (< span class ="st "> "data/earth.tif"</ span > )</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
@@ -446,7 +446,7 @@ <h2 data-number="3.2" class="anchored" data-anchor-id="file-formats"><span class
446446</ div >
447447</ div >
448448< p > If we save the geotable to a < code > .geojson</ code > file on disk, and then load it back, we observe that the grid gets replaced by a geometry set:</ p >
449- < div id ="fbd33674 " class ="cell " data-execution_count ="3 ">
449+ < div id ="e93c469d " class ="cell " data-execution_count ="3 ">
450450< div class ="sourceCode cell-code " id ="cb4 "> < pre class ="sourceCode julia code-with-copy "> < code class ="sourceCode julia "> < span id ="cb4-1 "> < a href ="#cb4-1 " aria-hidden ="true " tabindex ="-1 "> </ a > fname < span class ="op "> =</ span > < span class ="fu "> tempname</ span > () < span class ="op "> *</ span > < span class ="st "> ".geojson"</ span > </ span >
451451< span id ="cb4-2 "> < a href ="#cb4-2 " aria-hidden ="true " tabindex ="-1 "> </ a > </ span >
452452< span id ="cb4-3 "> < a href ="#cb4-3 " aria-hidden ="true " tabindex ="-1 "> </ a > GeoIO.< span class ="fu "> save</ span > (fname, earth)</ span >
@@ -519,7 +519,7 @@ <h2 data-number="3.2" class="anchored" data-anchor-id="file-formats"><span class
519519</ div >
520520</ div >
521521< p > Other file formats such as < code > .ply</ code > and < code > .msh</ code > are widely used in < a href ="https://en.wikipedia.org/wiki/Computer_graphics "> computer graphics</ a > to save geospatial data over meshes, and preserve topological information:</ p >
522- < div id ="164a3d1c " class ="cell " data-execution_count ="4 ">
522+ < div id ="f48f2ca5 " class ="cell " data-execution_count ="4 ">
523523< div class ="sourceCode cell-code " id ="cb5 "> < pre class ="sourceCode julia code-with-copy "> < code class ="sourceCode julia "> < span id ="cb5-1 "> < a href ="#cb5-1 " aria-hidden ="true " tabindex ="-1 "> </ a > beethoven < span class ="op "> =</ span > GeoIO.< span class ="fu "> load</ span > (< span class ="st "> "data/beethoven.ply"</ span > )</ span >
524524< span id ="cb5-2 "> < a href ="#cb5-2 " aria-hidden ="true " tabindex ="-1 "> </ a > </ span >
525525< span id ="cb5-3 "> < a href ="#cb5-3 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="fu "> viz</ span > (beethoven.geometry)</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
@@ -543,7 +543,7 @@ <h2 data-number="3.3" class="anchored" data-anchor-id="rationale"><span class="h
543543< p > Do we gain anything by not adhering to < strong > programming interfaces</ strong > ?</ p >
544544</ blockquote >
545545< 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 >
546- < div id ="9be4759a " class ="cell " data-execution_count ="5 ">
546+ < div id ="461d47e1 " class ="cell " data-execution_count ="5 ">
547547< div class ="sourceCode cell-code " id ="cb7 "> < pre class ="sourceCode julia code-with-copy "> < code class ="sourceCode julia "> < span id ="cb7-1 "> < a href ="#cb7-1 " aria-hidden ="true " tabindex ="-1 "> </ a > t < span class ="op "> =</ span > < span class ="fu "> Triangle</ span > ((< span class ="fl "> 0</ span > , < span class ="fl "> 0</ span > ), (< span class ="fl "> 1</ span > , < span class ="fl "> 0</ span > ), (< span class ="fl "> 1</ span > , < span class ="fl "> 1</ span > ))</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
548548< div class ="cell-output cell-output-display " data-execution_count ="6 ">
549549< pre > < code > Triangle
@@ -553,12 +553,12 @@ <h2 data-number="3.3" class="anchored" data-anchor-id="rationale"><span class="h
553553</ div >
554554</ div >
555555< p > If we treated this geometry as a generic polygon represented by a vector of vertices in memory, like it is done in < a href ="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 >
556- < div id ="5f812a16 " class ="cell " data-execution_count ="6 ">
556+ < div id ="57194206 " class ="cell " data-execution_count ="6 ">
557557< div class ="sourceCode cell-code " id ="cb9 "> < pre class ="sourceCode julia code-with-copy "> < code class ="sourceCode julia "> < span id ="cb9-1 "> < a href ="#cb9-1 " aria-hidden ="true " tabindex ="-1 "> </ a > < span class ="pp "> @code_llvm</ span > < span class ="fu "> isconvex</ span > (t)</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
558558< div class ="cell-output cell-output-stdout ">
559559< pre > < code > ; Function Signature: isconvex(Meshes.Ngon{3, Meshes.𝔼{2}, CoordRefSystems.Cartesian{CoordRefSystems.NoDatum, 2, Unitful.Quantity{Float64, Unitful.Dimensions{(Unitful.Dimension{:Length}(power=Base.Rational{Int64}(num=1, den=1)),)}(), Unitful.FreeUnits{(Unitful.Unit{:Meter, Unitful.Dimensions{(Unitful.Dimension{:Length}(power=Base.Rational{Int64}(num=1, den=1)),)}()}(tens=0, power=Base.Rational{Int64}(num=1, den=1)),), Unitful.Dimensions{(Unitful.Dimension{:Length}(power=Base.Rational{Int64}(num=1, den=1)),)}(), nothing}}}})
560- ; @ /home/runner/.julia/packages/Meshes/tKNCZ /src/predicates/isconvex.jl:57 within `isconvex`
561- define i8 @julia_isconvex_30136 (ptr nocapture readonly %0) #0 {
560+ ; @ /home/runner/.julia/packages/Meshes/ks58W /src/predicates/isconvex.jl:57 within `isconvex`
561+ define i8 @julia_isconvex_29810 (ptr nocapture readonly %0) #0 {
562562top:
563563 ret i8 1
564564}</ code > </ pre >
0 commit comments