<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.gis-lab.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ArmRus</id>
	<title>GIS-Lab - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.gis-lab.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ArmRus"/>
	<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/w/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/ArmRus"/>
	<updated>2026-04-05T20:51:59Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9A%D0%BE%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=26515</id>
		<title>Конформное преобразование</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9A%D0%BE%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=26515"/>
		<updated>2020-03-22T13:57:07Z</updated>

		<summary type="html">&lt;p&gt;ArmRus: опечатка названия столбца расчетов&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Опубликована|helmert2d}}&lt;br /&gt;
&lt;br /&gt;
{{Аннотация|Конформное преобразование на плоскости широко используется в геодезии при создании местных координатных систем на небольшие территории, ограниченные размерами населённого пункта.}}&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
&lt;br /&gt;
Следующие формулы связывают координаты точек ''x'', ''y'', заданные в местной системе координат (МСК), и координаты ''X'', ''Y'', заданные в государственной системе координат (ГСК):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
X &amp;amp; = X_0 + m \big[ (x - x_0) \cos \theta - (y - y_0) \sin \theta \big] \\&lt;br /&gt;
Y &amp;amp; = Y_0 + m \big[ (x - x_0) \sin \theta + (y - y_0) \cos \theta \big]&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где ''m'' — масштабный множитель, ''θ'' — угол разворота, ''X''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, ''Y''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, ''x''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, ''y''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; — координаты одного из геодезических пунктов в ГСК и МСК, как правило. Этот набор параметров называется «ключ».&lt;br /&gt;
&lt;br /&gt;
Исходный материал для определения ключа — пары координат пунктов геодезической сети, полученные из независимого уравнивания одних и тех же измерений в МСК и в ГСК&amp;lt;ref&amp;gt;ГКИНП (ОНТА)-01-271-03 Руководство по созданию и реконструкции городских геодезических сетей с использованием спутниковых систем ГЛОНАСС/GPS.&amp;lt;/ref&amp;gt;. В зависимости от класса пунктам (вернее, соответствующим парам уравнений) назначаются веса ''p''.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм нахождения параметров ==&lt;br /&gt;
&lt;br /&gt;
Конформное преобразование представляется следующей математической моделью:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
X' &amp;amp; = a_0 + a_1 x - b_1 y \\&lt;br /&gt;
Y' &amp;amp; = b_0 + b_1 x + a_1 y&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Определению подлежат четыре параметра: ''a''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, ''b''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, ''a''&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;, ''b''&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,.&lt;br /&gt;
&lt;br /&gt;
Очевидно, конформное преобразование является частным случаем аффинного.&lt;br /&gt;
&lt;br /&gt;
=== Шаг 1: вычисление взвешенных средних ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
x_c = \frac{\sum\limits_{i=1}^n p_i x_i}{\sum\limits_{i=1}^n p_i} \quad&lt;br /&gt;
y_c = \frac{\sum\limits_{i=1}^n p_i y_i}{\sum\limits_{i=1}^n p_i} \quad&lt;br /&gt;
X_c = \frac{\sum\limits_{i=1}^n p_i X_i}{\sum\limits_{i=1}^n p_i} \quad&lt;br /&gt;
Y_c = \frac{\sum\limits_{i=1}^n p_i Y_i}{\sum\limits_{i=1}^n p_i}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Шаг 2: перенос осей в центр масс ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Delta x_i = x_i - x_c \quad&lt;br /&gt;
\Delta y_i = y_i - y_c \quad&lt;br /&gt;
\Delta X_i = X_i - X_c \quad&lt;br /&gt;
\Delta Y_i = Y_i - Y_c&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Шаг 3: вычисление ''a''&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; и ''b''&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;16&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;S_1 = \sum\limits_{i=1}^n p_i \Delta X_i \Delta x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;S_2 = \sum\limits_{i=1}^n p_i \Delta Y_i \Delta y_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;S_3 = \sum\limits_{i=1}^n p_i \Delta Y_i \Delta x_i&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;S_4 = \sum\limits_{i=1}^n p_i \Delta X_i \Delta y_i&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;lt;math&amp;gt;S_5 = \sum\limits_{i=1}^n p_i \left( \Delta x_i^2 + \Delta y_i^2 \right)&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;math&amp;gt;a_1 = \frac{S_1 + S_2}{S_5}&amp;lt;/math&amp;gt;&lt;br /&gt;
| &amp;lt;math&amp;gt;b_1 = \frac{S_3 - S_4}{S_5}&amp;lt;/math&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Шаг 4: вычисление ''a''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; и ''b''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
a_0 &amp;amp; = X_c - a_1 x_c + b_1 y_c \\&lt;br /&gt;
b_0 &amp;amp; = Y_c - b_1 x_c - a_1 y_c&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Шаг 5: вычисление невязок ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
v_{xi} = X_i - X_i' \quad&lt;br /&gt;
v_{yi} = Y_i - Y_i'&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Невязки позволяют выявить точки, плохо укладывающиеся в полученную модель. Классическая процедура удаляет такие «отлетающие» точки, после чего вычисление параметров повторяется без них. Робастные процедуры переназначают веса уравнениям в соответствии с невязками, и повторное вычисление повторяется с полным набором точек при том, что «отлетающие» влияют на результат незначительно.&lt;br /&gt;
&lt;br /&gt;
Кроме того, невязки необходимы для оценки точности измерений и результатов.&lt;br /&gt;
&lt;br /&gt;
=== Шаг 6: вычисление ключа ===&lt;br /&gt;
&lt;br /&gt;
Вычислим масштабный множитель и угол разворота:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
m = \sqrt{a_1^2 + b_1^2} \qquad&lt;br /&gt;
\theta =  \operatorname{arc\,tg} \frac{b_1}{a_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выберем ''j''-й пункт с малыми невязками по возможности в середине массива точек. Его координаты в обеих системах ''X&amp;lt;sub&amp;gt;j&amp;lt;/sub&amp;gt;'', ''Y&amp;lt;sub&amp;gt;j&amp;lt;/sub&amp;gt;'', ''x&amp;lt;sub&amp;gt;j&amp;lt;/sub&amp;gt;'', ''y&amp;lt;sub&amp;gt;j&amp;lt;/sub&amp;gt;'' становятся параметрами ''X''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, ''Y''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, ''x''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;, ''y''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Пример вычисления параметров ==&lt;br /&gt;
&lt;br /&gt;
Даны координаты четырёх пунктов ''x'', ''y'' в исходной системе, ''X'', ''Y'' в конечной системе с весами ''p'':&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ''i'' !! ''x&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' !! ''y&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' !! ''X&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' !! ''Y&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' !! ''p&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;''&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 1 || 1334.71 || 285.94 || 83477.64 || 87377.60 || 1.0&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 2 || 563.67 || −5197.34 || 82557.14 || 81916.51 || 1.0&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 3 || 4444.27 || 1153.79 || 86610.19 || 88160.39 || 1.0&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 4 || −252.07 || 2881.90 || 81962.05 || 90016.34 || 1.0&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; | ∑''p'' = || 4.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ''i''&lt;br /&gt;
! ''p&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;x&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;''&lt;br /&gt;
! ''p&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;y&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;''&lt;br /&gt;
! ''p&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;X&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;''&lt;br /&gt;
! ''p&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;Y&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;''&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 1 || 1334.71 || 285.94 || 83477.64 || 87377.60&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 2 || 563.67 || −5197.34 || 82557.14 || 81916.51&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 3 || 4444.27 || 1153.79 || 86610.19 || 88160.39&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 4 || −252.07 || 2881.90 || 81962.05 || 90016.34&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| ∑ = || 6090.58 || −875.71 || 334607.02 || 347470.84&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Взвешенные средние:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ''x&amp;lt;sub&amp;gt;c&amp;lt;/sub&amp;gt;'' !! ''y&amp;lt;sub&amp;gt;c&amp;lt;/sub&amp;gt;'' !! ''X&amp;lt;sub&amp;gt;c&amp;lt;/sub&amp;gt;'' !! ''Y&amp;lt;sub&amp;gt;c&amp;lt;/sub&amp;gt;''&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 1522.645 || −218.9275 || 83651.755 || 86867.71&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Перенос осей в центр масс:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ''i'' !! ∆''x&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' !! ∆''y&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' !! ∆''X&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' !! ∆''Y&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;''&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 1 || −187.935 || 504.8675 || −174.115 || 509.89&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 2 || −958.975 || −4978.4125 || −1094.615 || −4951.20&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 3 || 2921.625 || 1372.7175 || 2958.435 || 1292.68&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 4 || −1774.715 || 3100.8275 || −1689.705 || 3148.63&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ''i''&lt;br /&gt;
! ''p&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' ∆''x&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' ∆''X&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;''&lt;br /&gt;
! ''p&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' ∆''y&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' ∆''Y&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;''&lt;br /&gt;
! ''p&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' ∆''x&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' ∆''Y&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;''&lt;br /&gt;
! ''p&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' ∆''y&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' ∆''X&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;''&lt;br /&gt;
! ''p&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' (∆''x&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;''&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + ∆''y&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;''&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;)&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 1 || 32722.3 || 257426.9 || −95826.2 || −87905.0 || 290210.8&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 2 || 1049708.4 || 24649116.0 || 4748077.0 || 5449445.0 || 25704224.1&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 3 || 8643437.7 || 1774484.5 || 3776726.2 || 4061095.5 || 10420246.0&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 4 || 2998744.8 || 9763358.5 || −5587920.9 || −5239483.7 || 12764744.5&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| ∑ = || 12724613.2 || 36444385.8 || 2841056.2 || 4183151.8 || 49179425.3&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;nbsp; !! ''S''&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; !! ''S''&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; !! ''S''&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; !! ''S''&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt; !! ''S''&amp;lt;sub&amp;gt;5&amp;lt;/sub&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Параметры конформного преобразования:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float:left&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ''a''&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; !! ''b''&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 0.99978799 || −0.02728978&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float:right&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ''a''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; !! ''b''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 82135.407 || 87128.144&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Невязки:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ''i'' !! ''v&amp;lt;sub&amp;gt;xi&amp;lt;/sub&amp;gt;'' !! ''v&amp;lt;sub&amp;gt;yi&amp;lt;/sub&amp;gt;''&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 1 || 0.002 || 0.001&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 2 || 0.016 || −0.013&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 3 || −0.032 || −0.016&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 4 || 0.013 || 0.028&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Масштаб и разворот:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ''m'' !! ''θ''&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 1.00016037 || −1°33′48.72″&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Сконструируем ключ на основе первого геодезического пункта:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ''X''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; !! ''Y''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; !! ''x''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; !! ''y''&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; !! ''m'' !! ''θ''&lt;br /&gt;
|- align=&amp;quot;right&amp;quot;&lt;br /&gt;
| 83477.64 || 87377.60 || 1334.71 || 285.94 || 1.00016037 || −1°33′48.72″&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Пример программной реализации ==&lt;br /&gt;
&lt;br /&gt;
Вот листинг простой утилиты на языке C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
  char buf[1024], name[32];&lt;br /&gt;
  double x[2], y[2], wgt;&lt;br /&gt;
  double xc[2], yc[2];&lt;br /&gt;
  double dx[2], dy[2], dz[2];&lt;br /&gt;
  double a[2][2], scale, rotation;&lt;br /&gt;
  double s[5];&lt;br /&gt;
  int i;&lt;br /&gt;
  FILE *fp0, *fp1;&lt;br /&gt;
&lt;br /&gt;
  if (argc &amp;lt; 4) {&lt;br /&gt;
    printf(&amp;quot;usage: findkey input-file key-file var-file\n&amp;quot;);&lt;br /&gt;
    exit(EXIT_FAILURE);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ((fp0 = fopen(argv[1], &amp;quot;r&amp;quot;)) == NULL) {&lt;br /&gt;
    printf(&amp;quot;can't open %s\n&amp;quot;, argv[1]);&lt;br /&gt;
    exit(EXIT_FAILURE);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* подсчитать сумму координат */&lt;br /&gt;
  for (i = 0; i &amp;lt; 5; i++)&lt;br /&gt;
    s[i] = 0.;&lt;br /&gt;
  while (fgets(buf, 1024, fp0) != NULL) {&lt;br /&gt;
    sscanf(buf, &amp;quot;%s %lf %lf %lf %lf %lf&amp;quot;,&lt;br /&gt;
	   name, &amp;amp;x[0], &amp;amp;x[1], &amp;amp;y[0], &amp;amp;y[1], &amp;amp;wgt);&lt;br /&gt;
    s[0] += x[0] * wgt;&lt;br /&gt;
    s[1] += x[1] * wgt;&lt;br /&gt;
    s[2] += y[0] * wgt;&lt;br /&gt;
    s[3] += y[1] * wgt;&lt;br /&gt;
    s[4] += wgt;&lt;br /&gt;
  }&lt;br /&gt;
  rewind(fp0);&lt;br /&gt;
&lt;br /&gt;
  /* найти центр масс */&lt;br /&gt;
  for (i = 0; i &amp;lt; 2; i++) {&lt;br /&gt;
    xc[i] = s[i] / s[4];&lt;br /&gt;
    yc[i] = s[2 + i] / s[4];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* подсчитать сумму произведений */&lt;br /&gt;
  for (i = 0; i &amp;lt; 5; i++)&lt;br /&gt;
    s[i] = 0.;&lt;br /&gt;
  while (fgets(buf, 1024, fp0) != NULL) {&lt;br /&gt;
    sscanf(buf, &amp;quot;%s %lf %lf %lf %lf %lf&amp;quot;,&lt;br /&gt;
	   name, &amp;amp;x[0], &amp;amp;x[1], &amp;amp;y[0], &amp;amp;y[1], &amp;amp;wgt);&lt;br /&gt;
    /* вычислить разности */&lt;br /&gt;
    dx[0] = x[0] - xc[0];&lt;br /&gt;
    dx[1] = x[1] - xc[1];&lt;br /&gt;
    dy[0] = y[0] - yc[0];&lt;br /&gt;
    dy[1] = y[1] - yc[1];&lt;br /&gt;
    /* суммировать */&lt;br /&gt;
    s[0] += dx[0] * dy[0] * wgt;&lt;br /&gt;
    s[1] += dx[1] * dy[1] * wgt;&lt;br /&gt;
    s[2] += dx[0] * dy[1] * wgt;&lt;br /&gt;
    s[3] += dx[1] * dy[0] * wgt;&lt;br /&gt;
    s[4] += (dx[0] * dx[0] + dx[1] * dx[1]) * wgt;&lt;br /&gt;
  }&lt;br /&gt;
  rewind(fp0);&lt;br /&gt;
&lt;br /&gt;
  /* найти первичные параметры */&lt;br /&gt;
  a[1][0] = (s[0] + s[1]) / s[4];&lt;br /&gt;
  a[1][1] = (s[2] - s[3]) / s[4];&lt;br /&gt;
  a[0][0] = yc[0] - a[1][0] * xc[0] + a[1][1] * xc[1];&lt;br /&gt;
  a[0][1] = yc[1] - a[1][1] * xc[0] - a[1][0] * xc[1];&lt;br /&gt;
&lt;br /&gt;
  /* найти вторичные параметры */&lt;br /&gt;
  scale = hypot(a[1][0], a[1][1]);&lt;br /&gt;
  rotation = atan2(a[1][1], a[1][0]);&lt;br /&gt;
&lt;br /&gt;
  /* вывести параметры в файл ключа */&lt;br /&gt;
  if ((fp1 = fopen(argv[2], &amp;quot;w&amp;quot;)) == NULL) {&lt;br /&gt;
    printf(&amp;quot;can't create %s\n&amp;quot;, argv[2]);&lt;br /&gt;
    exit(EXIT_FAILURE);&lt;br /&gt;
  }&lt;br /&gt;
  fprintf(fp1, &amp;quot;%.3f\n&amp;quot;, a[0][0]);&lt;br /&gt;
  fprintf(fp1, &amp;quot;%.3f\n&amp;quot;, a[0][1]);&lt;br /&gt;
  fprintf(fp1, &amp;quot;%.12f\n&amp;quot;, a[1][0]);&lt;br /&gt;
  fprintf(fp1, &amp;quot;%.12f\n&amp;quot;, a[1][1]);&lt;br /&gt;
  fprintf(fp1, &amp;quot;%.12f\n&amp;quot;, scale);&lt;br /&gt;
  fprintf(fp1, &amp;quot;%+.10f\n&amp;quot;, rotation * 180. / M_PI);&lt;br /&gt;
  fclose(fp1);&lt;br /&gt;
&lt;br /&gt;
  /* вывести данные вместе с невязками */&lt;br /&gt;
  if ((fp1 = fopen(argv[3], &amp;quot;w&amp;quot;)) == NULL) {&lt;br /&gt;
    printf(&amp;quot;can't create %s\n&amp;quot;, argv[3]);&lt;br /&gt;
    exit(EXIT_FAILURE);&lt;br /&gt;
  }&lt;br /&gt;
  while (fgets(buf, 1024, fp0) != NULL) {&lt;br /&gt;
    sscanf(buf, &amp;quot;%s %lf %lf %lf %lf %lf&amp;quot;,&lt;br /&gt;
	   name, &amp;amp;x[0], &amp;amp;x[1], &amp;amp;y[0], &amp;amp;y[1], &amp;amp;wgt);&lt;br /&gt;
    /* &amp;quot;наблюдённые&amp;quot; dx[], dy[] */&lt;br /&gt;
    dx[0] = x[0] - xc[0];&lt;br /&gt;
    dx[1] = x[1] - xc[1];&lt;br /&gt;
    dy[0] = y[0] - yc[0];&lt;br /&gt;
    dy[1] = y[1] - yc[1];&lt;br /&gt;
    /* &amp;quot;вычисленные&amp;quot; dy[] */&lt;br /&gt;
    dz[0] = a[1][0] * dx[0] - a[1][1] * dx[1];&lt;br /&gt;
    dz[1] = a[1][1] * dx[0] + a[1][0] * dx[1];&lt;br /&gt;
    fprintf(fp1, &amp;quot;%s %.3f %.3f %.3f %.3f %g %.3f %.3f\n&amp;quot;,&lt;br /&gt;
	    name, x[0], x[1], y[0], y[1], wgt, dy[0] - dz[0], dy[1] - dz[1]);&lt;br /&gt;
  }&lt;br /&gt;
  fclose(fp1);&lt;br /&gt;
&lt;br /&gt;
  fclose(fp0);&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сохраним код в файл '''findkey.c'''. Исполняемый модуль можно создать, например, компилятором '''gcc''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ gcc -o findkey findkey.c -lm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для MS Windows можно загрузить уже скомпилированную [http://gis-lab.info/other/findkey.zip программу].&lt;br /&gt;
&lt;br /&gt;
Утилита '''findkey''' запускается в командной строке с именами трёх файлов в качестве аргументов: входной файл данных, выходные файл параметров и файл невязок.&lt;br /&gt;
&lt;br /&gt;
Подготовим файл данных '''data.dat''', структура которого соответствует таблице исходных данных, т.&amp;amp;nbsp;е. содержит в колонках названия пунктов, входные координаты ''x'', ''y'', выходные координаты ''X'', ''Y'', веса:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 1334.71   285.94 83477.64 87377.60 1.0&lt;br /&gt;
2  563.67 -5197.34 82557.14 81916.51 1.0&lt;br /&gt;
3 4444.27  1153.79 86610.19 88160.39 1.0&lt;br /&gt;
4 -252.07  2881.90 81962.05 90016.34 1.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска программы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ findkey data.dat key.dat var.dat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
получим параметры '''key.dat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
82135.407&lt;br /&gt;
87128.144&lt;br /&gt;
0.9997879942&lt;br /&gt;
-0.0272897781&lt;br /&gt;
1.0001603698&lt;br /&gt;
-1.56353244&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и невязки '''var.dat'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1 1334.710 285.940 83477.640 87377.600 1 0.002 0.001&lt;br /&gt;
2 563.670 -5197.340 82557.140 81916.510 1 0.016 -0.013&lt;br /&gt;
3 4444.270 1153.790 86610.190 88160.390 1 -0.032 -0.016&lt;br /&gt;
4 -252.070 2881.900 81962.050 90016.340 1 0.013 0.028&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Заключение ==&lt;br /&gt;
&lt;br /&gt;
Положенные в основу статьи формулы называются в учебниках геодезии «неполными» в противоположность «полным». Дело в том, что при большом удалении объекта от осевого меридиана исходной проекции Гаусса-Крюгера возникает значительный градиент масштаба изображения в направлении запад-восток. Чтобы компенсировать возникающие при этом специфические искажения конформного отображения, в «полные» выражения добавляют необходимые члены разложений формул проекций. Разумеется, такой подход несовершенен, как любые ограниченные разложения. В статье [http://gis-lab.info/qa/local-cs.html Добавление местной координатной системы в GIS] в качестве альтернативы предлагается переход от ГСК к проекции с нулевым градиентом масштаба в центре объекта или вблизи него, что делает «полные» формулы ненужными.&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.google.ru/url?q=http://communities.bentley.com/products/geospatial/desktop/m/geospatial_desktop_gallery/206218/download.aspx&amp;amp;sa=U&amp;amp;ei=YG47UdKNPOeG4gT92oD4Ag&amp;amp;ved=0CDgQFjAJ&amp;amp;usg=AFQjCNFbjYGDGtp3cTXaKerd9LuE8l9_zQ Convert Local Coordinate Systems to Standard Coordinate Systems, McCoy J., 2012]&lt;br /&gt;
* [http://user.gs.rmit.edu.au/rod/files/publications/COTRAN_1.pdf Coordinate transformations in surveying and mapping, Deakin R.E., 2004]&lt;br /&gt;
* [http://kartoweb.itc.nl/geometrics/coordinate%20transformations/coordtrans.html Coordinate transformations, Knippers R., 2009]&lt;br /&gt;
* [http://gis-lab.info/qa/affine-math.html Аффинные преобразования - математика]&lt;br /&gt;
* [http://gis-lab.info/qa/local-cs.html Добавление местной координатной системы в GIS]&lt;br /&gt;
* [http://gis-lab.info/qa/polynom.html Полиномиальные преобразования]&lt;br /&gt;
* [http://gis-lab.info/qa/polynom-calc-examples.html Полиномиальные преобразования - примеры реализации]&lt;br /&gt;
* [http://gis-lab.info/qa/rmse.html Среднеквадратичная ошибка (RMSE)]&lt;/div&gt;</summary>
		<author><name>ArmRus</name></author>
	</entry>
</feed>