• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>area (with strategy)</title>
5<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7<link rel="home" href="../../../../index.html" title="Chapter 1. Geometry">
8<link rel="up" href="../area.html" title="area">
9<link rel="prev" href="area_1.html" title="area">
10<link rel="next" href="../assign.html" title="assign">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr>
14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
15<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
16<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
20</tr></table>
21<hr>
22<div class="spirit-nav">
23<a accesskey="p" href="area_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../area.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../assign.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
24</div>
25<div class="section">
26<div class="titlepage"><div><div><h5 class="title">
27<a name="geometry.reference.algorithms.area.area_2_with_strategy"></a><a class="link" href="area_2_with_strategy.html" title="area (with strategy)">area
28          (with strategy)</a>
29</h5></div></div></div>
30<p>
31            <a class="indexterm" name="idm45635707992000"></a>
32Calculates the area of a geometry using the specified strategy.
33          </p>
34<h6>
35<a name="geometry.reference.algorithms.area.area_2_with_strategy.h0"></a>
36            <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.description"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.description">Description</a>
37          </h6>
38<p>
39            The free function area calculates the area of a geometry using the specified
40            strategy. Reasons to specify a strategy include: use another coordinate
41            system for calculations; construct the strategy beforehand (e.g. with
42            the radius of the Earth); select a strategy when there are more than
43            one available for a calculation.
44          </p>
45<h6>
46<a name="geometry.reference.algorithms.area.area_2_with_strategy.h1"></a>
47            <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.synopsis"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.synopsis">Synopsis</a>
48          </h6>
49<p>
50</p>
51<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Strategy</span><span class="special">&gt;</span>
52<span class="identifier">area_result</span><span class="special">&lt;</span><span class="identifier">Geometry</span><span class="special">,</span> <span class="identifier">Strategy</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">area</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Strategy</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">strategy</span><span class="special">)</span></pre>
53<p>
54          </p>
55<h6>
56<a name="geometry.reference.algorithms.area.area_2_with_strategy.h2"></a>
57            <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.parameters"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.parameters">Parameters</a>
58          </h6>
59<div class="informaltable"><table class="table">
60<colgroup>
61<col>
62<col>
63<col>
64<col>
65</colgroup>
66<thead><tr>
67<th>
68                    <p>
69                      Type
70                    </p>
71                  </th>
72<th>
73                    <p>
74                      Concept
75                    </p>
76                  </th>
77<th>
78                    <p>
79                      Name
80                    </p>
81                  </th>
82<th>
83                    <p>
84                      Description
85                    </p>
86                  </th>
87</tr></thead>
88<tbody>
89<tr>
90<td>
91                    <p>
92                      Geometry const &amp;
93                    </p>
94                  </td>
95<td>
96                    <p>
97                      Any type fulfilling a Geometry Concept
98                    </p>
99                  </td>
100<td>
101                    <p>
102                      geometry
103                    </p>
104                  </td>
105<td>
106                    <p>
107                      A model of the specified concept
108                    </p>
109                  </td>
110</tr>
111<tr>
112<td>
113                    <p>
114                      Strategy const &amp;
115                    </p>
116                  </td>
117<td>
118                    <p>
119                      Any type fulfilling a Area Strategy Concept
120                    </p>
121                  </td>
122<td>
123                    <p>
124                      strategy
125                    </p>
126                  </td>
127<td>
128                    <p>
129                      The strategy which will be used for area calculations
130                    </p>
131                  </td>
132</tr>
133</tbody>
134</table></div>
135<h6>
136<a name="geometry.reference.algorithms.area.area_2_with_strategy.h3"></a>
137            <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.returns"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.returns">Returns</a>
138          </h6>
139<p>
140            The calculated area
141          </p>
142<h6>
143<a name="geometry.reference.algorithms.area.area_2_with_strategy.h4"></a>
144            <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.header"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.header">Header</a>
145          </h6>
146<p>
147            Either
148          </p>
149<p>
150            <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
151          </p>
152<p>
153            Or
154          </p>
155<p>
156            <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">area</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
157          </p>
158<h6>
159<a name="geometry.reference.algorithms.area.area_2_with_strategy.h5"></a>
160            <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.conformance"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.conformance">Conformance</a>
161          </h6>
162<p>
163            The function area implements function Area from the <a href="http://www.opengeospatial.org/standards/sfa" target="_top">OGC
164            Simple Feature Specification</a>.
165          </p>
166<h6>
167<a name="geometry.reference.algorithms.area.area_2_with_strategy.h6"></a>
168            <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.behavior"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.behavior">Behavior</a>
169          </h6>
170<div class="informaltable"><table class="table">
171<colgroup>
172<col>
173<col>
174</colgroup>
175<thead><tr>
176<th>
177                    <p>
178                      Case
179                    </p>
180                  </th>
181<th>
182                    <p>
183                      Behavior
184                    </p>
185                  </th>
186</tr></thead>
187<tbody>
188<tr>
189<td>
190                    <p>
191                      pointlike (e.g. point)
192                    </p>
193                  </td>
194<td>
195                    <p>
196                      Returns 0
197                    </p>
198                  </td>
199</tr>
200<tr>
201<td>
202                    <p>
203                      linear (e.g. linestring)
204                    </p>
205                  </td>
206<td>
207                    <p>
208                      Returns 0
209                    </p>
210                  </td>
211</tr>
212<tr>
213<td>
214                    <p>
215                      areal (e.g. polygon)
216                    </p>
217                  </td>
218<td>
219                    <p>
220                      Returns the area
221                    </p>
222                  </td>
223</tr>
224<tr>
225<td>
226                    <p>
227                      Cartesian
228                    </p>
229                  </td>
230<td>
231                    <p>
232                      Returns the area in the same units as the input coordinates
233                    </p>
234                  </td>
235</tr>
236<tr>
237<td>
238                    <p>
239                      Spherical
240                    </p>
241                  </td>
242<td>
243                    <p>
244                      Returns the area on a unit sphere (or another sphere, if specified
245                      as such in the constructor of the strategy)
246                    </p>
247                  </td>
248</tr>
249<tr>
250<td>
251                    <p>
252                      Reversed polygon (coordinates not according their orientiation)
253                    </p>
254                  </td>
255<td>
256                    <p>
257                      Returns the negative area
258                    </p>
259                  </td>
260</tr>
261</tbody>
262</table></div>
263<h6>
264<a name="geometry.reference.algorithms.area.area_2_with_strategy.h7"></a>
265            <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.supported_geometries"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.supported_geometries">Supported
266            geometries</a>
267          </h6>
268<div class="informaltable"><table class="table">
269<colgroup>
270<col>
271<col>
272</colgroup>
273<thead><tr>
274<th>
275                    <p>
276                      Geometry
277                    </p>
278                  </th>
279<th>
280                    <p>
281                      Status
282                    </p>
283                  </th>
284</tr></thead>
285<tbody>
286<tr>
287<td>
288                    <p>
289                      Point
290                    </p>
291                  </td>
292<td>
293                    <p>
294                      <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
295                    </p>
296                  </td>
297</tr>
298<tr>
299<td>
300                    <p>
301                      Segment
302                    </p>
303                  </td>
304<td>
305                    <p>
306                      <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
307                    </p>
308                  </td>
309</tr>
310<tr>
311<td>
312                    <p>
313                      Box
314                    </p>
315                  </td>
316<td>
317                    <p>
318                      <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
319                    </p>
320                  </td>
321</tr>
322<tr>
323<td>
324                    <p>
325                      Linestring
326                    </p>
327                  </td>
328<td>
329                    <p>
330                      <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
331                    </p>
332                  </td>
333</tr>
334<tr>
335<td>
336                    <p>
337                      Ring
338                    </p>
339                  </td>
340<td>
341                    <p>
342                      <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
343                    </p>
344                  </td>
345</tr>
346<tr>
347<td>
348                    <p>
349                      Polygon
350                    </p>
351                  </td>
352<td>
353                    <p>
354                      <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
355                    </p>
356                  </td>
357</tr>
358<tr>
359<td>
360                    <p>
361                      MultiPoint
362                    </p>
363                  </td>
364<td>
365                    <p>
366                      <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
367                    </p>
368                  </td>
369</tr>
370<tr>
371<td>
372                    <p>
373                      MultiLinestring
374                    </p>
375                  </td>
376<td>
377                    <p>
378                      <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
379                    </p>
380                  </td>
381</tr>
382<tr>
383<td>
384                    <p>
385                      MultiPolygon
386                    </p>
387                  </td>
388<td>
389                    <p>
390                      <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
391                    </p>
392                  </td>
393</tr>
394<tr>
395<td>
396                    <p>
397                      Variant
398                    </p>
399                  </td>
400<td>
401                    <p>
402                      <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
403                    </p>
404                  </td>
405</tr>
406</tbody>
407</table></div>
408<h6>
409<a name="geometry.reference.algorithms.area.area_2_with_strategy.h8"></a>
410            <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.complexity"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.complexity">Complexity</a>
411          </h6>
412<p>
413            Linear
414          </p>
415<h6>
416<a name="geometry.reference.algorithms.area.area_2_with_strategy.h9"></a>
417            <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.available_strategies"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.available_strategies">Available
418            Strategies</a>
419          </h6>
420<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
421<li class="listitem">
422                <a class="link" href="../../strategies/strategy_area_cartesian.html" title="strategy::area::cartesian">Cartesian</a>
423              </li>
424<li class="listitem">
425                <a class="link" href="../../strategies/strategy_area_spherical.html" title="strategy::area::spherical">Spherical</a>
426              </li>
427<li class="listitem">
428                <a class="link" href="../../strategies/strategy_area_geographic.html" title="strategy::area::geographic">Geographic</a>
429              </li>
430</ul></div>
431<h6>
432<a name="geometry.reference.algorithms.area.area_2_with_strategy.h10"></a>
433            <span class="phrase"><a name="geometry.reference.algorithms.area.area_2_with_strategy.example"></a></span><a class="link" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.example">Example</a>
434          </h6>
435<p>
436            Calculate the area of a polygon
437          </p>
438<p>
439</p>
440<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
441
442<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
443<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">point_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
444<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
445
446<span class="keyword">namespace</span> <span class="identifier">bg</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">;</span> <a class="co" name="geometry.reference.algorithms.area.area_2_with_strategy.c0" href="area_2_with_strategy.html#geometry.reference.algorithms.area.area_2_with_strategy.c1"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a>
447
448<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
449<span class="special">{</span>
450    <span class="comment">// Create spherical polygon</span>
451    <span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">cs</span><span class="special">::</span><span class="identifier">spherical_equatorial</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">degree</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">sph_poly</span><span class="special">;</span>
452    <span class="identifier">bg</span><span class="special">::</span><span class="identifier">read_wkt</span><span class="special">(</span><span class="string">"POLYGON((0 0,0 1,1 0,0 0))"</span><span class="special">,</span> <span class="identifier">sph_poly</span><span class="special">);</span>
453
454    <span class="comment">// Create spherical strategy with mean Earth radius in meters</span>
455    <span class="identifier">bg</span><span class="special">::</span><span class="identifier">strategy</span><span class="special">::</span><span class="identifier">area</span><span class="special">::</span><span class="identifier">spherical</span><span class="special">&lt;&gt;</span> <span class="identifier">sph_strategy</span><span class="special">(</span><span class="number">6371008.8</span><span class="special">);</span>
456
457    <span class="comment">// Calculate the area of a spherical polygon</span>
458    <span class="keyword">double</span> <span class="identifier">area</span> <span class="special">=</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">sph_poly</span><span class="special">,</span> <span class="identifier">sph_strategy</span><span class="special">);</span>
459    <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Area: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">area</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
460
461    <span class="comment">// Create geographic polygon</span>
462    <span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">cs</span><span class="special">::</span><span class="identifier">geographic</span><span class="special">&lt;</span><span class="identifier">bg</span><span class="special">::</span><span class="identifier">degree</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">geo_poly</span><span class="special">;</span>
463    <span class="identifier">bg</span><span class="special">::</span><span class="identifier">read_wkt</span><span class="special">(</span><span class="string">"POLYGON((0 0,0 1,1 0,0 0))"</span><span class="special">,</span> <span class="identifier">geo_poly</span><span class="special">);</span>
464
465    <span class="comment">// Create geographic strategy with WGS84 spheroid</span>
466    <span class="identifier">bg</span><span class="special">::</span><span class="identifier">srs</span><span class="special">::</span><span class="identifier">spheroid</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">spheroid</span><span class="special">(</span><span class="number">6378137.0</span><span class="special">,</span> <span class="number">6356752.3142451793</span><span class="special">);</span>
467    <span class="identifier">bg</span><span class="special">::</span><span class="identifier">strategy</span><span class="special">::</span><span class="identifier">area</span><span class="special">::</span><span class="identifier">geographic</span><span class="special">&lt;&gt;</span> <span class="identifier">geo_strategy</span><span class="special">(</span><span class="identifier">spheroid</span><span class="special">);</span>
468
469    <span class="comment">// Calculate the area of a geographic polygon</span>
470    <span class="identifier">area</span> <span class="special">=</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">geo_poly</span><span class="special">,</span> <span class="identifier">geo_strategy</span><span class="special">);</span>
471    <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Area: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">area</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
472
473    <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
474<span class="special">}</span>
475</pre>
476<p>
477          </p>
478<div class="calloutlist"><table border="0" summary="Callout list"><tr>
479<td width="5%" valign="top" align="left"><p><a name="geometry.reference.algorithms.area.area_2_with_strategy.c1"></a><a href="#geometry.reference.algorithms.area.area_2_with_strategy.c0"><img src="../../../../../../../../doc/src/images/callouts/1.png" alt="1" border="0"></a> </p></td>
480<td valign="top" align="left"><p>
481                Convenient namespace alias
482              </p></td>
483</tr></table></div>
484<p>
485            Output:
486          </p>
487<pre class="programlisting">Area: 6.18249e+09
488Area: 6.15479e+09
489</pre>
490</div>
491<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
492<td align="left"></td>
493<td align="right"><div class="copyright-footer">Copyright © 2009-2019 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam
494      Wulkiewicz, Oracle and/or its affiliates<p>
495        Distributed under the Boost Software License, Version 1.0. (See accompanying
496        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
497      </p>
498</div></td>
499</tr></table>
500<hr>
501<div class="spirit-nav">
502<a accesskey="p" href="area_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../area.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../assign.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
503</div>
504</body>
505</html>
506