`
lanlansnss
  • 浏览: 44746 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一点坐标发散后得到范围, map寻找

    博客分类:
  • php
 
阅读更多


/**

 * 坐标计算

 * date :Nove 11,2011--- 光棍节

 * author:snuser

 */

 

/**

示例:

$lat = 0.1;

$lng = 116.085239;

$lat2 = 0.2;

$lng2 = 116.085239;

$data = Coordinate::getDisCoord($lng, $lat, 1000);

$distance = Coordinate::getDistance($lng, $lat, $lng2, $lat2);

 */

class Coordinate{

/**

* 地球半径 单位(m)

* 常量

*/

const EARTH_RADIUS = 6378137.0;

/**

* 得到某坐标发散后的距离的坐标

* @lng 经度  floor (11,7)

* @lat 纬度  floor (11,7)

* @distance 单位(m) 

* return array

*/

static function getDisCoord($lng,$lat,$distance){

//纬度偏移

$dlat = 2*asin(sin($distance/(2*self::EARTH_RADIUS))/cos($lat));

$dlat = rad2deg(abs($dlat));

//经度偏移

$dlng = $distance/self::EARTH_RADIUS ;

$dlng = rad2deg( abs( $dlng ) );

return array(

'lat1'=>sprintf('%.7f', ($lat+$dlat)),

'lat2'=>sprintf('%.7f', ($lat-$dlat)),

'lng1'=>sprintf('%.7f', ($lng+$dlng)),

'lng2'=>sprintf('%.7f', ($lng-$dlng)),

);

}

/**

* 计算两点之间的球面距离

* return floot

*/

static function getDistance($lng0, $lat0, $lng1, $lat1){

$x = ($lng1-$lng0)*M_PI*self::EARTH_RADIUS*cos(($lat0+$lat1)/2*M_PI/180)/180;

$y = ($lat1-$lat0)*M_PI*self::EARTH_RADIUS/180;

$distance = self::hav($x, $y);

return $distance;

}

/**

* 开平方

* 根号下(x2+y2)

* @param unknown_type $x

* @param unknown_type $y

* @return unknown

*/

static function hav($x, $y){

return sqrt($x*$x+$y*$y);

}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics