Регистрация  |  Вход

GeoLocation с помощу google api?

Здраствуйте,

Пробовал получить широту и долготу зная страну, город, адрес с помощу google api

Запрос:



Http h = new Http();

HttpRequest req = new HttpRequest();

req.setEndPoint('https://maps.googleapis.com/maps/api/geocode/json?address='+address+'&sensor=false');

req.setMethod('GET');

req.setTimeout(60000);

Отправка: try {

HttpResponse res = h.send(req);

System.debug(res.getBody());

} catch (Exception e) {

System.debug(e.getMessage());

}

В ответ я получаю:

{

"error_message" : "This IP, site or mobile application is not authorized to use this API key.",

"results" : [],

"status" : "REQUEST_DENIED"

}

Погуглив, я обнаружил, что етот запрос имеет лимит в 2500 штук/день и для него нужно иметь API Key.

https://developers.google.com/maps/documentation/geocoding/

Но чтоб получить API Key нужно Key for server app, а для етого нужно указать список IP адресов, с которих будет отправлятся запрос.

Так вот, как можно узнать етот IP адрес, или можно както получить широту/долготу по другому?

Здраствуйте,

Пробовал получить широту и долготу зная страну, город, адрес с помощу google api

Запрос:
[code]
      Http h = new Http();
		HttpRequest req = new HttpRequest();
		req.setEndPoint('https://maps.googleapis.com/maps/api/geocode/json?address='+address+'&sensor=false');
		req.setMethod('GET');
		req.setTimeout(60000);
[/code]

Отправка: [code]try {
			HttpResponse res = h.send(req);
			System.debug(res.getBody());
} catch (Exception e) {
			System.debug(e.getMessage());
}[/code]

В ответ я получаю:
[code]{
   "error_message" : "This IP, site or mobile application is not authorized to use this API key.",
   "results" : [],
   "status" : "REQUEST_DENIED"
}[/code]

Погуглив, я обнаружил, что етот запрос имеет лимит в 2500 штук/день и для него нужно иметь API Key.
[url]https://developers.google.com/maps/documentation/geocoding/[/url]

Но чтоб получить API Key нужно Key for server app,  а для етого нужно указать список IP адресов, с которих будет отправлятся запрос. 

Так вот, как можно узнать етот IP адрес, или можно както получить широту/долготу по другому?

1. IP адресс можно узнасть у SF (на сайте либо SF support) он зависит от того на каком из серверов расположен твой орг.

2, Даже если зарегистрируешь аакакнт и получишь key работать не будет т.к. лимит 2500 в день с IP адресса бесплатно (на одном ip куча инстансов).

Solution #1: вынести геокодинг на клиента (VF страницу например) в таком случае запрос будет отправляться с IP компьютера.

Solution # 2: Логика на сервере но вместо google используем yahoo сервис (в документации тоже написано что лимит 2500 с IP, но каким то обарзом все очень хорошо работает)

1. IP адресс можно узнасть у SF (на сайте либо SF support) он зависит от того на каком из серверов расположен твой орг.

2, Даже если зарегистрируешь аакакнт и получишь key работать не будет т.к. лимит  2500 в день с IP  адресса бесплатно (на одном ip куча инстансов).

Solution #1: вынести геокодинг на клиента (VF страницу например) в таком случае запрос будет отправляться с IP компьютера.

Solution # 2: Логика на сервере но вместо google используем yahoo сервис (в документации тоже написано что лимит 2500 с IP, но каким то обарзом все очень хорошо работает)

Вот здесь есть про IP диапазоны:

https://developer.salesforce.com/forums?id=906F00000008ulZIAQ

в разделе интеграция есть тема о Gmaps, там есть ссылка на отличный пример.

при переносе на клиент есть ограничение на кол-во геокод вызовов за раз.

gmap нам сказал, что не ленитесь ребята, делайте геокод с сервера один раз и записывайте себе в поле типа Location (это есть в том примере).

все что знаю

Вот здесь есть про IP диапазоны:

[url]https://developer.salesforce.com/forums?id=906F00000008ulZIAQ[/url]

в разделе интеграция есть тема о Gmaps, там есть ссылка на отличный пример.

при переносе на клиент есть ограничение на кол-во геокод вызовов за раз.

gmap нам сказал, что не ленитесь ребята, делайте геокод с сервера один раз и записывайте себе в поле типа Location (это есть в том примере).

все что знаю

Den Brown
Вот здесь есть про IP диапазоны:

https://developer.salesforce.com/forums?id=906F00000008ulZIAQ

в разделе интеграция есть тема о Gmaps, там есть ссылка на отличный пример.

при переносе на клиент есть ограничение на кол-во геокод вызовов за раз.

gmap нам сказал, что не ленитесь ребята, делайте геокод с сервера один раз и записывайте себе в поле типа Location (это есть в том примере).

все что знаю

Ограничения есть, согласен, но непонятно как решается вопрос с лимитом с одного IP если запросы посылаются с сервера?

Если конечно купить бизнесс аккаунт за 10 к в год то вопросов нет )

[quote="Den Brown"]Вот здесь есть про IP диапазоны:

[url]https://developer.salesforce.com/forums?id=906F00000008ulZIAQ[/url]

в разделе интеграция есть тема о Gmaps, там есть ссылка на отличный пример.

при переносе на клиент есть ограничение на кол-во геокод вызовов за раз.

gmap нам сказал, что не ленитесь ребята, делайте геокод с сервера один раз и записывайте себе в поле типа Location (это есть в том примере).

все что знаю[/quote]

Ограничения есть, согласен,  но непонятно как решается вопрос с лимитом с одного IP если запросы посылаются с сервера?

Если конечно купить бизнесс аккаунт за 10 к в год то вопросов нет )

dimetrius
Den Brown
Вот здесь есть про IP диапазоны:

https://developer.salesforce.com/forums?id=906F00000008ulZIAQ

в разделе интеграция есть тема о Gmaps, там есть ссылка на отличный пример.

при переносе на клиент есть ограничение на кол-во геокод вызовов за раз.

gmap нам сказал, что не ленитесь ребята, делайте геокод с сервера один раз и записывайте себе в поле типа Location (это есть в том примере).

все что знаю

Ограничения есть, согласен, но непонятно как решается вопрос с лимитом с одного IP если запросы посылаются с сервера?

Если конечно купить бизнесс аккаунт за 10 к в год то вопросов нет )

не знаю всех тонкостей, кроме того они там меняют условия иногда.

когда я делал - то получал ключ для себя. он уникален - считают вызовы по нему.
но потом слышал - что можно и без ключа.
но это наврное зависит от кол-ва вызовов.
в общем ключ был главной вешью, не IP
но не знаю как сейчас

[quote="dimetrius"][quote="Den Brown"]Вот здесь есть про IP диапазоны:

[url]https://developer.salesforce.com/forums?id=906F00000008ulZIAQ[/url]

в разделе интеграция есть тема о Gmaps, там есть ссылка на отличный пример.

при переносе на клиент есть ограничение на кол-во геокод вызовов за раз.

gmap нам сказал, что не ленитесь ребята, делайте геокод с сервера один раз и записывайте себе в поле типа Location (это есть в том примере).

все что знаю[/quote]

Ограничения есть, согласен,  но непонятно как решается вопрос с лимитом с одного IP если запросы посылаются с сервера?

Если конечно купить бизнесс аккаунт за 10 к в год то вопросов нет )[/quote]

не знаю всех тонкостей, кроме того они там меняют условия иногда.

когда я делал - то получал ключ для себя. он уникален - считают вызовы по нему.
но потом слышал - что можно и без ключа.
но это наврное зависит от кол-ва вызовов.
в общем ключ был главной вешью, не IP
но не знаю как сейчас

Не знаю подробностей задачи, но зачем мучить сервер для подобной цели.
Лучше перенести функционал по определению координат на плечи клиента (браузера).
Сколько раз сталкивался с подобными задачами - на стороне клиента работает все супер.
Тем более что на Salesforce ты столкнешься еще и с лимитом callouts на сутки (если я не ошибаюсь) если будешь делать запросы с сервера.

Не знаю подробностей задачи, но зачем мучить сервер для подобной цели. 
Лучше перенести функционал по определению координат на плечи клиента (браузера). 
Сколько раз сталкивался с подобными задачами - на стороне клиента работает все супер.
Тем более что на Salesforce ты столкнешься еще и с лимитом callouts на сутки (если я не ошибаюсь) если будешь делать запросы с сервера.

Спасибо, сделал на стороне клиента и ЗАРАБОТАЛО)

var http_request = new XMLHttpRequest();
http_request.open("GET", "http://maps.googleapis.com/maps/api/geocode/json?address=" + address + "&sensor=false", true);
http_request.onreadystatechange = function () {

if (http_request.readyState == 4) {
if(http_request.status == 200) {
var GoogleResponse = JSON.parse(http_request.responseText);
if (GoogleResponse.status == "OK") {
var result = GoogleResponse.results[0];
console.log(result.geometry.location);
GoogleLocation = result.geometry.location;

alert(GoogleLocation.lat + ' ' + GoogleLocation.lng);
}
} else {
console.log(http_request.statusText);
}
}
};
http_request.send(null);

Спасибо, сделал на стороне клиента и ЗАРАБОТАЛО)

[code]var http_request = new XMLHttpRequest();
http_request.open("GET", "http://maps.googleapis.com/maps/api/geocode/json?address=" + address + "&sensor=false", true);
                http_request.onreadystatechange = function () {

                	if (http_request.readyState == 4) {
     					if(http_request.status == 200) {
						    var GoogleResponse = JSON.parse(http_request.responseText);
						    if (GoogleResponse.status == "OK") {
						    	var result = GoogleResponse.results[0];
						    	console.log(result.geometry.location);
						    	GoogleLocation = result.geometry.location;

						    	alert(GoogleLocation.lat + ' ' + GoogleLocation.lng);
						    }
						} else {
							console.log(http_request.statusText);
						}
					}
				};
				http_request.send(null);[/code]