Redis源代码中的“ area”和“ BoundingBox”有什么区别

http://download.redis.io/redis-stable/deps/geohash-

int/geohash_helper.c

通过上面的URL,我们知道有两个概念,一个是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;

}

回答:

通常,绑定盒是将包含对象的最小矩形盒。我无法说说Redis中GeoHashArea的确切功能,但是由于您暗示它们具有相似的用途,如果它们都代表一个地理区域,则与简单的矩形相比,GeoHashArea最有可能是一个更详细的多边形表示形式像geohashBoundingBox。

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

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

修改其值,因此geohashGetCoordRange将对不同的值再次调用该函数。

以上是 Redis源代码中的“ area”和“ BoundingBox”有什么区别 的全部内容, 来源链接: utcz.com/qa/405806.html

回到顶部