aboutsummaryrefslogtreecommitdiff
path: root/operations/transformations/helmert.html
blob: 4f6c44148649f90d086495afff443f487752b51b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
  <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />

  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Helmert transform &mdash; PROJ 9.0.0 documentation</title>
      <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
      <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
    <link rel="shortcut icon" href="../../_static/favicon.png"/>
    <link rel="canonical" href="https://proj.orgoperations/transformations/helmert.html"/>
  <!--[if lt IE 9]>
    <script src="../../_static/js/html5shiv.min.js"></script>
  <![endif]-->
  
        <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
        <script src="../../_static/jquery.js"></script>
        <script src="../../_static/underscore.js"></script>
        <script src="../../_static/doctools.js"></script>
        <script async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
    <script src="../../_static/js/theme.js"></script>
    <link rel="author" title="About these documents" href="../../about.html" />
    <link rel="index" title="Index" href="../../genindex.html" />
    <link rel="search" title="Search" href="../../search.html" />
    <link rel="next" title="Horner polynomial evaluation" href="horner.html" />
    <link rel="prev" title="Geographic offsets" href="geogoffset.html" /> 
</head>

<body class="wy-body-for-nav"> 
  <div class="wy-grid-for-nav">
    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
      <div class="wy-side-scroll">
        <div class="wy-side-nav-search"  style="background: #353130" >
            <a href="../../index.html">
            <img src="../../_static/logo.png" class="logo" alt="Logo"/>
          </a>
              <div class="version">
                9.0.0
              </div>
<div role="search">
  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
    <input type="text" name="q" placeholder="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
</div>
        </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
              <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../about.html">About</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../news.html">News</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../download.html">Download</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../install.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../usage/index.html">Using PROJ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../apps/index.html">Applications</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">Coordinate operations</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../projections/index.html">Projections</a></li>
<li class="toctree-l2"><a class="reference internal" href="../conversions/index.html">Conversions</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="index.html">Transformations</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="affine.html">Affine transformation</a></li>
<li class="toctree-l3"><a class="reference internal" href="defmodel.html">Multi-component time-based deformation model</a></li>
<li class="toctree-l3"><a class="reference internal" href="deformation.html">Kinematic datum shifting utilizing a deformation model</a></li>
<li class="toctree-l3"><a class="reference internal" href="geogoffset.html">Geographic offsets</a></li>
<li class="toctree-l3 current"><a class="current reference internal" href="#">Helmert transform</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#examples">Examples</a></li>
<li class="toctree-l4"><a class="reference internal" href="#parameters">Parameters</a></li>
<li class="toctree-l4"><a class="reference internal" href="#mathematical-description">Mathematical description</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="horner.html">Horner polynomial evaluation</a></li>
<li class="toctree-l3"><a class="reference internal" href="molodensky.html">Molodensky transform</a></li>
<li class="toctree-l3"><a class="reference internal" href="molobadekas.html">Molodensky-Badekas transform</a></li>
<li class="toctree-l3"><a class="reference internal" href="hgridshift.html">Horizontal grid shift</a></li>
<li class="toctree-l3"><a class="reference internal" href="tinshift.html">Triangulated Irregular Network based transformation</a></li>
<li class="toctree-l3"><a class="reference internal" href="vgridshift.html">Vertical grid shift</a></li>
<li class="toctree-l3"><a class="reference internal" href="xyzgridshift.html">Geocentric grid shift</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../pipeline.html">The pipeline operator</a></li>
<li class="toctree-l2"><a class="reference internal" href="../operations_computation.html">Computation of coordinate operations between two CRS</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../resource_files.html">Resource files</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../geodesic.html">Geodesic calculations</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../development/index.html">Development</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../specifications/index.html">Specifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../community/index.html">Community</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../faq.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../glossary.html">Glossary</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../zreferences.html">References</a></li>
</ul>

        </div>
      </div>
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu"  style="background: #353130" >
          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
          <a href="../../index.html">PROJ</a>
      </nav>

      <div class="wy-nav-content">
        <div class="rst-content">
          <div role="navigation" aria-label="Page navigation">
  <ul class="wy-breadcrumbs">
      <li><a href="../../index.html" class="icon icon-home"></a> &raquo;</li>
          <li><a href="../index.html">Coordinate operations</a> &raquo;</li>
          <li><a href="index.html">Transformations</a> &raquo;</li>
      <li>Helmert transform</li>
      <li class="wy-breadcrumbs-aside">
              <a href="https://github.com/OSGeo/PROJ/edit/8.2/docs/source/operations/transformations/helmert.rst" class="fa fa-github"> Edit on GitHub</a>
      </li>
  </ul><div class="rst-breadcrumbs-buttons" role="navigation" aria-label="Sequential page navigation">
        <a href="geogoffset.html" class="btn btn-neutral float-left" title="Geographic offsets" accesskey="p"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
        <a href="horner.html" class="btn btn-neutral float-right" title="Horner polynomial evaluation" accesskey="n">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
  </div>
  <hr/>
