Проблема с Определением направления в ArcGis 8.3
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 24 авг 2006, 07:45
- Репутация: 0
Проблема с Определением направления в ArcGis 8.3
Случайно обнаружил, что направление между двумя точками определяются не верно. Обнаружилось это когда 2 точки имели одинаковую долготу и вместо ожидаемого 180 ArcMAP выдал 178,2.
Система карты - Пулково 42.
Включил градусную сетку - точки действительно нанесены на одном меридиане, а вот сама градусная сетка несколько повернута относительно фрейма. Получается, что направление определяется относительно фрейма? Как мне получить правильный результат, или какие настройки крутить?
Система карты - Пулково 42.
Включил градусную сетку - точки действительно нанесены на одном меридиане, а вот сама градусная сетка несколько повернута относительно фрейма. Получается, что направление определяется относительно фрейма? Как мне получить правильный результат, или какие настройки крутить?
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 24 авг 2006, 07:45
- Репутация: 0
нарыл калькулятор:
http://www.ian-ko.com/downloads/EasyCal ... late50.zip
полезная штука -намного обещает облегчить жизнь
там есть аж три выражения на интересующую меня тему
polyline_Get_Azimuth.cal
polyline_Get_Azimuth2.cal
polyline_Get_Azimuth_8х.cal
но все они выдали тот же неверный результат .
скорее всего он правильный но не совсем тот который нужен.
Подозреваю, что это связано как-то с проекцией.
Видно на каком-то этапе что-то сделано не верно или вообще не сделано. Подскажите на что обратит внимание?
http://www.ian-ko.com/downloads/EasyCal ... late50.zip
полезная штука -намного обещает облегчить жизнь

