提交 ba6cc387 编写于 作者: Y yuqing

add GEO function get_line_distance_km

上级 c623a6c9
Version 1.20 2015-08-06
* add GEO function get_line_distance_km
Version 1.19 2015-07-24
* correct logger rotate time near 0 clock
......
......@@ -2,7 +2,7 @@
%define LibFastcommonDevel libfastcommon-devel
Name: libfastcommon
Version: 1.0.19
Version: 1.0.20
Release: 1%{?dist}
Summary: c common functions library extracted from my open source projects FastDFS
License: GPL
......
......@@ -21,6 +21,7 @@
#include "logger.h"
#include "hash.h"
#include "sockopt.h"
#include "shared_func.h"
#include "fastcommon.h"
#define MAJOR_VERSION 1
......@@ -40,6 +41,7 @@ const zend_fcall_info empty_fcall_info = { 0, NULL, NULL, NULL, NULL, 0, NULL, N
ZEND_FE(fastcommon_gethostaddrs, NULL)
ZEND_FE(fastcommon_time33_hash, NULL)
ZEND_FE(fastcommon_simple_hash, NULL)
ZEND_FE(fastcommon_get_line_distance_km, NULL)
{NULL, NULL, NULL} /* Must be the last line */
};
......@@ -240,3 +242,35 @@ ZEND_FUNCTION(fastcommon_simple_hash)
RETURN_LONG(simple_hash(str, str_len) & 0x7FFFFFFF);
}
/*
double fastcommon_get_line_distance_km(double lat1, double lon1,
double lat2, double lon2)
return line distance in KM
*/
ZEND_FUNCTION(fastcommon_get_line_distance_km)
{
int argc;
double lat1;
double lon1;
double lat2;
double lon2;
argc = ZEND_NUM_ARGS();
if (argc != 4) {
logError("file: "__FILE__", line: %d, "
"fastcommon_get_line_distance_km parameters count: %d is invalid",
__LINE__, argc);
RETURN_BOOL(false);
}
if (zend_parse_parameters(argc TSRMLS_CC, "dddd", &lat1, &lon1,
&lat2, &lon2) == FAILURE)
{
logError("file: "__FILE__", line: %d, "
"zend_parse_parameters fail!", __LINE__);
RETURN_BOOL(false);
}
RETURN_DOUBLE(get_line_distance_km(lat1, lon1, lat2, lon2));
}
......@@ -21,6 +21,7 @@ ZEND_FUNCTION(fastcommon_version);
ZEND_FUNCTION(fastcommon_gethostaddrs);
ZEND_FUNCTION(fastcommon_time33_hash);
ZEND_FUNCTION(fastcommon_simple_hash);
ZEND_FUNCTION(fastcommon_get_line_distance_km);
#ifdef __cplusplus
}
......
......@@ -23,6 +23,7 @@
#include <dirent.h>
#include <grp.h>
#include <pwd.h>
#include <math.h>
#include "shared_func.h"
#include "logger.h"
#include "sockopt.h"
......@@ -2092,3 +2093,21 @@ int ignore_signal_pipe()
return 0;
}
double get_line_distance_km(const double lat1, const double lon1,
const double lat2, const double lon2)
{
#define FAST_ABS(v) ((v) >= 0 ? (v) : -1 * (v))
#define DISTANCE_PER_LATITUDE 111.111
double lat_value;
double lng_distance;
double lat_distance;
lat_value = FAST_ABS(lat1) < FAST_ABS(lat2) ? lat1 : lat2;
lat_distance = FAST_ABS(lat1 - lat2) * DISTANCE_PER_LATITUDE;
lng_distance = FAST_ABS(lon1 - lon2) * DISTANCE_PER_LATITUDE *
cos(lat_value * 3.1415926 / 180.0);
return sqrt(lat_distance * lat_distance + lng_distance * lng_distance);
}
......@@ -512,6 +512,9 @@ int set_file_utimes(const char *filename, const time_t new_time);
*/
int ignore_signal_pipe();
double get_line_distance_km(const double lat1, const double lon1,
const double lat2, const double lon2);
#ifdef __cplusplus
}
#endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册