</div>
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
           <div itemprop="articleBody">
             
  <section id="helmert-transform">
<span id="helmert"></span><h1>Helmert transform<a class="headerlink" href="#helmert-transform" title="Permalink to this headline">¶</a></h1>
<div class="versionadded">
<p><span class="versionmodified added">New in version 5.0.0.</span></p>
</div>
<p>The Helmert transformation changes coordinates from one reference frame to
another by means of 3-, 4-and 7-parameter shifts, or one of their 6-, 8- and
14-parameter kinematic counterparts.</p>
<table class="docutils align-default">
<colgroup>
<col style="width: 20%" />
<col style="width: 80%" />
</colgroup>
<tbody>
<tr class="row-odd"><td><p><strong>Alias</strong></p></td>
<td><p>helmert</p></td>
</tr>
<tr class="row-even"><td><p><strong>Domain</strong></p></td>
<td><p>2D, 3D and 4D</p></td>
</tr>
<tr class="row-odd"><td><p><strong>Input type</strong></p></td>
<td><p>Cartesian coordinates (spatial), decimalyears (temporal).</p></td>
</tr>
<tr class="row-even"><td><p><strong>Output type</strong></p></td>
<td><p>Cartesian coordinates (spatial), decimalyears (temporal).</p></td>
</tr>
<tr class="row-odd"><td><p><strong>Input type</strong></p></td>
<td><p>Cartesian coordinates</p></td>
</tr>
<tr class="row-even"><td><p><strong>Output type</strong></p></td>
<td><p>Cartesian coordinates</p></td>
</tr>
</tbody>
</table>
<p>The Helmert transform, in all its various incarnations, is used to perform reference
frame shifts. The transformation operates in cartesian space. It can be used to transform
planar coordinates from one datum to another, transform 3D cartesian
coordinates from one static reference frame to another or it can be used to do fully
kinematic transformations from global reference frames to local static frames.</p>
<p>All of the parameters described in the table above are marked as optional. This is true
as long as at least one parameter is defined in the setup of the transformation.
The behavior of the transformation depends on which parameters are used in the setup.
For instance, if a rate of change parameter is specified a kinematic version of the
transformation is used.</p>
<p>The kinematic transformations require an observation time of the coordinate, as well
as a central epoch for the transformation. The latter is usually documented
alongside the rest of the transformation parameters for a given transformation.
The central epoch is controlled with the parameter <cite>t_epoch</cite>. The observation
time is given as part of the coordinate when using PROJ’s 4D-functionality.</p>
<section id="examples">
<h2>Examples<a class="headerlink" href="#examples" title="Permalink to this headline">¶</a></h2>
<p>Transforming coordinates from NAD72 to NAD83 using the 4 parameter 2D Helmert:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>proj=helmert convention=coordinate_frame x=-9597.3572 y=.6112 s=0.304794780637 theta=-1.244048
</pre></div>
</div>
<p>Simplified transformations from ITRF2008/IGS08 to ETRS89 using 7 parameters:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>proj=helmert convention=coordinate_frame x=0.67678    y=0.65495   z=-0.52827
            rx=-0.022742 ry=0.012667 rz=0.022704  s=-0.01070
</pre></div>
</div>
<p>Transformation from <cite>ITRF2000</cite>  to <cite>ITRF93</cite> using 15 parameters:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>proj=helmert convention=position_vector
     x=0.0127     y=0.0065     z=-0.0209  s=0.00195
     dx=-0.0029   dy=-0.0002   dz=-0.0006 ds=0.00001
     rx=-0.00039  ry=0.00080   rz=-0.00114
     drx=-0.00011 dry=-0.00019 drz=0.00007
     t_epoch=1988.0
</pre></div>
</div>
</section>
<section id="parameters">
<h2>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h2>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>All parameters are optional but at least one should be used, otherwise the
operation will return the coordinates unchanged.</p>
</div>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-convention">
<span class="sig-name descname"><span class="pre">+convention</span></span><span class="sig-prename descclassname"><span class="pre">=coordinate_frame/position_vector</span></span><a class="headerlink" href="#cmdoption-arg-convention" title="Permalink to this definition">¶</a></dt>
<dd><div class="versionadded">
<p><span class="versionmodified added">New in version 5.2.0.</span></p>
</div>
<p>Indicates the convention to express the rotational terms when a 3D-Helmert /
7-parameter more transform is involved. As soon as a rotational parameter
is specified (one of <code class="docutils literal notranslate"><span class="pre">rx</span></code>, <code class="docutils literal notranslate"><span class="pre">ry</span></code>, <code class="docutils literal notranslate"><span class="pre">rz</span></code>, <code class="docutils literal notranslate"><span class="pre">drx</span></code>, <code class="docutils literal notranslate"><span class="pre">dry</span></code>, <code class="docutils literal notranslate"><span class="pre">drz</span></code>),
<code class="docutils literal notranslate"><span class="pre">convention</span></code> is required.</p>
<p>The two conventions are equally popular and a frequent source of confusion.
The coordinate frame convention is also described as an clockwise
rotation of the coordinate frame. It corresponds to EPSG method code
1032 (in the geocentric domain) or 9607 (in the geographic domain)
The position vector convention is also described as an anticlockwise
(counter-clockwise) rotation of the coordinate frame.
It corresponds to as EPSG method code 1033 (in the geocentric domain) or
9606 (in the geographic domain).</p>
<p>This parameter is ignored when only a 3-parameter
(translation terms only: <code class="docutils literal notranslate"><span class="pre">x</span></code>, <code class="docutils literal notranslate"><span class="pre">y</span></code>, <code class="docutils literal notranslate"><span class="pre">z</span></code>) , 4-parameter (3-parameter
and <code class="docutils literal notranslate"><span class="pre">theta</span></code>) or 6-parameter (3-parameter and their derivative terms)
is used.</p>
<p>The result obtained with parameters specified in a given convention
can be obtained in the other convention by negating the rotational parameters
(<code class="docutils literal notranslate"><span class="pre">rx</span></code>, <code class="docutils literal notranslate"><span class="pre">ry</span></code>, <code class="docutils literal notranslate"><span class="pre">rz</span></code>, <code class="docutils literal notranslate"><span class="pre">drx</span></code>, <code class="docutils literal notranslate"><span class="pre">dry</span></code>, <code class="docutils literal notranslate"><span class="pre">drz</span></code>)</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This parameter obsoletes <code class="docutils literal notranslate"><span class="pre">transpose</span></code> which was present in
PROJ 5.0 and 5.1, and is forbidden starting with PROJ 5.2</p>
</div>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-x">
<span class="sig-name descname"><span class="pre">+x</span></span><span class="sig-prename descclassname"><span class="pre">=&lt;value&gt;</span></span><a class="headerlink" href="#cmdoption-arg-x" title="Permalink to this definition">¶</a></dt>
<dd><p>Translation of the x-axis given in meters.</p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-y">
<span class="sig-name descname"><span class="pre">+y</span></span><span class="sig-prename descclassname"><span class="pre">=&lt;value&gt;</span></span><a class="headerlink" href="#cmdoption-arg-y" title="Permalink to this definition">¶</a></dt>
<dd><p>Translation of the y-axis given in meters.</p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-z">
<span class="sig-name descname"><span class="pre">+z</span></span><span class="sig-prename descclassname"><span class="pre">=&lt;value&gt;</span></span><a class="headerlink" href="#cmdoption-arg-z" title="Permalink to this definition">¶</a></dt>
<dd><p>Translation of the z-axis given in meters.</p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-s">
<span class="sig-name descname"><span class="pre">+s</span></span><span class="sig-prename descclassname"><span class="pre">=&lt;value&gt;</span></span><a class="headerlink" href="#cmdoption-arg-s" title="Permalink to this definition">¶</a></dt>
<dd><p>Scale factor given in ppm.</p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-rx">
<span class="sig-name descname"><span class="pre">+rx</span></span><span class="sig-prename descclassname"><span class="pre">=&lt;value&gt;</span></span><a class="headerlink" href="#cmdoption-arg-rx" title="Permalink to this definition">¶</a></dt>
<dd><p>X-axis rotation in the 3D Helmert given arc seconds.</p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-ry">
<span class="sig-name descname"><span class="pre">+ry</span></span><span class="sig-prename descclassname"><span class="pre">=&lt;value&gt;</span></span><a class="headerlink" href="#cmdoption-arg-ry" title="Permalink to this definition">¶</a></dt>
<dd><p>Y-axis rotation in the 3D Helmert given in arc seconds.</p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-rz">
<span class="sig-name descname"><span class="pre">+rz</span></span><span class="sig-prename descclassname"><span class="pre">=&lt;value&gt;</span></span><a class="headerlink" href="#cmdoption-arg-rz" title="Permalink to this definition">¶</a></dt>
<dd><p>Z-axis rotation in the 3D Helmert given in arc seconds.</p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-theta">
<span class="sig-name descname"><span class="pre">+theta</span></span><span class="sig-prename descclassname"><span class="pre">=&lt;value&gt;</span></span><a class="headerlink" href="#cmdoption-arg-theta" title="Permalink to this definition">¶</a></dt>
<dd><p>Rotation angle in the 2D Helmert given in arc seconds.</p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-dx">
<span class="sig-name descname"><span class="pre">+dx</span></span><span class="sig-prename descclassname"><span class="pre">=&lt;value&gt;</span></span><a class="headerlink" href="#cmdoption-arg-dx" title="Permalink to this definition">¶</a></dt>
<dd><p>Translation rate of the x-axis given in m/year.</p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-dy">
<span class="sig-name descname"><span class="pre">+dy</span></span><span class="sig-prename descclassname"><span class="pre">=&lt;value&gt;</span></span><a class="headerlink" href="#cmdoption-arg-dy" title="Permalink to this definition">¶</a></dt>
<dd><p>Translation rate of the y-axis given in m/year.</p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-dz">
<span class="sig-name descname"><span class="pre">+dz</span></span><span class="sig-prename descclassname"><span class="pre">=&lt;value&gt;</span></span><a class="headerlink" href="#cmdoption-arg-dz" title="Permalink to this definition">¶</a></dt>
<dd><p>Translation rate of the z-axis given in m/year.</p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-ds">
<span class="sig-name descname"><span class="pre">+ds</span></span><span class="sig-prename descclassname"><span class="pre">=&lt;value&gt;</span></span><a class="headerlink" href="#cmdoption-arg-ds" title="Permalink to this definition">¶</a></dt>
<dd><p>Scale rate factor given in ppm/year.</p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-drx">
<span class="sig-name descname"><span class="pre">+drx</span></span><span class="sig-prename descclassname"><span class="pre">=&lt;value&gt;</span></span><a class="headerlink" href="#cmdoption-arg-drx" title="Permalink to this definition">¶</a></dt>
<dd><p>Rotation rate of the x-axis given in arc seconds/year.</p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-dry">
<span class="sig-name descname"><span class="pre">+dry</span></span><span class="sig-prename descclassname"><span class="pre">=&lt;value&gt;</span></span><a class="headerlink" href="#cmdoption-arg-dry" title="Permalink to this definition">¶</a></dt>
<dd><p>Rotation rate of the y-axis given in arc seconds/year.</p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-drz">
<span class="sig-name descname"><span class="pre">+drz</span></span><span class="sig-prename descclassname"><span class="pre">=&lt;value&gt;</span></span><a class="headerlink" href="#cmdoption-arg-drz" title="Permalink to this definition">¶</a></dt>
<dd><p>Rotation rate of the y-axis given in arc seconds/year.</p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-t_epoch">
<span id="cmdoption-arg-t-epoch"></span><span class="sig-name descname"><span class="pre">+t_epoch</span></span><span class="sig-prename descclassname"><span class="pre">=&lt;value&gt;</span></span><a class="headerlink" href="#cmdoption-arg-t_epoch" title="Permalink to this definition">¶</a></dt>
<dd><p>Central epoch of transformation given in decimalyear. Only used
spatiotemporal transformations.</p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-exact">
<span class="sig-name descname"><span class="pre">+exact</span></span><span class="sig-prename descclassname"></span><a class="headerlink" href="#cmdoption-arg-exact" title="Permalink to this definition">¶</a></dt>
<dd><p>Use exact transformation equations.</p>
<p>See <a class="reference internal" href="#equation-rot-exact">(5)</a></p>
</dd></dl>

