Javascript 四舍五入Lat和Long以在谷歌地图中显示大致位置

Javascript 四舍五入Lat和Long以在谷歌地图中显示大致位置,javascript,ruby-on-rails,google-maps,geolocation,geospatial,Javascript,Ruby On Rails,Google Maps,Geolocation,Geospatial,我正在Rails应用程序的视图中显示谷歌地图,并将使用标记/覆盖 坐标数据将来自手机(GPS)并存储在我的Rails应用程序的数据库中 问题是,我不想在我的网页源代码中看到精确的lat/long。。。i、 e.我想标记一个大致位置,但不给出真实的纬度/经度 如何舍入/截断lat/long值,使其仍然准确(例如,在一英里内)-但不太准确 (例如:如何将35.2827524,-120.6596156四舍五入?尝试四舍五入到小数点后两位。最简单的方法是将两个坐标四舍五入到一定数量的小数点,或者在坐标上

我正在Rails应用程序的视图中显示谷歌地图,并将使用标记/覆盖

坐标数据将来自手机(GPS)并存储在我的Rails应用程序的数据库中

问题是,我不想在我的网页源代码中看到精确的lat/long。。。i、 e.我想标记一个大致位置,但不给出真实的纬度/经度

如何舍入/截断lat/long值,使其仍然准确(例如,在一英里内)-但不太准确


(例如:如何将35.2827524,-120.6596156四舍五入?

尝试四舍五入到小数点后两位。

最简单的方法是将两个坐标四舍五入到一定数量的小数点,或者在坐标上添加随机抖动:

lat = Math.floor(lat*1000+0.5)/1000; (round within 0.001)


如果你真的想在一定的英里数范围内,你需要做更复杂的数学运算,可能是使用极坐标。

看看我的解决方案,它不涉及随机数,并且会在查询之间提供一致的结果:


这可以非常简单地完成。如果你要四舍五入到一个网格中,那么地球上所有点的纬度都会以恒定量变化。经度随你离赤道的距离而变化

以下代码将纬度和经度捕捉为任意栅格大小

double EARTH_RADIUS_KM = 6371;

double GRID_SIZE_KM = 1.6; // <----- Our grid size in km..

double DEGREES_LAT_GRID = Math.toDegrees(GRID_SIZE_KM / EARTH_RADIUS_KM);
//     ^^^^^^ This is constant for a given grid size.

public Location snapToGrid(Location myLoc) {
  double cos = Math.cos(Math.toRadians(myLoc.latitude));

  double degreesLonGrid = DEGREES_LAT_GRID / cos;

  return new Location (
      Math.round(myLoc.longitude / degreesLonGrid) * degreesLonGrid,
      Math.round(myLoc.latitude / DEGREES_LAT_GRID) * DEGREES_LAT_GRID);

}
双地球半径=6371;

双网格尺寸KM=1.6;//你能为极坐标法提供指导吗?谢谢,这里有一个相关公式的讨论:一旦你得到了这些公式,这“仅仅”是一个为球面上所有点推导方程的问题,这些点与原点之间的距离小于一个阈值。这就是他要问的,所以这几乎不是一个有用的答案。这个答案有什么错?它可能有点不完整(缺少数值,例如“四舍五入到小数点后两位将截断位置精度到千米左右”),但我认为它至少是可以接受的
double EARTH_RADIUS_KM = 6371;

double GRID_SIZE_KM = 1.6; // <----- Our grid size in km..

double DEGREES_LAT_GRID = Math.toDegrees(GRID_SIZE_KM / EARTH_RADIUS_KM);
//     ^^^^^^ This is constant for a given grid size.

public Location snapToGrid(Location myLoc) {
  double cos = Math.cos(Math.toRadians(myLoc.latitude));

  double degreesLonGrid = DEGREES_LAT_GRID / cos;

  return new Location (
      Math.round(myLoc.longitude / degreesLonGrid) * degreesLonGrid,
      Math.round(myLoc.latitude / DEGREES_LAT_GRID) * DEGREES_LAT_GRID);

}