![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Доброго времени суток! 
		
	
		
		
			Благодаря помощи многоуважаемого Alegun, разобрался с геокодированием Яндекса. Точее как правильно разбирать данные. Возник один вопрос. А возможно ли каким-нибудь способом организовать выполнение запросов (их разборов соответственно) в пакетном режиме, ибо когда адресов не много, то по одному их можно и в обычном браузере геокодировать (конечно есть и сайты, которые выполняют операцию пакетного геокодирования), но данные потом нужно будет еще не один раз обработать, чтобы привести их в нужный вид в конечном результате, и прыгать с браузера на приложение не совсем удачная идея. В проекте задумал загружать данные по средствам таблицы MS Excel в Stringgrid, затем выполнять пакетное геокодирование, и сохранять их обратно в MS Excel (это чтобы не писать тут весь код громоздкого проекта, в котором еще куча этапов обработки полученных данных). В моем проекте мне нужен всего 1 обработчик на Button2, который и будет выполнять сообственно процедуру пакетного геокодирования. Алгоритм работы такой: сначала загружаем в список адресов из таблицы MS Excel в Stringgrid1, далее выполняем пакет запросов и разбор полученных данных, полученные данные заносим в столбцы 2 и 3 Stringgrid2 (соответственно широта и долгота), а в первый столбец просто переносим данные из Stringgrid1 (адреса). В принципе чтобы не писать лишние строки, то можно данные сохранять и в исходный файл, т.е. добавлять еще две колонки к уже имеющейся там. Проект: Геокодирование.ZIP Помогите пожалуйста с обработчиком Button2. Cпасибо заранее!  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Как понял, в табличке *.xls есть список адресов, нужно автоматизировать в цикле добавление к ним координат в формате > lat= > lon=, можно это всё проделать и без промежуточной загрузки в стрингрид, но нужна доп.инфа - как выполняется в браузере запрос для одного адреса, что отправляется и что возвращается, как вы такое вытворяете, покажите пжлст 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Доброго времени суток! 
		
	
		
		
			Запросы отправлять можно следующим образом, вариантов несколько. 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  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Код: 
	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  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Спасибо большое! Все работает. 
		
	
		
		
			Итог.jpg Немного подрихтовал - теперь считает так как нужно. Изначально загрузил запустил, нажал и о чудо, все работает. Но думаю дай ка я проверю все ли адреса находит или нет. Добавил несколько Label чтобы посчитать исходные строки загружаемые из файла MS Excel и сколько будет на выходе - итог немного удивил. Он почему-то не видел последню строку, которая грузилась в StringGrid1. Обычно цикл в StringGrid идет от 0 до -1, в большинстве случаев. Код: 
	for b := 0 to StringGrid1.RowCount-0 do Выгружает из StringGrid2 уже готовые данные в MS Excel без проблем (выгрузилось 46 строк). Спасибо огромное в очередной раз! P.S. Может быть кому-то в дальнейшем будет полезна информация о том, почему все сделано в пользу Яндекс, а не Google. Основных причин три, ньюансов масса, я про них даже писаь не хочу: 1. Количество запросов в сутки у Яндекса составляет 25 000, в свою очередь Google дает возможно делать только 1000. 2. Формат запроса писать проще для Яндекса, Google он их (импортный) с русским языком ему тяжело. 3. Яндекс карты лучше детализированы и несут в себе больше информации о территории РФ нежели карты GoogleMaps. Последний раз редактировалось LIONSMILE, 19.04.2018 в 04:10.  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Оффтоп: 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	Цитата: 
	
 ![]()  | 
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
 
LIONSMILE (20.04.2018)
  | ||
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Ну да, поправил - все работает! 46 из 46 обработал. 
		
	
		
		
		
		
		
	
		
		
	
	
	 |