2012-05-07 22 views
0

GPS座標をAとします(経度 - 緯度の10進数形式で、次に半径30メートルの円(円)を作成して、 ?。このJavaScriptの例を見てみましょうおかげGPS座標を使用してゾーンを作成する方法

+0

Huh?これはJavaScriptとどう関係していますか? –

+0

私はそれを試してみて33のエラーを出しました - 助けてください助けてください – user1379094

答えて

2

それを行う方法を、そのゾーンに入るが、それは他の言語で実装するのは簡単ですGPSのCOORD)

メインコード:

var earthRadiusKm = 3437.74677 * 1.1508 * 1.6093470878864446; 

    function GeoArea(centerLat, centerLng, distanceKm, northPoint, southPoint, eastPoint, westPoint) { 
     this.northPoint = northPoint; 
     this.southPoint = southPoint; 
     this.eastPoint = eastPoint; 
     this.westPoint = westPoint; 
     this.inArea = function (lat, lng) { 
      var inBox = southPoint.lat <= lat && lat <= northPoint.lat && westPoint.lng <= lng && lng <= eastPoint.lng; 
      if (inBox) { 
       var distanceFromCenterKm = calcDistance(centerLat, centerLng, lat, lng); 
       return distanceFromCenterKm <= distanceKm; 
      } else { 
       return false; 
      } 
     } 
    } 

    function GeoPoint(lat, lng) { 
     this.lat = lat; 
     this.lng = lng; 
    } 

    function toDegrees(radians) { 
     return radians/(Math.PI/180); 
    } 

    function toRadians(degrees) { 
     return Math.PI/180 * degrees; 
    } 

    function calcDistance(latA, lngA, latB, lngB) { 
     var rLatA = toRadians(latA); 
     var rLatB = toRadians(latB); 
     var rHalfDeltaLat = toRadians((latB - latA)/2); 
     var rHalfDeltaLng = toRadians((lngB - lngA)/2); 

     return 2 * earthRadiusKm * Math.asin(Math.sqrt(Math.pow(Math.sin(rHalfDeltaLat), 2) + Math.cos(rLatA) * Math.cos(rLatB) * Math.pow(Math.sin(rHalfDeltaLng), 2))); 
    } 

    function findPoint(lat, lng, bearing, distance) { 
     var rLat = toRadians(lat); 
     var rLng = toRadians(lng); 
     var rBearing = toRadians(bearing); 
     var rAngDist = distance/earthRadiusKm; 

     var rLatB = Math.asin(Math.sin(rLat) * Math.cos(rAngDist) + Math.cos(rLat) * Math.sin(rAngDist) * Math.cos(rBearing)); 
     var rLngB = rLng + Math.atan2(Math.sin(rBearing) * Math.sin(rAngDist) * Math.cos(rLat), Math.cos(rAngDist) - Math.sin(rLat) * Math.sin(rLatB)); 

     var pLat = toDegrees(rLatB); 
     var pLng = toDegrees(rLngB); 
     return new GeoPoint(pLat, pLng); 
    } 

    function calcArea(lat, lng, distanceKm) { 
     var northPoint = findPoint(lat, lng, 0, distanceKm); 
     var eastPoint = findPoint(lat, lng, 90, distanceKm); 
     var southPoint = findPoint(lat, lng, 180, distanceKm); 
     var westPoint = findPoint(lat, lng, 270, distanceKm); 
     return new GeoArea(lat, lng, distanceKm, northPoint, southPoint, eastPoint, westPoint); 
    } 

使用例:

// calculate area with center in lat:55.742793 lng:37.615401 
    // and distance in 23 km 
    var area = calcArea(55.742793, 37.615401, 23); 

    //returns true 
    area.inArea(55.714735, 37.629547); 
    //returns false 
    area.inArea(55.693842, 38.015442); 
+0

よく見る - 私はそれを試してみてください - 非常にありがとう、それは30メートルで動作することを願って – user1379094

+0

はい、それは動作します。このケースのdistanceKmパラメータは、0.030 –

+0

になります。申し訳ありませんNikita、私は試みましたが、私は非常に多くのエラーがありました。このコードを開始する前に何を宣言する必要がありますか?どのJavaバージョンを使用しますか?助けてくれてありがとう – user1379094

関連する問題