예제 #1
0
  /// Converts quadkey to bounding box
  static BoundingBox quadKeyToBoundingBox(const QuadKey &quadKey) {
    GeoCoordinate minPoint, maxPoint;
    int levelOfDetail = quadKey.levelOfDetail;
    minPoint.latitude = tileYToLat(quadKey.tileY + 1, levelOfDetail);
    maxPoint.latitude = tileYToLat(quadKey.tileY, levelOfDetail);
    minPoint.longitude = tileXToLon(quadKey.tileX, levelOfDetail);
    maxPoint.longitude = tileXToLon(quadKey.tileX + 1, levelOfDetail);

    return BoundingBox(minPoint, maxPoint);
  }
예제 #2
0
파일: OSMTileLayer.cpp 프로젝트: atdyer/SMT
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);

	}
}