// Converts Latitude/Longitude to quadkey static QuadKey latLonToQuadKey(const GeoCoordinate& coordinate, int levelOfDetail) { QuadKey quadKey; quadKey.tileX = lonToTileX(clamp(coordinate.longitude, -179.9999999, 179.9999999), levelOfDetail); quadKey.tileY = latToTileY(clamp(coordinate.latitude, -85.05112877, 85.05112877), levelOfDetail); quadKey.levelOfDetail = levelOfDetail; return quadKey; }
void OSMTileLayer::RefreshTiles() { if (tileServer && renderSurface && camera && fort14) { int newZoom = CalculateZoomLevel(surfaceDimension, 1.2); if (newZoom != zoom) { renderSurface->ClearTextures(); } zoom = newZoom; // Convert screen coordinates to normalized coordinates float normX, normY; camera->GetUnprojectedPoint(0, 0, &normX, &normY); // Convert normalized coordiantes to lat/long float geoX = fort14->GetUnprojectedX(normX); float geoY = fort14->GetUnprojectedY(normY); // Get the x, y tile coordinates int newX = lonToTileX(geoX, zoom); int newY = latToTileY(geoY, zoom); if (newX != x || newY != y) { // Convert tile coordinates to lat/long float geoXnew = tileXToLon(newX, zoom); float geoYnew = tileYToLat(newY, zoom); float geoXnewNext = tileXToLon(newX + 1, zoom); float geoYnewNext = tileYToLat(newY + 1, zoom); // Convert lat/long to normalized coordinates float normXnew = fort14->GetNormalizedX(geoXnew); float normYnew = fort14->GetNormalizedY(geoYnew); float normXnewNext = fort14->GetNormalizedX(geoXnewNext); float normYnewNext = fort14->GetNormalizedY(geoYnewNext); // Calculate the width and height float width = normXnewNext - normXnew; float height = normYnewNext - normYnew; renderSurface->UpdateSurfacePosition(normXnew, normYnew, width, height); // std::cout << "Old Coords: (" << x << ", " << y << ")\t" << // "New Coords: (" << newX << ", " << newY << ")" << std::endl; x = newX; y = newY; } if (currentType == SatelliteMap) tileServer->setBoundingBox(SatelliteTile, x, y, zoom); else if (currentType == StreetMap) tileServer->setBoundingBox(StreetTile, x, y, zoom); else if (currentType == TerrainMap) tileServer->setBoundingBox(TerrainTile, x, y, zoom); } }
/// Converts Latitude/Longitude to quadkey static QuadKey GeoCoordinateToQuadKey(const GeoCoordinate &coordinate, int levelOfDetail) { return QuadKey(levelOfDetail, lonToTileX(clamp(coordinate.longitude, -179.9999999, 179.9999999), levelOfDetail), latToTileY(clamp(coordinate.latitude, -85.05112877, 85.05112877), levelOfDetail)); }