1

Wi-Fi アクセス ポイントの緯度経度を取得するために、Google の地理位置情報 API を使用しています。一貫性のない結果が表示されています。Google の API は、ボックスごとに異なる緯度経度を返します。開発ボックスでテストすると、米国内の場所を指す緯度経度を取得します。Amazon ec2 ボックスで同じことをテストすると、日本の場所を指す latlong が得られます。Google の GeoLocation API で同じことを経験した人はいますか?
以下は、両方のホストからのコードと応答文字列です。JDK および JSON jar のバージョンは、両方のホストで同じです。

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: 4b:37:75"}]}

amazon ec2 ホストでの応答 { "location": { "lat": 40.603124, "lng": 140.463922 }, "accuracy": 122000.0 }

私の開発ボックスでの応答 (Windows 7)

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

4

1 に答える 1

0

considerIpPOST 本文でフィールドを False として渡したい場合があります。これは、Wi-Fi ルーターが機能していないときに、Google がユーザーの現在地であると判断した場所です。

于 2015-08-12T17:32:48.640 に答える