gpt4 book ai didi

redis - 从Redis的源码看 "area"和 "BoundingBox"有什么区别

转载 作者:可可西里 更新时间:2023-11-01 11:31:48 26 4
gpt4 key购买 nike

http://download.redis.io/redis-stable/deps/geohash-int/geohash_helper.c从上面的网址,我们知道有两个概念,一个是geohashBoundingBox,一个是area,我的问题是它们有什么区别,为什么我们都需要它们?还有为什么句子“geohashGetCoordRange(&long_range, &lat_range);”被调用了两次?

GeoHashRadius geohashGetAreasByRadius(double longitude, double latitude,    double radius_meters) {
GeoHashRange long_range, lat_range;
GeoHashRadius radius = { { 0 } };
GeoHashBits hash = { 0 };
GeoHashNeighbors neighbors = { { 0 } };
GeoHashArea area = { { 0 } };
double min_lon, max_lon, min_lat, max_lat;
double bounds[4];
int steps;

geohashBoundingBox(longitude, latitude, radius_meters, bounds);
min_lon = bounds[0];
min_lat = bounds[1];
max_lon = bounds[2];
max_lat = bounds[3];

steps = geohashEstimateStepsByRadius(radius_meters,latitude);

geohashGetCoordRange(&long_range, &lat_range);
geohashEncode(&long_range, &lat_range, longitude, latitude, steps, &hash);
geohashNeighbors(&hash, &neighbors);
geohashGetCoordRange(&long_range, &lat_range);
geohashDecode(long_range, lat_range, hash, &area);

if (area.latitude.min < min_lat) {
GZERO(neighbors.south);
GZERO(neighbors.south_west);
GZERO(neighbors.south_east);
}
if (area.latitude.max > max_lat) {
GZERO(neighbors.north);
GZERO(neighbors.north_east);
GZERO(neighbors.north_west);
}
if (area.longitude.min < min_lon) {
GZERO(neighbors.west);
GZERO(neighbors.south_west);
GZERO(neighbors.north_west);
}
if (area.longitude.max > max_lon) {
GZERO(neighbors.east);
GZERO(neighbors.south_east);
GZERO(neighbors.north_east);
}
radius.hash = hash;
radius.neighbors = neighbors;
radius.area = area;
return radius;

最佳答案

一般来说,绑定(bind)框是包含对象的最小矩形框。我不能说出 GeoHashArea 在 redis 中的确切功能,但由于你暗示它们具有相似的目的,如果它们都代表一个地理区域,那么 GeoHashArea 肯定是一个区域的更详细的多边形表示,而不是一个简单的矩形像 geohashBoundingBox。

对于你的第二个问题,大概是因为变量 long_rangelat_range 是通过引用传递的,所以有可能

geohashEncode(&long_range, &lat_range, longitude, latitude, steps, &hash);

修改它们的值,因此函数 geohashGetCoordRange 会针对不同的值再次调用。

关于redis - 从Redis的源码看 "area"和 "BoundingBox"有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39461221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com