Запрос к базе данных Nominatim

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
novice
Гуру
Сообщения: 527
Зарегистрирован: 21 окт 2012, 00:17
Репутация: 15
Ваше звание: developer

Запрос к базе данных Nominatim

Сообщение novice » 25 мар 2013, 13:27

Есть функция на Java для доступа к базе данных.

Код: Выделить всё

	private String SendGetRequest(String urlParam) throws IOException
	{
		String ResStr = "";
		// Create an instance of HttpClient.
		HttpClient client = new HttpClient();
		// Create a method instance.
		GetMethod method = new GetMethod(urlParam);
		// Provide custom retry handler is necessary
		method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));
		try
		{
			// Execute the method.
			int statusCode = client.executeMethod(method);
			if (statusCode != HttpStatus.SC_OK)
			{
				System.err.println("Method failed: " + method.getStatusLine());
			}
			// Read the response body.
			ResStr = method.getResponseBodyAsString();
		}
		catch (HttpException e)
		{
			System.err.println("Fatal protocol violation: " + e.getMessage());
			throw e;
		}
		catch (IOException e)
		{
			System.err.println("Fatal transport error: " + e.getMessage());
			throw e;
		}
		finally
		{
			method.releaseConnection();
		}
		return ResStr;
	}
Здесь urlParam - текст запроса. Например
http://192.168.*.*/nom/reverse?format=json&lat=47.2&lon=39.6&zoom=17&addressdetails=1

Подскажите, пожалуйста или еще лучше выложите код, с такой же функцией на C#.
Как написать запрос к базе данных Nominatim через C#.
И можно ли в принципе в этом запросе получить ответ не в формате JSON а в формате XML?
Последний раз редактировалось novice 26 мар 2013, 14:29, всего редактировалось 1 раз.

novice
Гуру
Сообщения: 527
Зарегистрирован: 21 окт 2012, 00:17
Репутация: 15
Ваше звание: developer

Re: Запрос к базе данных Nominatim

Сообщение novice » 25 мар 2013, 13:59

окей, как сделать это в Net 4.5 понятно, но я вынужден писать под платформу Net 4.0
Что в ней заменяет HttpClient ?

Sergey Astakhov
Активный участник
Сообщения: 218
Зарегистрирован: 21 дек 2012, 01:57
Репутация: 52
Откуда: Питер

Re: Запрос к базе данных Nominatim

Сообщение Sergey Astakhov » 26 мар 2013, 00:42


novice
Гуру
Сообщения: 527
Зарегистрирован: 21 окт 2012, 00:17
Репутация: 15
Ваше звание: developer

Re: Запрос к базе данных Nominatim

Сообщение novice » 26 мар 2013, 12:01

Помимо этого есть 2 варианта
1)с помощью NuGet можно доставить и на 4.0 недостающие dll, но их че-то многовато. Затем тоже надо доставлять для обработки JSONа. Кроме того, я прочел, что стандартные классы ASP.NET работают с форматом JSON в 40 раз медленнее чем с XML.
2)Так что вчера для тестирования написал следующий рабочий код:

Код: Выделить всё

                double lat = 47.7, lon = 56.8;
                StringBuilder myTestAddress = new StringBuilder(100);
                myTestAddress.Append("http://192.168.0.187/nom/reverse?format=xml&lat=");
                myTestAddress.Append(lat.ToString());
                myTestAddress.Append("&lon=");
                myTestAddress.Append(lon.ToString());
                myTestAddress.Append("&zoom=17&addressdetails=1");

                System.Net.WebRequest reqGET = System.Net.WebRequest.Create(myTestAddress.ToString());
                System.Net.WebResponse resp = reqGET.GetResponse();
                System.IO.Stream stream = resp.GetResponseStream();
                System.IO.StreamReader sr = new System.IO.StreamReader(stream);
                string s = sr.ReadToEnd();

                string myTest;

                try
                {
                    XmlDocument xml_doc = new XmlDocument();
                    xml_doc.LoadXml(s);

                    XmlNodeList items = xml_doc.GetElementsByTagName("result");
                    foreach (XmlNode x in items)
                    {
                        if (x.Name == "result") myTest = x.InnerText;//в myTest содержится содержимое ответа на запрос
                    }
                }
                catch (Exception ex1)
                {
                   Logger.Instance().WriteInLog("AddTextToPropertyGrid: " + ex1.Message);
                }
Может кому поможет
Последний раз редактировалось novice 26 мар 2013, 12:22, всего редактировалось 1 раз.

novice
Гуру
Сообщения: 527
Зарегистрирован: 21 окт 2012, 00:17
Репутация: 15
Ваше звание: developer

Re: Запрос к базе данных Nominatim

Сообщение novice » 26 мар 2013, 12:20

Кстати, а что в базе Nominatim находится информация только по России? а то, при запросе по координатам за пределам России, запрос ничего не выдает. Это ж вроде часть OSM?

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя