<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.gis-lab.info/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D1%85_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%85%D0%B0%D1%80%D0%B0%D0%BA%D1%82%D0%B5%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BA_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%B2_ArcGIS</id>
	<title>Получение основных пространственных характеристик объектов в ArcGIS - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.gis-lab.info/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D1%85_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%85%D0%B0%D1%80%D0%B0%D0%BA%D1%82%D0%B5%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BA_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%B2_ArcGIS"/>
	<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D1%85_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%85%D0%B0%D1%80%D0%B0%D0%BA%D1%82%D0%B5%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BA_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%B2_ArcGIS&amp;action=history"/>
	<updated>2026-04-04T05:19:12Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D1%85_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%85%D0%B0%D1%80%D0%B0%D0%BA%D1%82%D0%B5%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BA_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%B2_ArcGIS&amp;diff=7418&amp;oldid=prev</id>
		<title>Amuriy: Новая страница: «{{Статья|Опубликована|shapecalc-ag}} {{Аннотация|Расчеты координат, длин, площадей в таблицу чер…»</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D1%85_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D1%85%D0%B0%D1%80%D0%B0%D0%BA%D1%82%D0%B5%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BA_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2_%D0%B2_ArcGIS&amp;diff=7418&amp;oldid=prev"/>
		<updated>2012-08-17T09:13:56Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «{{Статья|Опубликована|shapecalc-ag}} {{Аннотация|Расчеты координат, длин, площадей в таблицу чер…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Статья|Опубликована|shapecalc-ag}}&lt;br /&gt;
{{Аннотация|Расчеты координат, длин, площадей в таблицу через VBA}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В статье рассматривается получение нескольких основных пространственных характеристик объектов '''без использования''' дополнительных расширений (extensions), с использованием стандартных возможностей пакета ArcGIS.&lt;br /&gt;
&lt;br /&gt;
Примечание: Рассмотренные в статье возможности начиная с версии 9.2 также доступны через меню Calculate geometry.&lt;br /&gt;
&lt;br /&gt;
В данной статье рассматриваются следующие типы объектов и соответствующие им пространственные характеристики:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
Тип объекта&lt;br /&gt;
|&lt;br /&gt;
Пространственная характеристика&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
Точка&lt;br /&gt;
|&lt;br /&gt;
Координата X&amp;lt;br /&amp;gt; Координата Y&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;center&amp;gt;[[#3. Точечный объект:|перейти]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
Линия&lt;br /&gt;
|&lt;br /&gt;
Длина&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;center&amp;gt;[[#2. Линейный объект:|перейти]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
Полигон&lt;br /&gt;
|&lt;br /&gt;
Длина (периметр)&amp;lt;br /&amp;gt; Площадь&amp;lt;br /&amp;gt; Центроид&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;center&amp;gt;[[#1. Полигональный объект|перейти]]&amp;lt;/center&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Те, кто пользовался или пользуется Mapinfo могут с недоумением отметить отсутствие в Arcview метода быстрого просмотра площади объекта или координат точки. Посмотреть основные пространственные характеристики объекта просто выбрав его в Arcview, ArcGIS в отличие от Mapinfo невозможно. Однако, несмотря на кажующееся неудобство, в этом есть своя логика.&lt;br /&gt;
&lt;br /&gt;
Дело в том, что визуальная оценка параметров объекта, является, по большому счету, довольно бессмысленной задачей. Более оптимально было бы заносить пространственные характеристики объектов непосредственно в атрибутивную таблицу. При желании можно также организовать постоянный мониторинг (обновление) пространственных характеристик объектов, так, как это делает, например, Arcinfo Workstation при работе со своим форматом. Это имеет смысл если вы выполняете серию пространственных операций изменяющих пространственные характеристики объектов и вам нужно следить за их изменениями.&lt;br /&gt;
&lt;br /&gt;
Пространственные характеристики объетов о которых идет речь - неотъемлимая часть их геометрии. В Arcview, ArcGIS получить геометрию объекта можно через специальное поле в таблице - Shape.&lt;br /&gt;
&lt;br /&gt;
При расчете пространственной характеристики важно помнить, что единицы измерения, по умолчанию, будут соответствовать исходным единицам измерения ваших данных. То есть:&lt;br /&gt;
&lt;br /&gt;
* Если данные находятся в географической системе координат, то независимо от того, спроектирован вид или нет, получаемые значения площадей и т.д., по умолчанию, будут в десятичных градусах (что приемлемо для координат точек, но не приемлемо для длин и площадей).&lt;br /&gt;
* Если данные находятся в неизвестной системе координат и единицы измерения также неизвестны, то расчеты все равно могут быть произведены, однако единицы измерения также останутся неизвестными.&lt;br /&gt;
&lt;br /&gt;
Ниже будет продемонстрировано, как, используя набор данных в географической системе координат, находящихся в спроектированном виде, можно получить в атрибутивной таблице пространственные характеристики объектов в спроектированной системе координат (т.е. с учетом проекции вида). При таких вычислениях необходимо помнить, в какой системе координат находился вид при расчете пространственных характеристик.&lt;br /&gt;
&lt;br /&gt;
Итак, для занесения пространственной характеристики объекта (объектов), необходимо:&lt;br /&gt;
&lt;br /&gt;
1. Открыть таблицу нажав правой кнопкой на нужном слое, пространственные характеристики объектов которого нужно получить. Выбрать '''Open Attribute Table '''&lt;br /&gt;
&lt;br /&gt;
2. Создать в ней поле(поля) нужного формата: целочисленного или с плавающей точкой (в зависимости от типа пространственной характеристики). '''Options\Add Field...'''&lt;br /&gt;
&lt;br /&gt;
3. Вызвать инструмент ввода значений всем записям в таблице щелкнув правой кнопкой мыши на заголовке поля и выбрав '''Calculate Values...'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:shapecalc-04.gif]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. В окне Field Calculator включить режим Advanced (Расширенный)&lt;br /&gt;
&lt;br /&gt;
5. В появившейся области Pre-logic VBA Script Code ввести выражение-команду, которая обратится за пространственными характеристиками объекта к полю '''shape''', содержащему геометрию объекта.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:shapecalc-05.gif]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===1. Полигональный объект===&lt;br /&gt;
&lt;br /&gt;
'''Площадь (Area)'''&lt;br /&gt;
&lt;br /&gt;
Выражение для получения данных в системе координат и единицах измерения самой темы. Данные как и вид могут в любой системе координат, получаемый результат НЕ будет зависеть от проекции вида:&lt;br /&gt;
&lt;br /&gt;
 Dim Output as double&lt;br /&gt;
 Dim pArea as IArea&lt;br /&gt;
 Set pArea = [shape]&lt;br /&gt;
 Output = pArea.area&lt;br /&gt;
&lt;br /&gt;
Повторимся, что этот запрос неудобно использовать при работе со спроектированными видами, так как он (запрос) будет возвращать площадь, не учитывая проекцию вида (см. статью &amp;quot;[http://gis-lab.info/qa/areacalc.html Вычисление площади]&amp;quot;). Однако если вы работаете с вектором уже находящимся в проекции, то это самый быстрый способ расчитать площади для полигонов.&lt;br /&gt;
&lt;br /&gt;
Для получения значения в метрах используя спроектированные на лету данные, исходно находящиеся в географической системе координат, необходимо модифицировать выражение следующим образом:&lt;br /&gt;
&lt;br /&gt;
 Dim pMxDoc As IMxDocument&lt;br /&gt;
 Set pMxDoc = ThisDocument&lt;br /&gt;
 Dim pMap As IMap&lt;br /&gt;
 Set pMap = pMxDoc.FocusMap&lt;br /&gt;
 Dim pSR As ISpatialReference&lt;br /&gt;
 Set pSR = pMap.SpatialReference&lt;br /&gt;
 Dim pPolygon As IPolygon&lt;br /&gt;
 Dim pArea as IArea&lt;br /&gt;
 Set pPolygon = [Shape]&lt;br /&gt;
 pPolygon.Project pSR&lt;br /&gt;
 Set pArea = pPolygon&lt;br /&gt;
 Output = pArea.area&lt;br /&gt;
&lt;br /&gt;
В последней области ввода, в заголовке которой значится &amp;quot;'''area =&amp;quot; '''ввести '''output'''&lt;br /&gt;
&lt;br /&gt;
где Area - название поля, где будет размещен результат вычисления (название поля может быть любым).&lt;br /&gt;
&lt;br /&gt;
'''Периметр'''&lt;br /&gt;
&lt;br /&gt;
Выражение для получения данных в системе координат и единицах измерения самой темы. Данные как и вид могут в любой системе координат, получаемый результат НЕ будет зависеть от проекции вида:&lt;br /&gt;
&lt;br /&gt;
 Dim Output as double&lt;br /&gt;
 Dim pCurve as ICurve&lt;br /&gt;
 Set pCurve = [shape]&lt;br /&gt;
 Output = pCurve.Length&lt;br /&gt;
&lt;br /&gt;
Выражение для спроектированного вида (данные в географической системе координат, проекция вида - установлена):&lt;br /&gt;
&lt;br /&gt;
 Dim pMxDoc As IMxDocument&lt;br /&gt;
 Set pMxDoc = ThisDocument&lt;br /&gt;
 Dim pMap As IMap&lt;br /&gt;
 Set pMap = pMxDoc.FocusMap&lt;br /&gt;
 Dim pSR As ISpatialReference&lt;br /&gt;
 Set pSR = pMap.SpatialReference&lt;br /&gt;
 Dim pCurve As ICurve&lt;br /&gt;
 Set pCurve = [Shape]&lt;br /&gt;
 pCurve.Project pSR&lt;br /&gt;
 Output = pCurve.Length&lt;br /&gt;
&lt;br /&gt;
В последней области ввода, в заголовке которой значится &amp;quot;'''perimeter =&amp;quot; '''ввести '''output'''&lt;br /&gt;
&lt;br /&gt;
где Perimeter - название поля, где будет размещен результат вычисления (название поля может быть любым).&lt;br /&gt;
&lt;br /&gt;
'''Центроид (точка - центр масс полигона) '''&lt;br /&gt;
&lt;br /&gt;
Выражение для получения данных в системе координат и единицах измерения самой темы. Данные как и вид могут в любой системе координат, получаемый результат НЕ будет зависеть от проекции вида:&lt;br /&gt;
&lt;br /&gt;
 Dim Output as double&lt;br /&gt;
 Dim pArea as IArea&lt;br /&gt;
 Set pArea = [shape]&lt;br /&gt;
 Output = pArea.centroid.x&lt;br /&gt;
&lt;br /&gt;
Выражение для спроектированного вида (данные в географической системе координат, проекция вида - установлена):&lt;br /&gt;
&lt;br /&gt;
 Dim pMxDoc As IMxDocument&lt;br /&gt;
 Set pMxDoc = ThisDocument&lt;br /&gt;
 Dim pMap As IMap&lt;br /&gt;
 Set pMap = pMxDoc.FocusMap&lt;br /&gt;
 Dim pSR As ISpatialReference&lt;br /&gt;
 Set pSR = pMap.SpatialReference&lt;br /&gt;
 Dim pPolygon As IPolygon&lt;br /&gt;
 Dim pArea as IArea&lt;br /&gt;
 Set pPolygon = [Shape]&lt;br /&gt;
 pPolygon.Project pSR&lt;br /&gt;
 Set pArea = pPolygon&lt;br /&gt;
 Output = pArea.centroid.x&lt;br /&gt;
&lt;br /&gt;
В последней области ввода, в заголовке которой значится &amp;quot;'''centerx ='''&amp;quot; ввести '''output'''. Для получения координаты Y - заменить в последней строке x на y.&lt;br /&gt;
&lt;br /&gt;
Сenterx, centery- название предварительно созданных полей, где будут размещены результаты вычисления (название полей могут быть любыми).&lt;br /&gt;
&lt;br /&gt;
===2. Линейный объект:===&lt;br /&gt;
&lt;br /&gt;
'''Длина'''&lt;br /&gt;
&lt;br /&gt;
Выражение для получения данных в системе координат и единицах измерения самой темы. Данные как и вид могут в любой системе координат, получаемый результат НЕ будет зависеть от проекции вида:&lt;br /&gt;
&lt;br /&gt;
 Dim Output as double&lt;br /&gt;
 Dim pCurve as ICurve&lt;br /&gt;
 Set pCurve = [shape]&lt;br /&gt;
 Output = pCurve.Length&lt;br /&gt;
&lt;br /&gt;
Выражение для спроектированного вида (данные в географической системе координат, проекция вида - установлена):&lt;br /&gt;
&lt;br /&gt;
 Dim pMxDoc As IMxDocument&lt;br /&gt;
 Set pMxDoc = ThisDocument&lt;br /&gt;
 Dim pMap As IMap&lt;br /&gt;
 Set pMap = pMxDoc.FocusMap&lt;br /&gt;
 Dim pSR As ISpatialReference&lt;br /&gt;
 Set pSR = pMap.SpatialReference&lt;br /&gt;
 Dim pCurve As ICurve&lt;br /&gt;
 Set pCurve = [Shape]&lt;br /&gt;
 pCurve.Project pSR&lt;br /&gt;
 Output = pCurve.Length&lt;br /&gt;
&lt;br /&gt;
В последней области ввода, в заголовке которой значится &amp;quot;'''length =&amp;quot; '''ввести '''output'''&lt;br /&gt;
&lt;br /&gt;
где Length - название поля, где будет размещен результат вычисления (название поля может быть любым).&lt;br /&gt;
&lt;br /&gt;
===3. Точечный объект:===&lt;br /&gt;
&lt;br /&gt;
Для получения координат точек, нужно создать 2 поля и ввести 2 выражения.&lt;br /&gt;
&lt;br /&gt;
Выражение для получения данных в системе координат и единицах измерения самой темы. Данные как и вид могут в любой системе координат, получаемый результат НЕ будет зависеть от проекции вида:&lt;br /&gt;
&lt;br /&gt;
Для долготы (longitude):&lt;br /&gt;
&lt;br /&gt;
'''[[Image:shapecalc3.gif]]'''&lt;br /&gt;
&lt;br /&gt;
 Dim pPoint As IPoint&lt;br /&gt;
 Set pPoint = [Shape]&lt;br /&gt;
 output = pPoint.x&lt;br /&gt;
&lt;br /&gt;
В последней области ввода, в заголовке которой значится &amp;quot;'''lat =&amp;quot; '''ввести '''output'''&lt;br /&gt;
&lt;br /&gt;
Для широты (latitude):&lt;br /&gt;
&lt;br /&gt;
Dim pPoint As IPoint&amp;lt;br /&amp;gt; Set pPoint = [Shape]&amp;lt;br /&amp;gt; output = pPoint.y&lt;br /&gt;
&lt;br /&gt;
В последней области ввода, в заголовке которой значится &amp;quot;'''lat =&amp;quot; '''ввести '''output'''&lt;br /&gt;
&lt;br /&gt;
Выражение для спроектированного вида (данные в географической системе координат, проекция вида - установлена):&lt;br /&gt;
&lt;br /&gt;
 Dim pMxDoc As IMxDocument&lt;br /&gt;
 Set pMxDoc = ThisDocument&lt;br /&gt;
 Dim pMap As IMap&lt;br /&gt;
 Set pMap = pMxDoc.FocusMap&lt;br /&gt;
 Dim pSR As ISpatialReference&lt;br /&gt;
 Set pSR = pMap.SpatialReference&lt;br /&gt;
 Dim pPoint As IPoint&lt;br /&gt;
 Set pPoint = [Shape]&lt;br /&gt;
 pPoint.Project pSR&lt;br /&gt;
&lt;br /&gt;
В последнем поле, в заголовке которого значится '''&amp;quot;''''''long =&amp;quot; '''или '''&amp;quot;''''''lat =&amp;quot;''' ввести '''pPoint.x''' или '''pPoint.y '''соответственно.&lt;br /&gt;
&lt;br /&gt;
где Long, Lat - название полей, где будет размещен результат вычисления (название поля может быть любым).&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы координаты в dd.dddddd разложить на ddmmss необходимо добавить в скрипт следующее выражение:&lt;br /&gt;
&lt;br /&gt;
 ff = pPoint.X&lt;br /&gt;
 &lt;br /&gt;
 dd = Int(ff)&lt;br /&gt;
 mm = Int((ff - dd) * 60)&lt;br /&gt;
 ss = Round(ff * 3600 - dd * 3600 - mm * 60, 1)&lt;br /&gt;
 sdd = Format(dd, &amp;quot;##&amp;quot;)&lt;br /&gt;
 If dd &amp;amp;lt; 10 Then sdd = &amp;quot;0&amp;quot; + sdd&lt;br /&gt;
 smm = Format(mm, &amp;quot;##&amp;quot;)&lt;br /&gt;
 If mm &amp;amp;lt; 10 Then smm = &amp;quot;0&amp;quot; + smm&lt;br /&gt;
 sss = Format(ss, &amp;quot;##.#&amp;quot;)&lt;br /&gt;
 If ss &amp;amp;lt; 10 Then sss = &amp;quot;0&amp;quot; + sss&lt;br /&gt;
 If Len(sss) = 3 Then sss = sss + &amp;quot;0&amp;quot;&lt;br /&gt;
 DDD2DMS = sdd + &amp;quot;° &amp;quot; + smm + &amp;quot;' &amp;quot; + sss + &amp;quot;'&lt;br /&gt;
&lt;br /&gt;
Поле куда записывается результат должно быть строковым, а в строке ff = pPoint.X ставим X или Y.&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
&lt;br /&gt;
Эти выражения являются реализацией запросов к пространственным данным на языке VBA через инструмент Calculate. С помощью этого инструмента и модифицированных запросов можно получать и другие пространственные характеристики объекта(ов).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ссылки по теме'''&lt;br /&gt;
&lt;br /&gt;
* [http://gis-lab.info/qa/shapecalc.html Получение основных пространственных характеристик объектов в Arcview GIS]&lt;/div&gt;</summary>
		<author><name>Amuriy</name></author>
	</entry>
</feed>