public override void OnInspectorGUI() { if (GUILayout.Button("Check File")) { SRTMDataCell cell = new SRTMDataCell((int)TileManager.OriginLatitude, (int)TileManager.OriginLongitude); } }
public static SRTMDataCell GetSRTMDataCell(int latIndex, int longIndex) { if (dataCells == null) { dataCells = new Dictionary <int, Dictionary <int, SRTMDataCell> >(); } if (!dataCells.ContainsKey(latIndex)) { dataCells[latIndex] = new Dictionary <int, SRTMDataCell>(); } if (!dataCells[latIndex].ContainsKey(longIndex)) { dataCells[latIndex][longIndex] = new SRTMDataCell(latIndex, longIndex); Debug.Log("Created new SRTMDataCell " + dataCells[latIndex][longIndex].ToString()); } return(dataCells[latIndex][longIndex]); }
//public float GetInterpolatedHeight(double latitude, double longitude) //{ // int pixelIndexX = (int)Math.Floor((latitude - latIndex) * 1201); // int pixelIndexY = (int)Math.Floor((longitude - longIndex) * 1201); // float x = (float)(((latitude - latIndex) * 1201) % 1); // float y = (float)(((longitude - longIndex) * 1201) % 1); // float f00 = Data[pixelIndexX, pixelIndexY]; // float f01 = Data[pixelIndexX, pixelIndexY + 1]; // float f10 = Data[pixelIndexX + 1, pixelIndexY]; // float f11 = Data[pixelIndexX + 1, pixelIndexY + 1]; // //Bilinear Interpolation // //return f00 * (1f - x) * (1f - y) + f10 * x * (1f - y) + f01 * (1 - x) * y + f11 * x * y; // return BilinearInterpolation(f00, f01, f10, f11, x, y); //} //private float BilinearInterpolation(float f00, float f01, float f10, float f11, float u, float w) //{ // return f00 * (1 - u) * (1 - w) + f01 * (1 - u) * w + f10 * u * (1 - w) + f11 * u * w; //} public float GetInterpolatedHeight(double latitude, double longitude) { int pixelIndexX = (int)Math.Floor((latitude - latIndex) * 1200); int pixelIndexY = (int)Math.Floor((longitude - longIndex) * 1200); float xParam = (float)(((latitude - latIndex) * 1200) % 1); float yParam = (float)(((longitude - longIndex) * 1200) % 1); float[,] controlPoints = new float[4, 4]; int counterX = 0; int counterY = 0; for (int x = pixelIndexX - 1; x <= pixelIndexX + 2; x++) { counterY = 0; for (int y = pixelIndexY - 1; y <= pixelIndexY + 2; y++) { if (x == -1) { // | // * * * * // * * * * // ----*-*-*-*----- // X * * * // | if (y == -1) { SRTMDataCell cell = SRTMHeightProvider.GetSRTMDataCell(latIndex - 1, longIndex - 1); controlPoints[counterX, counterY] = cell.Data[1199, 1199]; if (xParam >= 0.5f || yParam >= 0.5f) { Debug.Log("Parameter: " + x + ", " + y); } } // | // X * * * // ----*-*-*-*----- // * * * * // * * * * // | else if (y == 1201) { SRTMDataCell cell = SRTMHeightProvider.GetSRTMDataCell(latIndex - 1, longIndex + 1); controlPoints[counterX, counterY] = cell.Data[1199, 1]; } // | // X * * * // * * * * // ----*-*-*-*----- // * * * * // | else if (y == 1202) { SRTMDataCell cell = SRTMHeightProvider.GetSRTMDataCell(latIndex - 1, longIndex + 1); controlPoints[counterX, counterY] = cell.Data[1199, 2]; } // | //X * ** //X * ** //X * ** //X * ** // | else { SRTMDataCell cell = SRTMHeightProvider.GetSRTMDataCell(latIndex - 1, longIndex); controlPoints[counterX, counterY] = cell.Data[1199, y]; } } else if (x == 1201) { // | // * * * * // * * * * // ----*-*-*-*----- // * * * X // | if (y == -1) { SRTMDataCell cell = SRTMHeightProvider.GetSRTMDataCell(latIndex + 1, longIndex - 1); controlPoints[counterX, counterY] = cell.Data[1, 1199]; } // | // * * * x // ----*-*-*-*----- // * * * * // * * * * // | else if (y == 1201) { SRTMDataCell cell = SRTMHeightProvider.GetSRTMDataCell(latIndex + 1, longIndex + 1); controlPoints[counterX, counterY] = cell.Data[1, 1]; } //// | //// * * * x //// * * * * //// ----*-*-*-*----- //// * * * * //// | //else if (y == 1202) //{ // SRTMDataCell cell = SRTMHeightProvider.GetSRTMDataCell(latIndex + 1, longIndex + 1); // controlPoints[counterX, counterY] = cell.Data[1, 2]; //} // | // * * * x // * * * x // * * * x // * * * x // | else { SRTMDataCell cell = SRTMHeightProvider.GetSRTMDataCell(latIndex + 1, longIndex); controlPoints[counterX, counterY] = Data[1, y]; } } //else if (x == 1202) //{ // // | // // * * * * // // * * * * // // ----*-*-*-*----- // // * * * X // // | // if (y == -1) // { // SRTMDataCell cell = SRTMHeightProvider.GetSRTMDataCell(latIndex + 1, longIndex - 1); // controlPoints[counterX, counterY] = cell.Data[2, 1199]; // } // // | // // * * * x // // ----*-*-*-*----- // // * * * * // // * * * * // // | // else if (y == 1201) // { // SRTMDataCell cell = SRTMHeightProvider.GetSRTMDataCell(latIndex + 1, longIndex + 1); // controlPoints[counterX, counterY] = cell.Data[2, 1]; // } // // | // // * * * x // // * * * * // // ----*-*-*-*----- // // * * * * // // | // else if (y == 1202) // { // SRTMDataCell cell = SRTMHeightProvider.GetSRTMDataCell(latIndex + 1, longIndex + 1); // controlPoints[counterX, counterY] = cell.Data[2, 2]; // } // // | // // * * * x // // * * * x // // * * * x // // * * * x // // | // else // { // SRTMDataCell cell = SRTMHeightProvider.GetSRTMDataCell(latIndex + 1, longIndex); // controlPoints[counterX, counterY] = Data[2, y]; // } //} else { // // * * * * // * * * * // ----*-*-*-*----- // X X X X // if (y == -1) { SRTMDataCell cell = SRTMHeightProvider.GetSRTMDataCell(latIndex, longIndex - 1); controlPoints[counterX, counterY] = cell.Data[x, 1199]; } // // X X X X // ----*-*-*-*----- // * * * * // * * * * // else if (y == 1201) { SRTMDataCell cell = SRTMHeightProvider.GetSRTMDataCell(latIndex, longIndex + 1); controlPoints[counterX, counterY] = cell.Data[x, 1]; } //// //// X X X X //// * * * * //// ----*-*-*-*----- //// * * * * //// //else if (y == 1202) //{ // SRTMDataCell cell = SRTMHeightProvider.GetSRTMDataCell(latIndex, longIndex + 1); // controlPoints[counterX, counterY] = cell.Data[x, 1]; //} // // X X X X // X X X X // X X X X // X X X X // else { controlPoints[counterX, counterY] = Data[x, y]; } } counterY++; } counterX++; } //Bilinear Interpolation //return f00 * (1f - x) * (1f - y) + f10 * x * (1f - y) + f01 * (1 - x) * y + f11 * x * y; return(CardinalSplinePatchPoint(controlPoints, xParam, yParam)); }