示例#1
0
  void DataTileCache::ResolveAreasFromParent(Tile& tile,
                                              const Tile& parentTile,
                                              const GeoBox& boundingBox,
                                              const TypeInfoSet& areaTypes)
  {
    if (areaTypes.Intersects(parentTile.GetAreaData().GetTypes())) {
      TypeInfoSet subset(areaTypes);

      subset.Intersection(parentTile.GetAreaData().GetTypes());

      std::vector<AreaRef> data;

      data.reserve(parentTile.GetAreaData().GetDataSize());

      parentTile.GetAreaData().CopyData([&](const AreaRef& area) {
        if (areaTypes.IsSet(area->GetType())) {
          GeoBox areaBoundingBox;

          area->GetBoundingBox(areaBoundingBox);

          if (areaBoundingBox.Intersects(boundingBox)) {
            data.push_back(area);
          }
        }
      });

      tile.GetAreaData().SetPrefillData(subset,
                                        data);
    }
  }
示例#2
0
  void DataTileCache::ResolveWaysFromParent(Tile& tile,
                                             const Tile& parentTile,
                                             const GeoBox& boundingBox,
                                             const TypeInfoSet& wayTypes)
  {
    if (wayTypes.Intersects(parentTile.GetWayData().GetTypes())) {
      TypeInfoSet subset(wayTypes);

      subset.Intersection(parentTile.GetWayData().GetTypes());

      std::vector<WayRef> data;

      data.reserve(parentTile.GetWayData().GetDataSize());

      parentTile.GetWayData().CopyData([&](const WayRef& way) {
        if (wayTypes.IsSet(way->GetType())) {
          GeoBox wayBoundingBox;

          way->GetBoundingBox(wayBoundingBox);

          if (wayBoundingBox.Intersects(boundingBox)) {
            data.push_back(way);
          }
        }
      });

      tile.GetWayData().SetPrefillData(subset,
                                       data);
    }
  }