はここNPMパッケージs2geometryノードからC++の例です。コードは、私は同じタスクが発生し、S2RegionCoverer.getCovering(S2Region region, ArrayList<S2CellId> covering)
方法の使用とそれを解決していた
const double kEarthCircumferenceMeters = 1000 * 40075.017;
double EarthMetersToRadians(double meters) {
return (2 * M_PI) * (meters/kEarthCircumferenceMeters);
}
string CellToString(const S2CellId& id) {
return StringPrintf("%d:%s", id.level(), id.ToToken().c_str());
}
// Generates a list of cells at the target s2 cell levels which cover
// a cap of radius 'radius_meters' with center at lat & lng.
vector<string> SearchCells(double lat, double lng, double radius_meters,
int min_level, int max_level) {
const double radius_radians = EarthMetersToRadians(radius_meters);
const S2Cap region = S2Cap::FromAxisHeight(
S2LatLng::FromDegrees(lat, lng).Normalized().ToPoint(),
(radius_radians * radius_radians)/2);
S2RegionCoverer coverer;
coverer.set_min_level(min_level);
coverer.set_max_level(max_level);
vector<S2CellId> covering;
coverer.GetCovering(region, &covering);
vector<string> v(covering.size());
for (size_t i = 0; i < covering.size(); ++i) {
v[i] = CellToString(covering[i]);
}
return v;
}
@tarantulaは - あなたのポストに続いhttp://blog.christianperone.com/2015/08/googles-s2 -geometry-on-the-sphere-cells-and-hilbert-curve /は円形領域でどのように行うのか把握できませんでした。同じようにあなたの助けを感謝します。 – Darshan