Google GeoLocation API возвращает разные результаты для одной и той же точки доступа Wi-Fi

Мы используем API геолокации Google, чтобы получить latlong для точек доступа Wi-Fi. Мы видим противоречивые результаты. API Google возвращает разные значения latlong для разных ящиков. Когда я тестирую свой ящик для разработки, я получаю latlong, который указывает на местоположение в США. Когда я тестирую то же самое на коробке amazon ec2, я получаю latlong, который указывает на место в Японии. Кто-нибудь еще испытал то же самое с Google GeoLocation API?
Ниже приведен код и строки ответа от обоих хостов. Версия jar JDK и JSON одинакова на обоих хостах.

public void testWifiIdMappingApi() {

    String apiUrl = "https://www.googleapis.com/geolocation/v1/geolocate?key=xxxxxxxxxxxxxxxxxxxxxxxx";

InputStream inputStream = null;
HttpsURLConnection con = null;
DataOutputStream wr = null;
try {
    URL url = new URL(apiUrl);                  
    con = (HttpsURLConnection) url.openConnection();
        con.setRequestMethod("POST");
    con.setRequestProperty("Content-Type", "application/json");
    con.setDoInput(true);
    con.setDoOutput(true);
    con.connect();
    JSONObject obj = new JSONObject();
    JSONArray wifiAry = new JSONArray();
    JSONObject wifiObj = new JSONObject();
    wifiObj.put("macAddress", "6c:f3:7f:4b:37:74");
    wifiObj.put("signalStrength", 60);
        wifiAry.add(wifiObj);
    wifiObj = new JSONObject();
    wifiObj.put("macAddress", "6c:f3:7f:4b:37:75");
    wifiObj.put("signalStrength", 60);
    wifiAry.add(wifiObj);
    obj.put("wifiAccessPoints", wifiAry);
    System.out.println(obj.toString());
    wr = new DataOutputStream(con.getOutputStream());
    wr.writeBytes(obj.toString());
    wr.flush();
    wr.close();
    int responseCode = con.getResponseCode();
    inputStream = null;
    if (responseCode == HttpsURLConnection.HTTP_OK) {
    inputStream = con.getInputStream();
        } else {
    inputStream = con.getErrorStream();
        }
    final char[] buffer = new char[4096];
    StringBuilder response = new StringBuilder();
    Reader r = new InputStreamReader(inputStream, "UTF-8");
    int read;
    do {
    read = r.read(buffer, 0, buffer.length);
    if (read > 0) {
        response.append(buffer, 0, read);
    }
    } while (read >= 0);
    System.out.println(new java.util.Date() + " - "
                + response.toString());

} catch (Exception e) {
    e.printStackTrace();
} finally {
    try {
    if (inputStream != null)
        inputStream.close();
    if (wr != null)
        wr.close();
    if (con != null)
        con.disconnect();
    } catch (Exception e) {
        }
}

}

Введите строку JSON

{"wifiAccessPoints":[{"signalStrength":60,"macAddress":"6c:f3:7f:4b:37:74"}, {"signalStrength":60,"macAddress":"6c:f3:7f: 4б:37:75"}]}

Ответ на хосте amazon ec2 { "location": { "широта": 40.603124, "lng": 140.463922 }, "accuracy": 122000.0}

Ответ на мой ящик разработки (Windows 7)

{ "location": { "lat": 37.593392, "lng": -122.04383}, "accuracy": 22000.0}


person user3208468    schedule 17.01.2014    source источник
comment
Я думаю, вам следует добавить код, который вы используете для запроса API геолокации Google.   -  person elbuild    schedule 18.01.2014
comment
Я добавил код, входную строку json и строки ответа с обоих хостов. пожалуйста, проверьте.   -  person user3208468    schedule 20.01.2014


Ответы (1)


Возможно, вы захотите передать поле considerIp как False в теле POST. Это будет то, что Google определяет как ваше местоположение, когда маршрутизаторы Wi-Fi не выполняют свою работу.

person Alex    schedule 12.08.2015