там есть аж три выражения на интересующую меня тему
polyline_Get_Azimuth.cal
polyline_Get_Azimuth2.cal
polyline_Get_Azimuth_8х.cal
но все они выдали тот же неверный результат .
скорее всего он правильный но не совсем тот который нужен.
Подозреваю, что это связано как-то с проекцией.
Видно на каком-то этапе что-то сделано не верно или вообще не сделано. Подскажите на что обратит внимание?
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
обратить внимание на СК:
а) самих данных
б) фрейма в который они загружены
азимут может расчитываться по-разному в зависимости от того, истинный это азимут, начальный или просто угол в некой СК:
http://gis-lab.info/qa/diff-calc.html
Беру две точки на одной долготе:
0,0
0,50
Использую ec50\calculate\polyline_Get_Azimuth2.cal, получаю результат = 180. Причем оставляю по умолчанию:
СК данных у меня - WGS84.
А что получается у вас?
а) самих данных
б) фрейма в который они загружены
азимут может расчитываться по-разному в зависимости от того, истинный это азимут, начальный или просто угол в некой СК:
http://gis-lab.info/qa/diff-calc.html
Беру две точки на одной долготе:
0,0
0,50
Использую ec50\calculate\polyline_Get_Azimuth2.cal, получаю результат = 180. Причем оставляю по умолчанию:
Код: Выделить всё
'bSrefFromMap = False ==> the length will be calculated in the projection of the data
А что получается у вас?
пристегивайтесь, турбулентность прямо по курсу
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 24 авг 2006, 07:45
- Репутация: 0
У меня так:
фрейм:
Pulkovo_1942_GK_Zone_7
Gauss_Kruger
False_Easting: 7500000.000000
False_Northing: 0.000000
Central_Meridian: 40.000000
Scale_Factor: 1.000000
Latitude_Of_Origin: 0.000000
слой:
Система координат:
Gauss_Kruger
False_Easting: 7500000.000000
False_Northing: 0.000000
Central_Meridian: 40.000000
Scale_Factor: 1.000000
Latitude_Of_Origin: 0.000000
GCS_Pulkovo_1942
Датум:D_Pulkovo_1942
Начальный меридиан:0
Добавляю данные по координатам.
таблица приведена к десятичным градусам, систему координат выбираю, импортировать из слоя.
затем, строю в слое полилинии, привязывая начало и конец к введенным точкам.
пытаюсь получить истинный азимут из начальной точки в конечную, а похоже получается некий угол.
Для двух точек имеющих одинаковую долготу 41,6222
азимут получается 178.7899
фрейм:
Pulkovo_1942_GK_Zone_7
Gauss_Kruger
False_Easting: 7500000.000000
False_Northing: 0.000000
Central_Meridian: 40.000000
Scale_Factor: 1.000000
Latitude_Of_Origin: 0.000000
слой:
Система координат:
Gauss_Kruger
False_Easting: 7500000.000000
False_Northing: 0.000000
Central_Meridian: 40.000000
Scale_Factor: 1.000000
Latitude_Of_Origin: 0.000000
GCS_Pulkovo_1942
Датум:D_Pulkovo_1942
Начальный меридиан:0
Добавляю данные по координатам.
таблица приведена к десятичным градусам, систему координат выбираю, импортировать из слоя.
затем, строю в слое полилинии, привязывая начало и конец к введенным точкам.
пытаюсь получить истинный азимут из начальной точки в конечную, а похоже получается некий угол.
Для двух точек имеющих одинаковую долготу 41,6222
азимут получается 178.7899
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 24 авг 2006, 07:45
- Репутация: 0
На сколько мне известно, то проекция Гаусса-Крюгера, является равноугольной - т.е. не искажает углы.sim писал(а):Gauss_Kruger
Ну вот вам и ответ.
я получаю все таки скорее всего начальный азимут, а мне нужен постоянный.
Мне кажется, что задача решаема.
Применительно к выражению Azimuth2
'polyline_Get_Azimuth2.cal
'Author: Ianko Tchoukanski
'http://www.ian-ko.com
'=========================
On Error Resume Next
Dim pMxDoc As IMxDocument
Dim pMap As IMap
Dim pCurve As ICurve
Dim pPoint1 As IPoint, pPoint2 As IPoint
Dim dDistance1 As Double, dDistance2 As Double
Dim bAsRatio1 As Boolean
Dim pVector As IVector3D
Dim dAzimuth As Double
Dim dDelta As Double
Dim Pi As Double
Dim bSrefFromMap As Boolean
'=======================
'adjust the parameters below
'bSrefFromMap = True ==> the length will be calculated in the projection of the Map
'bSrefFromMap = False ==> the length will be calculated in the projection of the data
'bSrefFromMap needs to be True only if a real distance in Map units will be used - bAsRatio = False
bSrefFromMap = False
dDistance1 = 0# 'Indicates the start point of the line. Change the value to perform calculations for a different point.
bAsRatio = True ' the distance above will be used as a ratio from the total length. Change to false to input an absolute distance.
dDelta = 0.000001 'A small tolerance - no change of direction expected within this tolerance
'========================
dDistance2 = dDistance1 + dDelta
Pi = 4 * Atn(1)
If (Not IsNull([Shape])) Then
Set pCurve = [Shape]
If (Not pCurve.IsEmpty) Then
If (bSrefFromMap) Then
Set pMxDoc = ThisDocument
Set pMap = pMxDoc.FocusMap
pCurve.Project pMap.SpatialReference
End If
Set pPoint1 = New Point
pCurve.QueryPoint 0, dDistance1, bAsRatio, pPoint1
Set pPoint2 = New Point
pCurve.QueryPoint 0, dDistance2, bAsRatio, pPoint2
Set pVector = New Vector3D
pVector.ConstructDifference pPoint2, pPoint1
dAzimuth = pVector.Azimuth
dAzimuth = dAzimuth * 360 / (2 * Pi)
End If
End If
Нам мой взляд в место мизерного приращения из начальной точки (dDelta = 0.000001 )
надо использовать конечную точку линии.
А вот как ее извлечь пока незнаю.
данная команда:
Set pCurve = [Shape]
выгружает данные из поля "Shape" в массив? а где там что сидит? ( во блин, предложение из одних союзов получилось

или может я иду не в том направлении?
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
да, немного мне кажется не в том направлении, я и не говорил что она не равноугольная.
проведите такой эксперимент. Cделайте 2 линии в ГСК-WGS84:
1. c постоянной долготой 39
2. c постоянной долготой 36 (или возьмите свою 41)
Потом спроектируйте вид в GK Zone 7.
Попробуйте, напишите, что получится.
проведите такой эксперимент. Cделайте 2 линии в ГСК-WGS84:
1. c постоянной долготой 39
2. c постоянной долготой 36 (или возьмите свою 41)
Потом спроектируйте вид в GK Zone 7.
Попробуйте, напишите, что получится.
пристегивайтесь, турбулентность прямо по курсу
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 24 авг 2006, 07:45
- Репутация: 0
Т.е. вы хотите сказать, что когда я ввожу данные, то у ARCGIS
хватает мозгов, чтобы пересчитать их в проекцию, а когда мне нужно провести измерения, то обратно эти данные не пересчитываются, а тупо мерятся по проекции?
или все же инструмент позволяет это делать, только надо его предупредить обэтом.
Как сказать ARCGISу, что мне нужен азимут померянный не по проекции , а истинный? не уж то он не может на лету конвертнуть пару точек?
хватает мозгов, чтобы пересчитать их в проекцию, а когда мне нужно провести измерения, то обратно эти данные не пересчитываются, а тупо мерятся по проекции?
или все же инструмент позволяет это делать, только надо его предупредить обэтом.
Как сказать ARCGISу, что мне нужен азимут померянный не по проекции , а истинный? не уж то он не может на лету конвертнуть пару точек?
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Вы так и не написали, что получилось с тем примером.
Дело не в мозгах, их у ArcGIS нет
Тот же результат вы бы получили, думаю в любой другой ГИС. Во-вторых, постоянный азимут весьма специфичная вещь и я бы, например, не хотел, чтобы программа всегда пыталась мне его подсовывать. Здесь мы бы имели дело с "принятием решения программой за пользователя".
Дело в том, какой алгоритм расчета используется и в какой системе координат находятся данные. Те скрипты что вы приводили все используют простую теорему косинусов:
http://gis-lab.info/qa/aveazimuth.html
Если вам нужны истинный азимут, то самое простое - используйте проекцию Mercator, все прямые в ней - линии румба (это НЕ так в ГК, надеюсь это ясно из примера).
Другой вариант, более сложный, можно использовать формулы определения постоянного (истинного) азимута и для 3D координат вида долгота/широта:
http://gis-lab.info/qa/angles-rhumb.html
Дело не в мозгах, их у ArcGIS нет

Дело в том, какой алгоритм расчета используется и в какой системе координат находятся данные. Те скрипты что вы приводили все используют простую теорему косинусов:
http://gis-lab.info/qa/aveazimuth.html
Если вам нужны истинный азимут, то самое простое - используйте проекцию Mercator, все прямые в ней - линии румба (это НЕ так в ГК, надеюсь это ясно из примера).
Другой вариант, более сложный, можно использовать формулы определения постоянного (истинного) азимута и для 3D координат вида долгота/широта:
http://gis-lab.info/qa/angles-rhumb.html
пристегивайтесь, турбулентность прямо по курсу
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 24 авг 2006, 07:45
- Репутация: 0
Наверно, я изначально задал неверно вопрос.
Выбор проекции здесь не стоит. Почему мы используем эту проекцию а не другую - это к делу не относится.
И каждый раз когда мне надо определить направление, конверитить данные в другую проекцию - тоже не выход
а вот за ссылочку спасибо, мне казалось, что я просмотрел все материалы сайта.
Попутно еще один вопрос, где почитать какие атрибуты живут в поле геометрии?
Выбор проекции здесь не стоит. Почему мы используем эту проекцию а не другую - это к делу не относится.
И каждый раз когда мне надо определить направление, конверитить данные в другую проекцию - тоже не выход
а вот за ссылочку спасибо, мне казалось, что я просмотрел все материалы сайта.
Попутно еще один вопрос, где почитать какие атрибуты живут в поле геометрии?
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Весь предыдущий разговор был об этом, "вы спросили, почему у меня в ГСК 180, а в ГК не 180", ответ - "потому что это ГК, был бы меркатор, было бы 180".Почему мы используем эту проекцию а не другую - это к делу не относится.
Пoчему нет? Это общепринятая практика - подбирать проекцию под задачу.И каждый раз когда мне надо определить направление, конверитить данные в другую проекцию - тоже не выход
Новые вопросы лучше задавать в новой теме, иначе бардак будет.
пристегивайтесь, турбулентность прямо по курсу
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 24 авг 2006, 07:45
- Репутация: 0
Как оказалось - это совсем не обязательно!sim писал(а):Пoчему нет? Это общепринятая практика - подбирать проекцию под задачу.И каждый раз когда мне надо определить направление, конверитить данные в другую проекцию - тоже не выход
Ларчик просто открывался.
как я и подозревал, в ARCGIS это все заложено и не надо изобретать велосипед.
Итак, данные у нас живут в проекции Гаусса-Крюгера - поэтому
система координат слоя она и указана (это обязательно).
При добавлении данных к карте системе координат фрейма по умолчанию присваивается такая же. И мы видим на экране меридианы сходящиеся к полюсу, вроде все так и должно быть. Тогда зачем система прописана 2 раза в разным местах? оказывается как раз именно для решения задач аналогичных моей.
Достаточно задать во фрейме другую систему и GIS на лету будет пересчитывать исходные данные в новую систему кординат. Заметьте данные остались в ГК и ими одновременно можно пользоваться в других проектах ( не надо конвертить или создавать дубликаты).
В то же время не надо извращаться со скриптами.
И в КАЛЬКУЛЯТОРЕ это учтено:
'bSrefFromMap = True ==> the length will be calculated in the projection of the Map
'bSrefFromMap = False ==> the length will be calculated in the projection of the data
Поставил "Да" вычиления будут производится над данными фрейма
Поставишь "Нет" - вычиления будут производится над данными слоя
Потерял полторы недели, зато как по-умнел

- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9129
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 748
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Ну как это не обязательно, если вы, в конце концов и сделали то, о чем я вам говорю на протяжении последних 3-4 сообщений - поменяли проекцию, не важно, проекция это данных или вида (фрейма данных), как вы правильно заметили, скрипты (с которыми вам возиться все-таки пришлось, выражение для калькулятора = скрипт) умеют работать и с тем и с тем.Как оказалось - это совсем не обязательно!
пристегивайтесь, турбулентность прямо по курсу
-
- Интересующийся
- Сообщения: 15
- Зарегистрирован: 24 авг 2006, 07:45
- Репутация: 0
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя