Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.04.2018, 00:34
Аватар для LIONSMILE
LIONSMILE LIONSMILE вне форума
Новичок
 
Регистрация: 19.03.2018
Сообщения: 51
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Пакетное геокодирование. Как создать пакет запросов?

Доброго времени суток!

Благодаря помощи многоуважаемого Alegun, разобрался с геокодированием Яндекса. Точее как правильно разбирать данные.
Возник один вопрос. А возможно ли каким-нибудь способом организовать выполнение запросов (их разборов соответственно) в пакетном режиме, ибо когда адресов не много, то по одному их можно и в обычном браузере геокодировать (конечно есть и сайты, которые выполняют операцию пакетного геокодирования), но данные потом нужно будет еще не один раз обработать, чтобы привести их в нужный вид в конечном результате, и прыгать с браузера на приложение не совсем удачная идея.
В проекте задумал загружать данные по средствам таблицы MS Excel в Stringgrid, затем выполнять пакетное геокодирование, и сохранять их обратно в MS Excel (это чтобы не писать тут весь код громоздкого проекта, в котором еще куча этапов обработки полученных данных).
В моем проекте мне нужен всего 1 обработчик на Button2, который и будет выполнять сообственно процедуру пакетного геокодирования. Алгоритм работы такой: сначала загружаем в список адресов из таблицы MS Excel в Stringgrid1, далее выполняем пакет запросов и разбор полученных данных, полученные данные заносим в столбцы 2 и 3 Stringgrid2 (соответственно широта и долгота), а в первый столбец просто переносим данные из Stringgrid1 (адреса). В принципе чтобы не писать лишние строки, то можно данные сохранять и в исходный файл, т.е. добавлять еще две колонки к уже имеющейся там.

Проект: Геокодирование.ZIP

Помогите пожалуйста с обработчиком Button2.

Cпасибо заранее!
Ответить с цитированием
  #2  
Старый 17.04.2018, 20:08
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Как понял, в табличке *.xls есть список адресов, нужно автоматизировать в цикле добавление к ним координат в формате > lat= > lon=, можно это всё проделать и без промежуточной загрузки в стрингрид, но нужна доп.инфа - как выполняется в браузере запрос для одного адреса, что отправляется и что возвращается, как вы такое вытворяете, покажите пжлст
Ответить с цитированием
  #3  
Старый 18.04.2018, 03:58
Аватар для LIONSMILE
LIONSMILE LIONSMILE вне форума
Новичок
 
Регистрация: 19.03.2018
Сообщения: 51
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Доброго времени суток!

Запросы отправлять можно следующим образом, вариантов несколько.

https://geocode-maps.yandex.ru/1.x/?geocode=Волгоград
https://geocode-maps.yandex.ru/1.x/?...Ростов-на-Дону ул. Текучева д.15
https://geocode-maps.yandex.ru/1.x/?...Ростов-на-Дону Театральная площадь
https://geocode-maps.yandex.ru/1.x/?geocode=г. Ростов-на-Дону улица Портова дом 5

Браузер как ни странно и пробелы в строке тоже хавает и возвращает результаты в формате XML (сюда XML не грузит, изменил расширение на TXT) ОТВЕТ.TXT

При этом в запросе вот эта часть https://geocode-maps.yandex.ru/1.x/?geocode= остается не изменной, меняется все что идет после знака равно.
Что касаемо вывода в Stringgrid, так это просто для наглядности так задумано. Если конечно можно во втором StringGrid сделать разбор не только координат - но и адреса тоже, он приходит с ответом в XML. Т.е. алгоритм должен выглядеть примерно так я думаю: загрузили список адресо из файла MS Excel в 1 StrinGrid > нажаkb кнопку "Кодировать" > программа должна направить пакет запросов и получить столько же ответов > далее разбор и вывод ответов в Stringgrid 2.

P.S. Ссылки копировать нужно вместе с адресом. Попытался обернуть тэгами - он как раз там где нужно видеть как идет запрос - убирает.

Спасибо!

Последний раз редактировалось LIONSMILE, 18.04.2018 в 04:02.
Ответить с цитированием
  #4  
Старый 18.04.2018, 19:08
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от LIONSMILE
...Помогите пожалуйста с обработчиком Button2...
Вот предварительный вариант, пока наполнение через сетки идёт, будет-ли работать?
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
 s:     string;
 i,j,b: integer;
begin

 for b := 0 to  StringGrid1.RowCount-1 do
  begin
   XMLDocument1.LoadFromFile('https://geocode-maps.yandex.ru/1.x/?geocode=' +
    StringGrid1.Cells[0, b]);

   Application.ProcessMessages;

   XMLDocument1.Active:= true;
   s:= VarToStr(XMLDocument1.DocumentElement.ChildNodes.Nodes['GeoObjectCollection'].XML);

   Application.ProcessMessages;

   j:= Pos('<pos>', s)+5;
   i:= Pos('</pos>',s);
   s:= Copy(s, j, i-j);
   j:= Pos(' ', s);

   with StringGrid2 do
    begin
     RowCount:= b;
     Rows[b][0]:= StringGrid1.Cells[0,b];
     Rows[b][1]:= Copy(s,1,j-1);
     Rows[b][2]:= Copy(s,j+1,(Length(s)-j)+1);
    end;

   XMLDocument1.Active:= false;
  end; {for}

end;
Сам к сожалению, не проверю - корпоративный файрвол с яндексом не дружит :-(
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
LIONSMILE (20.04.2018)
  #5  
Старый 19.04.2018, 04:06
Аватар для LIONSMILE
LIONSMILE LIONSMILE вне форума
Новичок
 
Регистрация: 19.03.2018
Сообщения: 51
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо большое! Все работает.
Итог.jpg
Немного подрихтовал - теперь считает так как нужно. Изначально загрузил запустил, нажал и о чудо, все работает. Но думаю дай ка я проверю все ли адреса находит или нет. Добавил несколько Label чтобы посчитать исходные строки загружаемые из файла MS Excel и сколько будет на выходе - итог немного удивил. Он почему-то не видел последню строку, которая грузилась в StringGrid1.
Обычно цикл в StringGrid идет от 0 до -1, в большинстве случаев.
Код:
for b := 0 to  StringGrid1.RowCount-0 do
Вот так пришлось сделать, и в итоге он все увидел и обработал ровно столько адресов сколько было на входе (в StringGrid1).
Выгружает из StringGrid2 уже готовые данные в MS Excel без проблем (выгрузилось 46 строк).

Спасибо огромное в очередной раз!

P.S. Может быть кому-то в дальнейшем будет полезна информация о том, почему все сделано в пользу Яндекс, а не Google.

Основных причин три, ньюансов масса, я про них даже писаь не хочу:
1. Количество запросов в сутки у Яндекса составляет 25 000, в свою очередь Google дает возможно делать только 1000.
2. Формат запроса писать проще для Яндекса, Google он их (импортный) с русским языком ему тяжело.
3. Яндекс карты лучше детализированы и несут в себе больше информации о территории РФ нежели карты GoogleMaps.

Последний раз редактировалось LIONSMILE, 19.04.2018 в 04:10.
Ответить с цитированием
  #6  
Старый 19.04.2018, 09:37
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Оффтоп:
Цитата:
Сообщение от LIONSMILE
...StringGrid1.RowCount-0...
Не нужно ноль отнимать, надо просто .RowCount, -1 использовал по-привычке, условный рефлекс так сказать сработал, особенности показа кода без предварительной проверки
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
LIONSMILE (20.04.2018)
  #7  
Старый 19.04.2018, 12:43
Аватар для LIONSMILE
LIONSMILE LIONSMILE вне форума
Новичок
 
Регистрация: 19.03.2018
Сообщения: 51
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Ну да, поправил - все работает! 46 из 46 обработал.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:54.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter