谷歌地图-在android中改变我的价值观
我对谷歌地图中的纬度和纬度有问题。 这是我添加标记的方式:谷歌地图-在android中改变我的价值观,android,google-maps-android-api-2,Android,Google Maps Android Api 2,我对谷歌地图中的纬度和纬度有问题。 这是我添加标记的方式: Marker newStore = map.addMarker(new MarkerOptions().position(new LatLng(store.getLatitude(), store.getLongitude())) .title(store.getName()).icon(BitmapDescriptorFactory.defaultMarker(markerResolver("u
Marker newStore = map.addMarker(new MarkerOptions().position(new LatLng(store.getLatitude(), store.getLongitude()))
.title(store.getName()).icon(BitmapDescriptorFactory.defaultMarker(markerResolver("up"))));
其中store.getLatitude=44.04687
和store.getLatitude=-70.295734
。
当我在添加标记后打印标记位置时,我得到的是:
marker.getPosition().纬度=44.046873756
和marker.getPosition().经度=-70.295734543234
。
现在我想将这两个数据相等以按位置搜索我的存储,但我不能这样做,因为存储位置和标记位置不同。标记位置比sote位置更精确。我怎样才能避免这种情况。我这样问是因为我有一个商店列表,并按位置添加标记。现在,我想按位置单击哪个存储,但正如您所看到的,marker和sotre的位置不同。一个选项是利用地理哈希的概念,根据两点之间的接近程度来评估相等性。地理哈希大小(距离)可以在实例化时配置。因此,在您的示例中,您可以这样构造GeoHash:
GeoHash myLocHash = GeoHash.withCharacterPrecision(store.getLatitude(), store.getLongitude(), 7);
GeoHash markerLocHash = GeoHash.withCharacterPrecision(marker.getPosition().latitude, marker.getPosition().longitude, 7);
if (myLocHash.equals(markerLocHash)) {
// Same location +/- .61 km margin of error
}
对于您需要的东西来说,这可能有些过分,但对于其他应用程序来说却是一个非常方便的选择。下面是一个非常适合GeoHash的Java库:
更多关于GeoHash的阅读:
由于以下原因,您不应通过
LatLng
位置比较标记
或任何其他对象
您可以保留一张带有所有标记的地图
和存储
并在onMarkerClick
中这样检索:
Store store = map.get(marker);
关于这一点和其他方法的更多信息:创建标记时,为什么不在标记的代码段中添加商店名称或其他内容,这样当它被单击时,您所要做的就是查看代码段以查看它是什么商店。或者只是从标题中得到它,你把它放在前面,很简单。。。非常感谢你。我不知道为什么我会跳过我选择这种方式的代码片段:)