<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-arg-transpose">
<span class="sig-name descname"><span class="pre">+transpose</span></span><span class="sig-prename descclassname"></span><a class="headerlink" href="#cmdoption-arg-transpose" title="Permalink to this definition">¶</a></dt>
<dd><div class="deprecated">
<p><span class="versionmodified deprecated">Deprecated since version 5.2.0: </span>(removed)</p>
</div>
<p>Transpose rotation matrix and follow the <strong>Position Vector</strong> rotation
convention. If <a class="reference internal" href="#cmdoption-arg-transpose"><code class="xref std std-option docutils literal notranslate"><span class="pre">+transpose</span></code></a> is not added the <strong>Coordinate Frame</strong>
rotation convention is used.</p>
</dd></dl>

</section>
<section id="mathematical-description">
<h2>Mathematical description<a class="headerlink" href="#mathematical-description" title="Permalink to this headline">¶</a></h2>
<p>In the notation used below, <span class="math notranslate nohighlight">\(\hat{P}\)</span> is the rate of change of a given transformation
parameter <span class="math notranslate nohighlight">\(P\)</span>. <span class="math notranslate nohighlight">\(\dot{P}\)</span> is the kinematically adjusted version of <span class="math notranslate nohighlight">\(P\)</span>,
described by</p>
<div class="math notranslate nohighlight" id="equation-propagation">
<span class="eqno">(1)<a class="headerlink" href="#equation-propagation" title="Permalink to this equation">¶</a></span>\[\dot{P}= P + \hat{P}\left(t - t_{central}\right)\]</div>
<p>where <span class="math notranslate nohighlight">\(t\)</span> is the observation time of the coordinate and <span class="math notranslate nohighlight">\(t_{central}\)</span> is
the central epoch of the transformation. Equation <a class="reference internal" href="#equation-propagation">(1)</a> can be used to
propagate all transformation parameters in time.</p>
<p>Superscripts of vectors denote the reference frame the coordinates in the vector belong to.</p>
<section id="d-helmert">
<h3>2D Helmert<a class="headerlink" href="#d-helmert" title="Permalink to this headline">¶</a></h3>
<p>The simplest version of the Helmert transform is the 2D case. In the 2-dimensional
case only the horizontal coordinates are changed. The coordinates can be
translated, rotated and scale. Translation is controlled with the <cite>x</cite> and <cite>y</cite>
parameters. The rotation is determined by <cite>theta</cite> and the scale is controlled with
the <cite>s</cite> parameters.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The scaling parameter <cite>s</cite> is unitless for the 2D Helmert, as opposed to the
3D version where the scaling parameter is given in units of ppm.</p>
</div>
<p>Mathematically the 2D Helmert is described as:</p>
<div class="math notranslate nohighlight" id="equation-4param">
<span class="eqno">(2)<a class="headerlink" href="#equation-4param" title="Permalink to this equation">¶</a></span>\[\begin{split}\begin{align}
    \begin{bmatrix}
        X \\
        Y \\
    \end{bmatrix}^B =
    \begin{bmatrix}
        T_x \\
        T_y \\
    \end{bmatrix} +
    s
    \begin{bmatrix}
        \hphantom{-}\cos \theta &amp; \sin \theta \\
        -\sin \theta &amp; \cos \theta \\
    \end{bmatrix}
    \begin{bmatrix}
        X \\
        Y \\
    \end{bmatrix}^A
\end{align}\end{split}\]</div>
<p><a class="reference internal" href="#equation-4param">(2)</a> can be extended to a time-varying kinematic version by
adjusting the parameters with <a class="reference internal" href="#equation-propagation">(1)</a> to <a class="reference internal" href="#equation-4param">(2)</a>, which yields
the kinematic 2D Helmert transform:</p>
<div class="math notranslate nohighlight" id="equation-8param">
<span class="eqno">(3)<a class="headerlink" href="#equation-8param" title="Permalink to this equation">¶</a></span>\[\begin{split}\begin{align}
    \begin{bmatrix}
        X \\
        Y \\
    \end{bmatrix}^B =
    \begin{bmatrix}
        \dot{T_x} \\
        \dot{T_y} \\
    \end{bmatrix} +
    s(t)
    \begin{bmatrix}
         \hphantom{-}\cos \dot{\theta} &amp; \sin \dot{\theta}  \\
                    -\sin\ \dot{\theta} &amp; \cos \dot{\theta} \\
    \end{bmatrix}
    \begin{bmatrix}
        X \\
        Y \\
    \end{bmatrix}^A
\end{align}\end{split}\]</div>
<p>All parameters in <a class="reference internal" href="#equation-8param">(3)</a> are determined by the use of <a class="reference internal" href="#equation-propagation">(1)</a>,
which applies the rate of change to each individual parameter for a given
timespan between <span class="math notranslate nohighlight">\(t\)</span> and <span class="math notranslate nohighlight">\(t_{central}\)</span>.</p>
</section>
<section id="id1">
<h3>3D Helmert<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h3>
<p>The general form of the 3D Helmert is</p>
<div class="math notranslate nohighlight" id="equation-general-helmert">
<span class="eqno">(4)<a class="headerlink" href="#equation-general-helmert" title="Permalink to this equation">¶</a></span>\[\begin{align}
    V^B = T + \left(1 + s \times 10^{-6}\right) \mathbf{R} V^A
\end{align}\]</div>
<p>Where <span class="math notranslate nohighlight">\(T\)</span> is a vector consisting of the three translation parameters, <span class="math notranslate nohighlight">\(s\)</span>
is the scaling factor and <span class="math notranslate nohighlight">\(\mathbf{R}\)</span> is a rotation matrix. <span class="math notranslate nohighlight">\(V^A\)</span> and
<span class="math notranslate nohighlight">\(V^B\)</span> are coordinate vectors, with <span class="math notranslate nohighlight">\(V^A\)</span> being the input coordinate and
<span class="math notranslate nohighlight">\(V^B\)</span> is the output coordinate.</p>
<p>In the <em>Position Vector</em> convention, we define <span class="math notranslate nohighlight">\(R_x = radians \left( rx \right)\)</span>,
<span class="math notranslate nohighlight">\(R_z = radians \left( ry \right)\)</span> and <span class="math notranslate nohighlight">\(R_z = radians \left( rz \right)\)</span></p>
<p>In the <em>Coordinate Frame</em> convention, <span class="math notranslate nohighlight">\(R_x = - radians \left( rx \right)\)</span>,
<span class="math notranslate nohighlight">\(R_z = - radians \left( ry \right)\)</span> and <span class="math notranslate nohighlight">\(R_z = - radians \left( rz \right)\)</span></p>
<p>The rotation matrix is composed of three rotation matrices, one for each axis.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{align}
    \mathbf{R}_X &amp;= \begin{bmatrix} 1 &amp; 0 &amp; 0\\ 0 &amp; \cos R_x  &amp; -\sin R_x \\ 0 &amp; \sin R_x  &amp; \cos R_x  \end{bmatrix}
\end{align}\end{split}\]</div>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{align}
    \mathbf{R}_Y &amp;= \begin{bmatrix} \cos R_y &amp; 0 &amp; \sin R_y\\ 0 &amp; 1 &amp; 0\\ -\sin R_y &amp; 0 &amp; \cos R_y \end{bmatrix}
\end{align}\end{split}\]</div>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{align}
    \mathbf{R}_Z &amp;= \begin{bmatrix} \cos R_z  &amp; -\sin R_z  &amp; 0\\ \sin R_z  &amp; \cos R_z  &amp; 0\\ 0 &amp; 0 &amp; 1 \end{bmatrix}
\end{align}\end{split}\]</div>
<p>The three rotation matrices can be combined in one:</p>
<div class="math notranslate nohighlight">
\[\begin{align}
    \mathbf{R} = \mathbf{R_X} \mathbf{R_Y} \mathbf{R_Y}
\end{align}\]</div>
<p>For <span class="math notranslate nohighlight">\(\mathbf{R}\)</span>, this yields:</p>
<div class="math notranslate nohighlight" id="equation-rot-exact">
<span class="eqno">(5)<a class="headerlink" href="#equation-rot-exact" title="Permalink to this equation">¶</a></span>\[\begin{split}\begin{bmatrix}
  \cos R_y \cos R_z  &amp;  -\cos R_x  \sin R_z  +       &amp;   \sin R_x  \sin R_z  +   \\
                     &amp;  \sin R_x  \sin R_y \cos R_z  &amp;   \cos R_x  \sin R_y \cos R_z  \\
  \cos R_y\sin R_z   &amp;  \cos R_x  \cos R_z  +        &amp;  - \sin R_x  \cos R_z +  \\
                     &amp;  \sin R_x  \sin R_y \sin R_z  &amp;   \cos R_x  \sin R_y \sin R_z  \\
  -\sin R_y          &amp;  \sin R_x  \cos R_y            &amp;   \cos R_x  \cos R_y \\
 \end{bmatrix}\end{split}\]</div>
<p>Using the small angle approximation the rotation matrix can be simplified to</p>
<div class="math notranslate nohighlight" id="equation-rot-approx">
<span class="eqno">(6)<a class="headerlink" href="#equation-rot-approx" title="Permalink to this equation">¶</a></span>\[\begin{split}\begin{align} \mathbf{R} =
    \begin{bmatrix}
         1  &amp; -R_z  &amp;  R_y \\
         Rz &amp;  1    &amp; -R_x \\
        -Ry &amp;  R_x  &amp;  1   \\
    \end{bmatrix}
\end{align}\end{split}\]</div>
<p>Which allow us to express the most common version of the Helmert transform,
using the approximated rotation matrix:</p>
<div class="math notranslate nohighlight" id="equation-7param">
<span class="eqno">(7)<a class="headerlink" href="#equation-7param" title="Permalink to this equation">¶</a></span>\[\begin{split}\begin{align}
    \begin{bmatrix}
        X \\
        Y \\
        Z \\
    \end{bmatrix}^B =
    \begin{bmatrix}
        T_x \\
        T_y \\
        T_z \\
    \end{bmatrix} +
    \left(1 + s \times 10^{-6}\right)
    \begin{bmatrix}
         1  &amp; -R_z  &amp;  R_y \\
         Rz &amp;  1    &amp; -R_x \\
        -Ry &amp;  R_x  &amp;  1   \\
    \end{bmatrix}
    \begin{bmatrix}
        X \\
        Y \\
        Z \\
    \end{bmatrix}^A
\end{align}\end{split}\]</div>
<p>If the rotation matrix is transposed, or the sign of the rotation terms negated,
the rotational part of the transformation is effectively reversed.
This is what happens when switching between the 2 conventions <code class="docutils literal notranslate"><span class="pre">position_vector</span></code>
and <code class="docutils literal notranslate"><span class="pre">coordinate_frame</span></code></p>
<p>Applying <a class="reference internal" href="#equation-propagation">(1)</a> we get the kinematic version of the approximated
3D Helmert:</p>
<div class="math notranslate nohighlight" id="equation-14param">
<span class="eqno">(8)<a class="headerlink" href="#equation-14param" title="Permalink to this equation">¶</a></span>\[\begin{split}\begin{align}
    \begin{bmatrix}
        X \\
        Y \\
        Z \\
    \end{bmatrix}^B =
    \begin{bmatrix}
        \dot{T_x} \\
        \dot{T_y} \\
        \dot{T_z} \\
    \end{bmatrix} +
    \left(1 + \dot{s} \times 10^{-6}\right)
    \begin{bmatrix}
         1         &amp; -\dot{R_z}  &amp;  \dot{R_y} \\
         \dot{R_z} &amp;  1          &amp; -\dot{R_x} \\
        -\dot{R_y} &amp;  \dot{R_x}  &amp;  1      \\
    \end{bmatrix}
    \begin{bmatrix}
        X \\
        Y \\
        Z \\
    \end{bmatrix}^A
\end{align}\end{split}\]</div>
<p>The Helmert transformation can be applied without using the rotation parameters,
in which case it becomes a simple translation of the origin of the coordinate
system. When using the Helmert in this version equation <a class="reference internal" href="#equation-general-helmert">(4)</a>
simplifies to:</p>
<div class="math notranslate nohighlight" id="equation-3param">
<span class="eqno">(9)<a class="headerlink" href="#equation-3param" title="Permalink to this equation">¶</a></span>\[\begin{split}\begin{align}
    \begin{bmatrix}
        X \\
        Y \\
        Z \\
    \end{bmatrix}^B =
    \begin{bmatrix}
        T_x \\
        T_y \\
        T_z \\
    \end{bmatrix} +
    \begin{bmatrix}
        X \\
        Y \\
        Z \\
    \end{bmatrix}^A
\end{align}\end{split}\]</div>
<p>That after application of <a class="reference internal" href="#equation-propagation">(1)</a> has the following kinematic
counterpart:</p>
<div class="math notranslate nohighlight" id="equation-6param">
<span class="eqno">(10)<a class="headerlink" href="#equation-6param" title="Permalink to this equation">¶</a></span>\[\begin{split}\begin{align}
    \begin{bmatrix}
        X \\
        Y \\
        Z \\
    \end{bmatrix}^B =
    \begin{bmatrix}
        \dot{T_x} \\
        \dot{T_y} \\
        \dot{T_z} \\
    \end{bmatrix} +
    \begin{bmatrix}
        X \\
        Y \\
        Z \\
    \end{bmatrix}^A
\end{align}\end{split}\]</div>
</section>
</section>
</section>


           </div>
          </div>
          <footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
        <a href="geogoffset.html" class="btn btn-neutral float-left" title="Geographic offsets" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
        <a href="horner.html" class="btn btn-neutral float-right" title="Horner polynomial evaluation" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
    </div>

  <hr/>

  <div role="contentinfo">
    <p>&#169; Copyright 1983-2022.
      <span class="lastupdated">Last updated on 22 Mar 2022.
      </span></p>
  </div>

  Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
    <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
    provided by <a href="https://readthedocs.org">Read the Docs</a>.
   

</footer>
        </div>
      </div>
    </section>
  </div>
  <script>
      jQuery(function () {
          SphinxRtdTheme.Navigation.enable(true);
      });
  </script> 

</body>
</html>