0

現在、html5のジオロケーション機能を使用しています。すべてが機能し、その優れた機能です。ただし、これは直感に反するように聞こえるかもしれませんが、取得する場所の精度を低くしたいと思います。

現時点では、正確な位置を取得しています。データのプライバシーのため、これは必要ありません。精度を下げる方法はありますか?

私は現在、以下に示すgetRandomGeoValueという関数を作成しようとしています。

function getRandomGeoValue(geoValue)
{


}

この関数は、地理値(緯度または経度)を受け取り、ランダムな不正確な地理値を返します。Javascripts Math.random()関数を使用しようとしていますが、結果が非​​常に不正確です。

理想的には、不正確さは約17マイルになります。

4

1 に答える 1

2

現在の場所(おそらく緯度と経度)を取得して、いくつかの変換の1つを適用できます。

  1. 最も近い10マイル(または必要なレベルの精度)に丸めます
  2. 各緯度と経度の値を最も近い10秒(または必要なレベルの精度)に丸めます
  3. 緯度と経度の両方にランダムな値を追加して、+ /-5マイル(または必要なレベルの精度)にします。

緯度/経度の値が度単位の場合、次の関数を使用して、最も近いNマイルに丸めることができます。

function roundPosition(lat, lon, roundMiles) {
    // 69.11 miles per degree of latitude
    var roundFactor = 69.11 / roundMiles;
    lat = Math.round(lat * roundFactor) / roundFactor;

    // miles in 1 degree of longitude = 69.11 * cos(latitude in radians)
    var latRadians = (lat / 180) * Math.PI;
    var milesPerDegreeLong = 69.11 * Math.cos(latRadians);
    roundFactor = milesPerDegreeLong / roundMiles;
    lon = Math.round(lon * roundFactor) / roundFactor;
    return({latitude: lat, longitude: lon});
}

この関数は、新しい丸められた緯度と経度をプロパティとして持つオブジェクトを返します。

使用例:

var latitude = 69.2;
var longitude = 180.9;
var newPos = roundPosition(latitude, longitude, 17);
// newPos.latitude and newPos.longitude contain the new rounded values
于 2012-11-29T22:00:30.800 に答える