java - georreferenciación - google maps api key
Uso de la API de geolocalización de Google Maps (2)
¿Su objeto de solicitud JSON está completo? Me refiero a que parece que las claves que estás utilizando son parte de una sola descripción de "torre", pero que esto es solo parte del cuerpo de solicitud más grande, que debe formatearse como:
{
"homeMobileCountryCode": 310,
"homeMobileNetworkCode": 410,
"radioType": "gsm",
"carrier": "Vodafone",
"cellTowers": [
// See the Cell Tower Objects section below.
],
"wifiAccessPoints": [
// See the WiFi Access Point Objects section below.
]
}
Donde los objetos de la torre tienen el siguiente formato:
{''cellTowers'': [
{
''cellId'': 42,
''locationAreaCode'': 415,
''mobileCountryCode'': 310,
''mobileNetworkCode'': 410,
''age'': 0,
''signalStrength'': -60,
''timingAdvance'': 15
}
]}
Supongo que me estoy perdiendo cómo tu objeto json se convierte en el completo.
https://developers.google.com/maps/documentation/business/geolocation/
Estoy usando el siguiente código para obtener el lat. largo. al proporcionar MCC, MNC, estoy usando la API de geolocalización de Google Maps para esto, pero obtengo los mismos resultados (lat / long) para diferentes valores de MCC / MNC. Incluso cuando solicito json en blanco obtengo los mismos resultados (lat / long). ¿Dónde estoy equivocado?
public class CellID {
public static void main(String[] args) {
try{
putDataToServer("https://www.googleapis.com/geolocation/v1/geolocate?key=mykey",null);
}
catch(Throwable throwable){
System.out.println("Error");
}
}
public static String putDataToServer(String url,JSONObject returnedJObject) throws Throwable
{
HttpPost request = new HttpPost(url);
JSONStringer json = (JSONStringer) new JSONStringer()
.object()
.key("mobileCountryCode").value(504)
.key("mobileNetworkCode").value(0)
.key("locationAreaCode").value(0)
.key("cellID").value(0)
.endObject();
System.out.println("json"+json.toString());
StringEntity entity = new StringEntity(json.toString(), "UTF-8");
request.setEntity(entity);
HttpResponse response =null;
HttpClient httpClient = new DefaultHttpClient();
try{
response = httpClient.execute(request);
}
catch(SocketException se)
{
throw se;
}
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
//Displaying the response received.
String line = "";
while ((line = rd.readLine()) != null) {
System.out.println(line);
if (line.startsWith("Auth=")) {
String key = line.substring(5);
// Do something with the key
}
}
return response.getEntity().toString();
}
}
Parece que el problema aquí es que el objeto HttpPost se predetermina a enviar sus parámetros como x-www-form-urlencoded
, pero debe enviarlo como application/json
. Este hilo explica qué pasa si haces esto: Cómo usar los parámetros con HttpPost
Hay un par de formas que deberían arreglarlo. Una es establecer el encabezado Content-type en el objeto HttpPost:
request.setHeader("Content-type", "application/json");
El otro, que creo que es mejor, es usar el método setContentType de StringEntity documentado aquí
entity.setContentType("application/json");
Cualquiera de estas líneas simples utilizadas antes de enviar la solicitud debería solucionar el problema.