<!DOCTYPE html><htmllang="en"><head><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><metaname="generator"content="rustdoc"><metaname="description"content="Maybe a misnomer, but like a PolyLine, but closed."><metaname="keywords"content="rust, rustlang, rust-lang, Ring"><title>Ring in geom::ring - Rust</title><linkrel="stylesheet"type="text/css"href="../../normalize.css"><linkrel="stylesheet"type="text/css"href="../../rustdoc.css"id="mainThemeStyle"><linkrel="stylesheet"type="text/css"href="../../light.css"id="themeStyle"><linkrel="stylesheet"type="text/css"href="../../dark.css"disabled><linkrel="stylesheet"type="text/css"href="../../ayu.css"disabled><scriptid="default-settings"></script><scriptsrc="../../storage.js"></script><scriptsrc="../../crates.js"></script><noscript><linkrel="stylesheet"href="../../noscript.css"></noscript><linkrel="alternate icon"type="image/png"href="../../favicon-16x16.png"><linkrel="alternate icon"type="image/png"href="../../favicon-32x32.png"><linkrel="icon"type="image/svg+xml"href="../../favicon.svg"><styletype="text/css">#crate-search{background-image:url("../../down-arrow.svg");}</style></head><bodyclass="rustdoc struct"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><navclass="sidebar"><divclass="sidebar-menu"role="button">☰</div><ahref='../../geom/index.html'><divclass='logo-container rust-logo'><imgsrc='../../rust-logo.png'alt='logo'></div></a><h2class="location">Struct Ring</h2><divclass="sidebar-elems"><divclass="block items"><h3class="sidebar-title"><ahref="#fields">Fields</a></h3><divclass="sidebar-links"><ahref="#structfield.pts">pts</a></div><h3class="sidebar-title"><ahref="#implementations">Methods</a></h3><divclass="sidebar-links"><ahref="#method.all_intersections">all_intersections</a><ahref="#method.contains_pt">contains_pt</a><ahref="#method.doubles_back">doubles_back</a><ahref="#method.get_both_slices_btwn">get_both_slices_btwn</a><ahref="#method.get_shorter_slice_between">get_shorter_slice_between</a><ahref="#method.get_shorter_slice_btwn">get_shorter_slice_btwn</a><ahref="#method.get_slice_between">get_slice_between</a><ahref="#method.into_points">into_points</a><ahref="#method.into_polygon">into_polygon</a><ahref="#method.must_new">must_new</a><ahref="#method.new">new</a><ahref="#method.points">points</a><ahref="#method.polylabel">polylabel</a><ahref="#method.split_points">split_points</a><ahref="#method.to_geojson">to_geojson</a><ahref="#method.to_outline">to_outline</a><ahref="#method.translate">translate</a></div><h3class="sidebar-title"><ahref="#trait-implementations">Trait Implementations</a></h3><divclass="sidebar-links"><ahref="#impl-Clone">Clone</a><ahref="#impl-Debug">Debug</a><ahref="#impl-Deserialize%3C%27de%3E">Deserialize<'de></a><ahref="#impl-Display">Display</a><ahref="#impl-From%3CLineString%3Cf64%3E%3E">From<LineString<f64>></a><ahref="#impl-From%3CRing%3E">From<Ring></a><ahref="#impl-PartialEq%3CRing%3E">PartialEq<Ring></a><ahref="#impl-Serialize">Serialize</a><ahref="#impl-StructuralPartialEq">StructuralPartialEq</a></div><h3class="sidebar-title"><ahref="#synthetic-implementations">Auto Trait Implementations</a></h3><divclass="sidebar-links"><ahref="#impl-RefUnwindSafe">RefUnwindSafe</a><ahref="#impl-Send">Send</a><ahref="#impl-Sync">Sync</a><ahref="#impl-Unpin">Unpin</a><ahref="#impl-UnwindSafe">UnwindSafe</a></div><h3class="sidebar-title"><ahref="#blanket-implementations">Blanket Implementations</a></h3><divclass="sidebar-links"><ahref="#impl-Any">Any</a><ahref="#impl-Borrow%3CT%3E">Borrow<T></a><ahref="#impl-BorrowMut%3CT%3E">BorrowMut<T></a><ahref="#impl-DeserializeOwned">DeserializeOwned</a><ahref="#impl-From%3CT%3E">From<T></a><ahref="#impl-Into%3CU%3E">Into<U></a><ahref="#impl-Same%3CT%3E">Same<T></a><ahref="#impl-ToOwned">ToOwned</a><ahref="
}</code></pre></div><detailsclass="rustdoc-toggle top-doc"open><summaryclass="hideme"><span>Expand description</span></summary><divclass="docblock"><p>Maybe a misnomer, but like a PolyLine, but closed.</p>
</div></details><divid="method.into_polygon"class="method has-srclink"><divclass="rightside"><aclass="srclink"href="../../src/geom/ring.rs.html#52-54"title="goto source code">[src]</a></div><ahref="#method.into_polygon"class="anchor"></a><h4class="code-header">pub fn <ahref="#method.into_polygon"class="fnname">into_polygon</a>(self) -><aclass="struct"href="../polygon/struct.Polygon.html"title="struct geom::polygon::Polygon">Polygon</a></h4></div><divid="method.points"class="method has-srclink"><divclass="rightside"><aclass="srclink"href="../../src/geom/ring.rs.html#56-58"title="goto source code">[src]</a></div><ahref="#method.points"class="anchor"></a><h4class="code-header">pub fn <ahref="#method.points"class="fnname">points</a>(&self) ->&<aclass="struct"href="https://doc.rust-lang.org/1.57.0/alloc/vec/struct.Vec.html"title="struct alloc::vec::Vec">Vec</a><<aclass="struct"href="../pt/struct.Pt2D.html"title="struct geom::pt::Pt2D">Pt2D</a>></h4></div><divid="method.into_points"class="method has-srclink"><divclass="rightside"><aclass="srclink"href="../../src/geom/ring.rs.html#59-61"title="goto source code">[src]</a></div><ahref="#method.into_points"class="anchor"></a><h4class="code-header">pub fn <ahref="#method.into_points"class="fnname">into_points</a>(self) -><aclass="struct"href="https://doc.rust-lang.org/1.57.0/alloc/vec/struct.Vec.html"title="struct alloc::vec::Vec">Vec</a><<aclass="struct"href="../pt/struct.Pt2D.html"title="struct geom::pt::Pt2D">Pt2D</a>></h4></div><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.all_intersections"class="method has-srclink"><divclass="rightside"><aclass="srclink"href="../../src/geom/ring.rs.html#65-83"title="goto source code">[src]</a></div><ahref="#method.all_intersections"class="anchor"></a><h4class="code-header">pub fn <ahref="#method.all_intersections"class="fnname">all_intersections</a>(&self, other: &<aclass="struct"href="../polyline/struct.PolyLine.html"title="struct geom::polyline::PolyLine">PolyLine</a>) -><aclass="struct"href="https://doc.rust-lang.org/1.57.0/alloc/vec/struct.Vec.html"title="struct alloc::vec::Vec">Vec</a><<aclass="struct"href="../pt/struct.Pt2D.html"title="struct geom::pt::Pt2D">Pt2D</a>></h4></div></summary><divclass="docblock"><p>Be careful with the order of results. Hits on an earlier line segment of other show up
</div></details><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.get_shorter_slice_between"class="method has-srclink"><divclass="rightside"><aclass="srclink"href="../../src/geom/ring.rs.html#136-138"title="goto source code">[src]</a></div><ahref="#method.get_shorter_slice_between"class="anchor"></a><h4class="code-header">pub fn <ahref="#method.get_shorter_slice_between"class="fnname">get_shorter_slice_between</a>(<br> &self, <br> pt1: <aclass="struct"href="../pt/struct.Pt2D.html"title="struct geom::pt::Pt2D">Pt2D</a>, <br> pt2: <aclass="struct"href="../pt/struct.Pt2D.html"title="struct geom::pt::Pt2D">Pt2D</a><br>) -><aclass="enum"href="https://doc.rust-lang.org/1.57.0/core/option/enum.Option.html"title="enum core::option::Option">Option</a><<aclass="struct"href="../polyline/struct.PolyLine.html"title="struct geom::polyline::PolyLine">PolyLine</a>></h4></div></summary><divclass="docblock"><p>Assuming both points are somewhere along the ring, return the points in between the two, by
</div></details><divid="method.contains_pt"class="method has-srclink"><divclass="rightside"><aclass="srclink"href="../../src/geom/ring.rs.html#182-186"title="goto source code">[src]</a></div><ahref="#method.contains_pt"class="anchor"></a><h4class="code-header">pub fn <ahref="#method.contains_pt"class="fnname">contains_pt</a>(&self, pt: <aclass="struct"href="../pt/struct.Pt2D.html"title="struct geom::pt::Pt2D">Pt2D</a>) -><aclass="primitive"href="https://doc.rust-lang.org/1.57.0/std/primitive.bool.html">bool</a></h4></div><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.to_geojson"class="method has-srclink"><divclass="rightside"><aclass="srclink"href="../../src/geom/ring.rs.html#189-201"title="goto source code">[src]</a></div><ahref="#method.to_geojson"class="anchor"></a><h4class="code-header">pub fn <ahref="#method.to_geojson"class="fnname">to_geojson</a>(&self, gps: <aclass="enum"href="https://doc.rust-lang.org/1.57.0/core/option/enum.Option.html"title="enum core::option::Option">Option</a><&<aclass="struct"href="../bounds/struct.GPSBounds.html"title="struct geom::bounds::GPSBounds">GPSBounds</a>>) -> Geometry</h4></div></summary><divclass="docblock"><p>Produces a GeoJSON polygon, optionally mapping the world-space points back to GPS.</p>
</div></details><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.translate"class="method has-srclink"><divclass="rightside"><aclass="srclink"href="../../src/geom/ring.rs.html#204-209"title="goto source code">[src]</a></div><ahref="#method.translate"class="anchor"></a><h4class="code-header">pub fn <ahref="#method.translate"class="fnname">translate</a>(self, dx: <aclass="primitive"href="https://doc.rust-lang.org/1.57.0/std/primitive.f64.html">f64</a>, dy: <aclass="primitive"href="https://doc.rust-lang.org/1.57.0/std/primitive.f64.html">f64</a>) -><aclass="struct"href="struct.Ring.html"title="struct geom::ring::Ring">Ring</a></h4></div></summary><divclass="docblock"><p>Translates the ring by a fixed offset.</p>
</div></details><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.polylabel"class="method has-srclink"><divclass="rightside"><aclass="srclink"href="../../src/geom/ring.rs.html#213-226"title="goto source code">[src]</a></div><ahref="#method.polylabel"class="anchor"></a><h4class="code-header">pub fn <ahref="#method.polylabel"class="fnname">polylabel</a>(&self) -><aclass="struct"href="../pt/struct.Pt2D.html"title="struct geom::pt::Pt2D">Pt2D</a></h4></div></summary><divclass="docblock"><p>Find the “pole of inaccessibility” – the most distant internal point from the polygon
outline</p>
</div></details><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.doubles_back"class="method has-srclink"><divclass="rightside"><aclass="srclink"href="../../src/geom/ring.rs.html#234-251"title="goto source code">[src]</a></div><ahref="#method.doubles_back"class="anchor"></a><h4class="code-header">pub fn <ahref="#method.doubles_back"class="fnname">doubles_back</a>(&self) -><aclass="primitive"href="https://doc.rust-lang.org/1.57.0/std/primitive.bool.html">bool</a></h4></div></summary><divclass="docblock"><p>Look for “bad” rings that double back on themselves. These’re likely to cause many
downstream problems. “Bad” means the order of points doesn’t match the order when sorting
by angle from the center.</p>
<p>TODO I spot many false positives. Look for better definitions – maybe self-intersecting
</div></details></div></details><detailsclass="rustdoc-toggle implementors-toggle"open><summary><divid="impl-PartialEq%3CRing%3E"class="impl has-srclink"><divclass="rightside"><aclass="srclink"href="../../src/geom/ring.rs.html#10"title="goto source code">[src]</a></div><ahref="#impl-PartialEq%3CRing%3E"class="anchor"></a><h3class="code-header in-band">impl <aclass="trait"href="https://doc.rust-lang.org/1.57.0/core/cmp/trait.PartialEq.html"title="trait core::cmp::PartialEq">PartialEq</a><<aclass="struct"href="struct.Ring.html"title="struct geom::ring::Ring">Ring</a>> for <aclass="struct"href="struct.Ring.html"title="struct geom::ring::Ring">Ring</a></h3></div></summary><divclass="impl-items"><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.eq"class="method trait-impl has-srclink"><divclass="rightside"><aclass="srclink"href="../../src/geom/ring.rs.html#10"title="goto source code">[src]</a></div><ahref="#method.eq"class="anchor"></a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.57.0/core/cmp/trait.PartialEq.html#tymethod.eq"class="fnname">eq</a>(&self, other: &<aclass="struct"href="struct.Ring.html"title="struct geom::ring::Ring">Ring</a>) -><aclass="primitive"href="https://doc.rust-lang.org/1.57.0/std/primitive.bool.html">bool</a></h4></div></summary><divclass='docblock'><p>This method tests for <code>self</code> and <code>other</code> values to be equal, and is used
by <code>==</code>. <ahref="https://doc.rust-lang.org/1.57.0/core/cmp/trait.PartialEq.html#tymethod.eq">Read more</a></p>
</div></details></div></details><detailsclass="rustdoc-toggle implementors-toggle"open><summary><divid="impl-ToOwned"class="impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/1.57.0/src/alloc/borrow.rs.html#84-96"title="goto source code">[src]</a></div><ahref="#impl-ToOwned"class="anchor"></a><h3class="code-header in-band">impl<T><aclass="trait"href="https://doc.rust-lang.org/1.57.0/alloc/borrow/trait.ToOwned.html"title="trait alloc::borrow::ToOwned">ToOwned</a> for T <spanclass="where fmt-newline">where<br> T: <aclass="trait"href="https://doc.rust-lang.org/1.57.0/core/clone/trait.Clone.html"title="trait core::clone::Clone">Clone</a>, </span></h3></div></summary><divclass="impl-items"><detailsclass="rustdoc-toggle"open><summary><divid="associatedtype.Owned"class="type trait-impl has-srclink"><ahref="#associatedtype.Owned"class="anchor"></a><h4class="code-header">type <ahref="https://doc.rust-lang.org/1.57.0/alloc/borrow/trait.ToOwned.html#associatedtype.Owned"class="type">Owned</a> = T</h4></div></summary><divclass='docblock'><p>The resulting type after obtaining ownership.</p>
</div></details><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.to_owned"class="method trait-impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/1.57.0/src/alloc/borrow.rs.html#89"title="goto source code">[src]</a></div><ahref="#method.to_owned"class="anchor"></a><h4class="code-header">pub fn <ahref="https://doc.rust-lang.org/1.57.0/alloc/borrow/trait.ToOwned.html#tymethod.to_owned"class="fnname">to_owned</a>(&self) -> T</h4></div></summary><divclass='docblock'><p>Creates owned data from borrowed data, usually by cloning. <ahref="https://doc.rust-lang.org/1.57.0/alloc/borrow/trait.ToOwned.html#tymethod.to_owned">Read more</a></p>
</div></details><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.clone_into"class="method trait-impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/1.57.0/src/alloc/borrow.rs.html#93"title="goto source code">[src]</a></div><ahref="#method.clone_into"class="anchor"></a><h4class="code-header">pub fn <ahref="https://doc.rust-lang.org/1.57.0/alloc/borrow/trait.ToOwned.html#method.clone_into"class="fnname">clone_into</a>(&self, target: <aclass="primitive"href="https://doc.rust-lang.org/1.57.0/std/primitive.reference.html">&mut </a>T)</h4></div></summary><divclass="item-info"><divclass="stab unstable"><details><summary><spanclass="emoji">🔬</span> This is a nightly-only experimental API. (<code>toowned_clone_into</code>)</summary><p>recently added</p>
</details></div></div><divclass='docblock'><p>Uses borrowed data to replace owned data, usually by cloning. <ahref="https://doc.rust-lang.org/1.57.0/alloc/borrow/trait.ToOwned.html#method.clone_into">Read more</a></p>
</div></details></div></details><detailsclass="rustdoc-toggle implementors-toggle"open><summary><divid="impl-ToString"class="impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/1.57.0/src/alloc/string.rs.html#2383-2397"title="goto source code">[src]</a></div><ahref="#impl-ToString"class="anchor"></a><h3class="code-header in-band">impl<T><aclass="trait"href="https://doc.rust-lang.org/1.57.0/alloc/string/trait.ToString.html"title="trait alloc::string::ToString">ToString</a> for T <spanclass="where fmt-newline">where<br> T: <aclass="trait"href="https://doc.rust-lang.org/1.57.0/core/fmt/trait.Display.html"title="trait core::fmt::Display">Display</a> + ?<aclass="trait"href="https://doc.rust-lang.org/1.57.0/core/marker/trait.Sized.html"title="trait core::marker::Sized">Sized</a>, </span></h3></div></summary><divclass="impl-items"><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.to_string"class="method trait-impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/1.57.0/src/alloc/string.rs.html#2389"title="goto source code">[src]</a></div><ahref="#method.to_string"class="anchor"></a><h4class="code-header">pub default fn <ahref="https://doc.rust-lang.org/1.57.0/alloc/string/trait.ToString.html#tymethod.to_string"class="fnname">to_string</a>(&self) -><aclass="struct"href="https://doc.rust-lang.org/1.57.0/alloc/string/struct.String.html"title="struct alloc::string::String">String</a></h4></div></summary><divclass='docblock'><p>Converts the given value to a <code>String</code>. <ahref="https://doc.rust-lang.org/1.57.0/alloc/string/trait.ToString.html#tymethod.to_string">Read more</a></p>
</div></details></div></details><detailsclass="rustdoc-toggle implementors-toggle"open><summary><divid="impl-TryFrom%3CU%3E"class="impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/1.57.0/src/core/convert/mod.rs.html#585-594"title="goto source code">[src]</a></div><ahref="#impl-TryFrom%3CU%3E"class="anchor"></a><h3class="code-header in-band">impl<T, U><aclass="trait"href="https://doc.rust-lang.org/1.57.0/core/convert/trait.TryFrom.html"title="trait core::convert::TryFrom">TryFrom</a><U> for T <spanclass="where fmt-newline">where<br> U: <aclass="trait"href="https://doc.rust-lang.org/1.57.0/core/convert/trait.Into.html"title="trait core::convert::Into">Into</a><T>, </span></h3></div></summary><divclass="impl-items"><detailsclass="rustdoc-toggle"open><summary><divid="associatedtype.Error"class="type trait-impl has-srclink"><ahref="#associatedtype.Error"class="anchor"></a><h4class="code-header">type <ahref="https://doc.rust-lang.org/1.57.0/core/convert/trait.TryFrom.html#associatedtype.Error"class="type">Error</a> = <aclass="enum"href="https://doc.rust-lang.org/1.57.0/core/convert/enum.Infallible.html"title="enum core::convert::Infallible">Infallible</a></h4></div></summary><divclass='docblock'><p>The type returned in the event of a conversion error.</p>
</div></details><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.try_from"class="method trait-impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/1.57.0/src/core/convert/mod.rs.html#591"title="goto source code">[src]</a></div><ahref="#method.try_from"class="anchor"></a><h4class="code-header">pub fn <ahref="https://doc.rust-lang.org/1.57.0/core/convert/trait.TryFrom.html#tymethod.try_from"class="fnname">try_from</a>(value: U) -><aclass="enum"href="https://doc.rust-lang.org/1.57.0/core/result/enum.Result.html"title="enum core::result::Result">Result</a><T, <T as <aclass="trait"href="https://doc.rust-lang.org/1.57.0/core/convert/trait.TryFrom.html"title="trait core::convert::TryFrom">TryFrom</a><U>>::<aclass="type"href="https://doc.rust-lang.org/1.57.0/core/convert/trait.TryFrom.html#associatedtype.Error"title="type core::convert::TryFrom::Error">Error</a>></h4></div></summary><divclass='docblock'><p>Performs the conversion.</p>
</div></details></div></details><detailsclass="rustdoc-toggle implementors-toggle"open><summary><divid="impl-TryInto%3CU%3E"class="impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/1.57.0/src/core/convert/mod.rs.html#571-580"title="goto source code">[src]</a></div><ahref="#impl-TryInto%3CU%3E"class="anchor"></a><h3class="code-header in-band">impl<T, U><aclass="trait"href="https://doc.rust-lang.org/1.57.0/core/convert/trait.TryInto.html"title="trait core::convert::TryInto">TryInto</a><U> for T <spanclass="where fmt-newline">where<br> U: <aclass="trait"href="https://doc.rust-lang.org/1.57.0/core/convert/trait.TryFrom.html"title="trait core::convert::TryFrom">TryFrom</a><T>, </span></h3></div></summary><divclass="impl-items"><detailsclass="rustdoc-toggle"open><summary><divid="associatedtype.Error-1"class="type trait-impl has-srclink"><ahref="#associatedtype.Error-1"class="anchor"></a><h4class="code-header">type <ahref="https://doc.rust-lang.org/1.57.0/core/convert/trait.TryInto.html#associatedtype.Error"class="type">Error</a> = <U as <aclass="trait"href="https://doc.rust-lang.org/1.57.0/core/convert/trait.TryFrom.html"title="trait core::convert::TryFrom">TryFrom</a><T>>::<aclass="type"href="https://doc.rust-lang.org/1.57.0/core/convert/trait.TryFrom.html#associatedtype.Error"title="type core::convert::TryFrom::Error">Error</a></h4></div></summary><divclass='docblock'><p>The type returned in the event of a conversion error.</p>
</div></details><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.try_into"class="method trait-impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/1.57.0/src/core/convert/mod.rs.html#577"title="goto source code">[src]</a></div><ahref="#method.try_into"class="anchor"></a><h4class="code-header">pub fn <ahref="https://doc.rust-lang.org/1.57.0/core/convert/trait.TryInto.html#tymethod.try_into"class="fnname">try_into</a>(self) -><aclass="enum"href="https://doc.rust-lang.org/1.57.0/core/result/enum.Result.html"title="enum core::result::Result">Result</a><U, <U as <aclass="trait"href="https://doc.rust-lang.org/1.57.0/core/convert/trait.TryFrom.html"title="trait core::convert::TryFrom">TryFrom</a><T>>::<aclass="type"href="https://doc.rust-lang.org/1.57.0/core/convert/trait.TryFrom.html#associatedtype.Error"title="type core::convert::TryFrom::Error">Error</a>></h4></div></summary><divclass='docblock'><p>Performs the conversion.</p>