Google API 返回服务器位置,而不是用户位置
Posted
技术标签:
【中文标题】Google API 返回服务器位置,而不是用户位置【英文标题】:Google API returning the server location, not user location 【发布时间】:2019-11-17 02:10:10 【问题描述】:您好,虽然我是通过此代码获取用户位置,但我实际上是在获取服务器的位置,知道如何更改它以便获取用户位置吗?
public void geolocate()
try
GeolocationPayloadBuilder payloadBuilder = new GeolocationPayload.GeolocationPayloadBuilder();
GeolocationPayload payload = payloadBuilder.createGeolocationPayload();
//GeoApiContext context = new GeoApiContext.Builder().apiKey("my api key").build();
// I guess the payload needs to be build in a different way but no clue how it should be :/
GeolocationApiRequest req = (GeolocationApiRequest) GeolocationApi.geolocate(context, payload);
GeolocationResult res = req.await();
String location = res.location.toString();
String[] latLngArray = location.split(",");
com.google.maps.model.LatLng latLng = new com.google.maps.model.LatLng(Double.parseDouble(latLngArray[0]),
Double.parseDouble(latLngArray[1]));
GeocodingApiRequest geoReq = GeocodingApi.reverseGeocode(context, latLng);
GeocodingResult[] geoRes = geoReq.await();
// Setting the user location for view
System.out.println(geoRes[0].formattedAddress);
origen.setValue(geoRes[0].formattedAddress);
catch (Exception e)
System.out.println("Exception in NetClientGet:- " + e);
这是我从中获取对象的依赖项:
<dependency>
<groupId>com.google.maps</groupId>
<artifactId>google-maps-services</artifactId>
<version>0.9.3</version>
</dependency>
希望有人能帮帮我,在此先感谢
编辑:
我一直在搜索并发现如何在https://developers.google.com/maps/documentation/geolocation/intro#cell_tower_object的帮助下构建有效载荷
但是我有几个问题,我将如何获取我的用户 MAC 地址来创建 wifiAccessPoint,以及我在哪里可以找到我所在城市(哥伦比亚卡利)的手机信号塔信息?只是更新将继续搜索任何帮助表示赞赏..
@POST
@Path("/geolocate")
public String geolocate()
try
CellTower newCellTower = new CellTower.CellTowerBuilder().CellId(42).LocationAreaCode(415)
.MobileCountryCode(310).MobileNetworkCode(410).Age(0).createCellTower();
WifiAccessPoint newWifiAccessPoint = new WifiAccessPoint.WifiAccessPointBuilder()
.MacAddress("00:25:9c:cf:1c:ac").createWifiAccessPoint();
WifiAccessPoint newWifiAccessPoint2 = new WifiAccessPoint.WifiAccessPointBuilder()
.MacAddress("00:25:9c:cf:1c:ad").createWifiAccessPoint();
GeolocationPayloadBuilder payloadBuilder = new GeolocationPayload.GeolocationPayloadBuilder()
.HomeMobileCountryCode(310).HomeMobileNetworkCode(410).RadioType("gsm").Carrier("Vodafone")
.ConsiderIp(false).AddCellTower(newCellTower).AddWifiAccessPoint(newWifiAccessPoint)
.AddWifiAccessPoint(newWifiAccessPoint2);
GeolocationPayload payload = payloadBuilder.createGeolocationPayload();
GeoApiContext context = new GeoApiContext.Builder().apiKey("my api key")
.build();
GeolocationApiRequest req = (GeolocationApiRequest) GeolocationApi.geolocate(context, payload);
GeolocationResult res = req.await();
String location = res.location.toString();
String[] latLngArray = location.split(",");
com.google.maps.model.LatLng latLng = new com.google.maps.model.LatLng(Double.parseDouble(latLngArray[0]),
Double.parseDouble(latLngArray[1]));
GeocodingApiRequest geoReq = GeocodingApi.reverseGeocode(context, latLng);
GeocodingResult[] geoRes = geoReq.await();
// Setting the user location for view
return geoRes[0].formattedAddress;
catch (Exception e)
System.out.println("Exception in NetClientGet:- " + e);
return "XD";
【问题讨论】:
【参考方案1】:Google Maps Platform 的Geolocation API 不是用来获取用户位置的,我可以建议您改用 html5 Geolocation,Google Maps Platform documentation 中也有一个示例。但请注意,Google 不支持此功能,因为它使用的是 HTML5 Geolocation 而不是 Google API,如果您还想获取用户位置的地址,您可以Geocode HTML5 Geolocation 返回的坐标.您可能会看到下面的示例(没有地理编码功能)。这是一个工作示例 - https://jsfiddle.net/w2sad5pn/
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition(function(position)
var pos =
lat: position.coords.latitude,
lng: position.coords.longitude
;
infoWindow.setPosition(pos);
infoWindow.setContent('Location found.');
infoWindow.open(map);
map.setCenter(pos);
, function()
handleLocationError(true, infoWindow, map.getCenter());
);
else
// Browser doesn't support Geolocation
handleLocationError(false, infoWindow, map.getCenter());
【讨论】:
嗯,有趣,有时间我会测试这个,谢谢,我尝试使用javascript方式但我没有设法得到它返回到后端的纬度和经度,我用过这个w3schools.com/html/html5_geolocation.asp反正我会在有时间的时候试试你发布的内容谢谢 嘿,我阅读了代码,这正是我前一段时间尝试过的,但我没有设法从 javascript 将纬度和经度获取到我的后端(java),不知道我该怎么做那个?以上是关于Google API 返回服务器位置,而不是用户位置的主要内容,如果未能解决你的问题,请参考以下文章
Google Geolocation API 总是返回相同的位置,不管 cellTower 是不是指定
如何在 iOS 版 Google Places API 中查找当前用户位置
如何使用地名服务 api 而不是 html5 位置对象的东西获取国家/地区代码信息