Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2012, 16:40   #1
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию обратное геокодирование

Заранее извиняюсь, что скорее всего не в тот раздел помещаю. Прошу подсказки. Имеется лист Excel в разблюдовкой маршрута движения автомобиля. Первые два столбца - это координаты (X и Y, широта и долгота), например в столбце X 30,365465, а в столбце Y 50,449825.
Сталкивался ли кто-нибудь, когда-нибудь с задачей выборки этих координат и определения по ним адресов? В какую сторону вообще двигаться? Подскажите, нельзя ли это реализовать средствами VBA?
strannick вне форума Ответить с цитированием
Старый 10.01.2012, 17:01   #2
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от strannick Посмотреть сообщение
Заранее извиняюсь, что скорее всего не в тот раздел помещаю. Прошу подсказки. Имеется лист Excel в разблюдовкой маршрута движения автомобиля. Первые два столбца - это координаты (X и Y, широта и долгота),
Ты уж определись, что именно координаты или углы. Это есть большая разница.
Цитата:
Сообщение от strannick Посмотреть сообщение
например в столбце X 30,365465, а в столбце Y 50,449825.
Судя всего это долгота и широта.
Цитата:
Сообщение от strannick Посмотреть сообщение
Сталкивался ли кто-нибудь,
Это моя профессия.
Цитата:
Сообщение от strannick Посмотреть сообщение
когда-нибудь с задачей выборки этих координат и определения по ним адресов?
Бред. Какие адреса?
Цитата:
Сообщение от strannick Посмотреть сообщение
В какую сторону вообще двигаться?
Двигаться в сторону изучение геодезии, в частности понятия системы координат (карта, план, номенклатура карт,
аэрофотография).
Цитата:
Сообщение от strannick Посмотреть сообщение
Подскажите, нельзя ли это реализовать средствами VBA?
Без проблем.
С уважением, Алексей.

Последний раз редактировалось tae1980; 10.01.2012 в 17:04.
tae1980 вне форума Ответить с цитированием
Старый 10.01.2012, 17:21   #3
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Ага, значит интуитивно был прав. Спасибо за ответ. Задача, в общем, так и формулируется - определить по широте и долготе адрес. Я просто первый раз с таким столкнулся, поэтому заранее и извинился. Вот в прикрепленном файле первый и второй столбцы X и Y и есть широта и долгота. Остальные столбцы на убирал (мало ли). Возможно ли макросом прямо из файла получить напротив каждой пары адреса? Или, хотя бы, напротив тех пар, где в столбце R стоит "начало движения"?
Вложения
Тип файла: rar 1.rar (174.9 Кб, 30 просмотров)
strannick вне форума Ответить с цитированием
Старый 10.01.2012, 17:53   #4
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от strannick Посмотреть сообщение
Ага, значит интуитивно был прав. Спасибо за ответ. Задача, в общем, так и формулируется - определить по широте и долготе адрес. Я просто первый раз с таким столкнулся, поэтому заранее и извинился. Вот в прикрепленном файле первый и второй столбцы X и Y и есть широта и долгота. Остальные столбцы на убирал (мало ли). Возможно ли макросом прямо из файла получить напротив каждой пары адреса? Или, хотя бы, напротив тех пар, где в столбце R стоит "начало движения"?
У тебя есть градусные координаты +-25 (GPS бытовой точнее не может, не нужно верить рекламе), их можно с теме и иными сложностями перевести в иную нужную систему координат. В нашу стране приняты следующий метровые системы координат: CK63, СК64, СК42 (секретка), СК95, Региональные, местные. А так же все это может быть и в градусном исчислении.
Следующий вопрос в каком виде/формате ваши карты, а так же в каких системах координат.
Еще сложнее то что вам нужно определить атрибуты объекта на карте (с учетом улета на +- 25 м.), на это способны единичные программы и то с изрядной долей геморройностью.

Максимум на что бы я рассчитывал, это наложение траектории на карту, и визуальный контроль. Это не так сложно, могут многие программы для работы с космоснимками из инета, в частотности SASPlanet.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 10.01.2012, 18:38   #5
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Тут вот какое дело. Я себе мыслил это так. Что на гугле, что на яндексе есть сервис поиска по координатам. Выдает конечно большой разлет. Допустим, такой результат: ввел первую пару из столбцов по X и Y и получил Украина, Киев, Печерский район, ул. Мечникова 22 дома, клацнул на 22 дома и получил номера домов.
Так вот что я имел ввиду. Нельзя ли организовать средствами VBA макросик, который будет перебирать эти координаты (попарно), обращаться на этот сервис, получать хотя бы такой ответ и вставлять его в столбец S. Можно, как я писал, не все подряд, а по условию из столбца R (начало движения). Я прекрасно понимаю, что точности тут до точного номера дома не будет, но хоть так.
strannick вне форума Ответить с цитированием
Старый 10.01.2012, 18:48   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Всё можно сделать, если очень хочется.

Делаете пользовательскую функцию, которая принимает 2 параметра (широту и долготу), и возвращает текста адреса.

Функция возьмёт данные отсюда:



PS: Где-то на форуме (вроде, на Планете Excel) вроде попадался подобный макрос, получающий адрес по координатам.
Поищите - глядишь, и делать заново не придётся.

Последний раз редактировалось EducatedFool; 10.01.2012 в 18:51.
EducatedFool вне форума Ответить с цитированием
Старый 10.01.2012, 19:40   #7
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от strannick Посмотреть сообщение
Тут вот какое дело. Я себе мыслил это так. Что на гугле, что на яндексе есть сервис поиска по координатам. Выдает конечно большой разлет. Допустим, такой результат: ввел первую пару из столбцов по X и Y и получил Украина, Киев, Печерский район, ул. Мечникова 22 дома, клацнул на 22 дома и получил номера домов.
Так вот что я имел ввиду. Нельзя ли организовать средствами VBA макросик, который будет перебирать эти координаты (попарно), обращаться на этот сервис, получать хотя бы такой ответ и вставлять его в столбец S. Можно, как я писал, не все подряд, а по условию из столбца R (начало движения). Я прекрасно понимаю, что точности тут до точного номера дома не будет, но хоть так.
1. Тебе у же указали путь решения задачи.
2. Лично я забил бы и искал иные пути решения задачи. Разлет 25м - это значительно, качество карт отвратное (тут и дороги не там проходят, и названия не соответствую реальным и прочее и прочее, список очень большой).
Как я понимаю скорее всего ты работаешь в такси или в доставке (личные цели в расчет не берем . Существующие системы создавались для целей навигации в движении, там условия значительно отличаются. В частности, если система врет это либо ни кто не заметит, либо эта информация быстро становиться не актуальной. Например, проблему улета в 25 метров решают простым "примагничиванием" маркера "я здесь" к ближайшему "значимому" объекту. Это особенно хорошо видно на перекрестках, когда маркер может начать прыгать с дороги на дорогу, или когда машина съезжает на дорогу которой нет на карте, система продолжает еще продолжительное время "примагничивать" маркер к дороге с которой съехали. Реально возможна ситуация, когда ты едешь по одной дороге, а система указывает на параллельную. В движении это не так важно, и продолжается не долго. А вот для целей контроля фатально. То еж касается и ошибок на карте, в движении они не так критичны как для контроля.
Вывод: систему контроля перемещения по данным с gps навигаторов, создать реально и не так сложно. Но уровень доверия к ней будет весьма низок, а ошибки будут происходить постоянно и без системно (то есть на автомате их отловить нельзя). Нужна ли такая система, решайте сами. В то же время ручная сверка будет отнимать ориентировочно 0,3-1,5 часа в день, кроме того эту обязанность можно возложить на операторов.

Зы Я уже нашел способы обмануть систему. )
С уважением, Алексей.

Последний раз редактировалось tae1980; 10.01.2012 в 19:48.
tae1980 вне форума Ответить с цитированием
Старый 10.01.2012, 19:52   #8
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Имела бы смысл система такого рода: на пульт КПК передает координаты с периодичностью N минут. И оператор видит, где примерно находиться машина, сколько стоит и даже можно приблизительно определить причину простоя. Здесь можно организовать дополнительные сервисы: вызов ГАИ, вызов скорой, подсказка объезда пробок от оператор, сигнальные кнопки и прочее.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 11.01.2012, 09:31   #9
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от tae1980 Посмотреть сообщение
1. Тебе у же указали путь решения задачи.
2. Лично я забил бы и искал иные пути решения задачи. Разлет 25м - это значительно, качество карт отвратное (тут и дороги не там проходят, и названия не соответствую реальным и прочее и прочее, список очень большой).
Как я понимаю скорее всего ты работаешь в такси или в доставке (личные цели в расчет не берем . Существующие системы создавались для целей навигации в движении, там условия значительно отличаются. В частности, если система врет это либо ни кто не заметит, либо эта информация быстро становиться не актуальной. Например, проблему улета в 25 метров решают простым "примагничиванием" маркера "я здесь" к ближайшему "значимому" объекту. Это особенно хорошо видно на перекрестках, когда маркер может начать прыгать с дороги на дорогу, или когда машина съезжает на дорогу которой нет на карте, система продолжает еще продолжительное время "примагничивать" маркер к дороге с которой съехали. Реально возможна ситуация, когда ты едешь по одной дороге, а система указывает на параллельную. В движении это не так важно, и продолжается не долго. А вот для целей контроля фатально. То еж касается и ошибок на карте, в движении они не так критичны как для контроля.
Вывод: систему контроля перемещения по данным с gps навигаторов, создать реально и не так сложно. Но уровень доверия к ней будет весьма низок, а ошибки будут происходить постоянно и без системно (то есть на автомате их отловить нельзя). Нужна ли такая система, решайте сами. В то же время ручная сверка будет отнимать ориентировочно 0,3-1,5 часа в день, кроме того эту обязанность можно возложить на операторов.

Зы Я уже нашел способы обмануть систему. )
Спасибо за ответ. Цель тут не глобальный контроль за движением автотранспорта. Цель - Определение ключевых точек, где этот автотранспорт останавливался и долго стоял. Потому сплошняком определять адреса по координатам и не требуется, а только по условиям, указанным в столбе R (начало движения) с проверкой временных интервалов из столбца С. Правда, он совмещен с датой, но это не проблема. Условно говоря, если разница временных интервалов больше заданной (>10 мин. условно) и при этом в столбце R присутствует условие "начало движения" - вот эти то координаты и необходимо идентифицировать в конкретный адрес г. такой-то, ул. такая-то и номера домов приблизительно.
strannick вне форума Ответить с цитированием
Старый 11.01.2012, 09:35   #10
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Всё можно сделать, если очень хочется.

Делаете пользовательскую функцию, которая принимает 2 параметра (широту и долготу), и возвращает текста адреса.

Функция возьмёт данные отсюда:



PS: Где-то на форуме (вроде, на Планете Excel) вроде попадался подобный макрос, получающий адрес по координатам.
Поищите - глядишь, и делать заново не придётся.
Во-во, так я вручную и делал. Спасибо за совет про поиск на планете excel. Покопался и нашел вот такой код:

Sub ZaprosNaYandex()
Dim APIKey As String
Dim HTMLzapros As String
Dim Koordinat As String
Dim Ogranichenie As String
Dim Kolichestvo As String
Dim LastRows As Integer
Dim i As Integer
Dim otvet As XmlMaps

APIKey = " " 'API ключ
' API ключ можно получить на yandex.ru, как показала практика, на локальных компьютерах проверка API ключей не производиться
' я юзаю свой API ключ как дома так и на работе, хотя он зарегестрирован на рабочий домен
HTMLzapros = "http://geocode-maps.yandex.ru/1.x/?geocode=" ' Запрос
Koordinat = "37.611706,55.75862" ' Координаты которые необходимо перевести в словестное наименования места
' Так же возможно сделать обратное преобразование, просто подставив "Россия, Москва, улица Тверская, 7" вместо координат
Ogranichenie = 0 ' Параметр ограничения. Может принимать "0" и "1"
Kolichestvo = 1 ' Клоичество результатов в ответе

Application.ScreenUpdating = False

LastRows = Sheets("Лист1").UsedRange.Rows.Coun t

For i = 1 To LastRows
' Здесь форматируються координаты и сохраняются в переменную
' Для дальнейшей подстановке в запрос
Koordinat = Replace(Sheets("Лист1").Cells(i, 8), ",", ".") & "," & Replace(Sheets("Лист1").Cells(i, 7), ",", ".")

If i = 1 Then
ActiveWorkbook.XmlImport _
URL:=HTMLzapros & Koordinat & "&rspn=" & Ogranichenie & "&" & "&results=" & Kolichestvo & "&" & "&key=" & APIKey, _
ImportMap:=Nothing, Overwrite:=True, Destination:=Sheets("Лист2").Cells( i, 1)
Else
ActiveWorkbook.XmlImport _
URL:=HTMLzapros & Koordinat & "&rspn=" & Ogranichenie & "&" & "&results=" & Kolichestvo & "&" & "&key=" & APIKey, _
ImportMap:=Nothing, Overwrite:=True
End If

If Sheets("Лист2").Cells(i, 16) <> "other" Then
Sheets("Лист1").Cells(i, 9) = Sheets("Лист2").Cells(1, 16)
Else
Sheets("Лист1").Cells(i, 9) = Sheets("Лист2").Cells(1, 15)
End If
Next i

ActiveWorkbook.Connections("Подключ ение").Delete
ActiveWorkbook.XmlMaps("ymaps_карта ").Delete

Sheets("Лист2").Cells.Delete Shift:=xlUp

Application.ScreenUpdating = True

End Sub

Буду разбираться. Так как конкретная ситуация для меня совсем не знакома, буду рад и благодарен любому совету.
strannick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обратное отображение содержимого ListView ShamanK C# (си шарп) 1 23.11.2011 22:03
Обратное о модулю Cakeinpanic Общие вопросы C/C++ 1 04.06.2009 08:32
обратное распределение Стьедента в Exel vvo1962 Microsoft Office Excel 2 14.12.2008 11:09
"Обратное дерево" AdMeen Общие вопросы Delphi 3 08.10.2008 19:44