add GEO function get_line_distance_km
parent
c623a6c935
commit
ba6cc38703
3
HISTORY
3
HISTORY
|
|
@ -1,4 +1,7 @@
|
||||||
|
|
||||||
|
Version 1.20 2015-08-06
|
||||||
|
* add GEO function get_line_distance_km
|
||||||
|
|
||||||
Version 1.19 2015-07-24
|
Version 1.19 2015-07-24
|
||||||
* correct logger rotate time near 0 clock
|
* correct logger rotate time near 0 clock
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
%define LibFastcommonDevel libfastcommon-devel
|
%define LibFastcommonDevel libfastcommon-devel
|
||||||
|
|
||||||
Name: libfastcommon
|
Name: libfastcommon
|
||||||
Version: 1.0.19
|
Version: 1.0.20
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: c common functions library extracted from my open source projects FastDFS
|
Summary: c common functions library extracted from my open source projects FastDFS
|
||||||
License: GPL
|
License: GPL
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@
|
||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
#include "sockopt.h"
|
#include "sockopt.h"
|
||||||
|
#include "shared_func.h"
|
||||||
#include "fastcommon.h"
|
#include "fastcommon.h"
|
||||||
|
|
||||||
#define MAJOR_VERSION 1
|
#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_gethostaddrs, NULL)
|
||||||
ZEND_FE(fastcommon_time33_hash, NULL)
|
ZEND_FE(fastcommon_time33_hash, NULL)
|
||||||
ZEND_FE(fastcommon_simple_hash, NULL)
|
ZEND_FE(fastcommon_simple_hash, NULL)
|
||||||
|
ZEND_FE(fastcommon_get_line_distance_km, NULL)
|
||||||
{NULL, NULL, NULL} /* Must be the last line */
|
{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);
|
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_gethostaddrs);
|
||||||
ZEND_FUNCTION(fastcommon_time33_hash);
|
ZEND_FUNCTION(fastcommon_time33_hash);
|
||||||
ZEND_FUNCTION(fastcommon_simple_hash);
|
ZEND_FUNCTION(fastcommon_simple_hash);
|
||||||
|
ZEND_FUNCTION(fastcommon_get_line_distance_km);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
|
#include <math.h>
|
||||||
#include "shared_func.h"
|
#include "shared_func.h"
|
||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
#include "sockopt.h"
|
#include "sockopt.h"
|
||||||
|
|
@ -2092,3 +2093,21 @@ int ignore_signal_pipe()
|
||||||
return 0;
|
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();
|
int ignore_signal_pipe();
|
||||||
|
|
||||||
|
double get_line_distance_km(const double lat1, const double lon1,
|
||||||
|
const double lat2, const double lon2);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue