0

我正在 Android 上创建一个谷歌地图应用程序,但我遇到了问题。我有文本格式的高程数据。看起来像这样

longtitude latitude elevation
491222     163550   238.270000
491219     163551   242.130000
etc.

此海拔信息存储在 10x10 米的网格中。这意味着每10米是一个海拔值。该文本太大,以至于我可以在那里找到我需要的信息,因此我想用这些信息创建一个位图。

我需要做的是在某个时刻扫描我所在位置周围的海拔高度。可能有很多点要扫描,所以我想让它快点。这就是为什么我在考虑位图。

我不知道这是否可能,但我的想法是会有一个我的文本网格大小的位图,并且每个像素中都有关于海拔的信息。所以它应该就像根据坐标放置在该地点的谷歌地图上的隐形地图,当我需要了解我所在位置的高程时,我只需查看这些像素并读取高程值。

你认为有可能创建这样的位图吗?我只有这个想法,但不知道如何实现它。例如,如何在其中存储高程信息,如何读取该信息,如何创建位图。我将非常感谢您能给我的每一个建议、指导和来源。太感谢了!

4

2 回答 2

0

BufferedImage 在 android 中不可用,但可以使用android.graphics.Bitmap 。位图必须以无损格式保存(例如 PNG)。

double[] elevations={238.27,242.1301,222,1};
int[] pixels = doublesToInts(elevations);

    //encoding
Bitmap bmp=Bitmap.createBitmap(2, 2, Config.ARGB_8888);
bmp.setPixels(pixels, 0, 2, 0, 0, 2, 2);
File file=new File(getCacheDir(),"bitmap.png");
try {
    FileOutputStream fos = new FileOutputStream(file);
    bmp.compress(CompressFormat.PNG, 100, fos);
    fos.close();
} catch (IOException e) {
    e.printStackTrace();
}

//decoding
Bitmap out=BitmapFactory.decodeFile(file.getPath());
if (out!=null)
{   
    int [] outPixels=new int[out.getWidth()*out.getHeight()];
    out.getPixels(outPixels, 0, out.getWidth(), 0, 0, out.getWidth(), out.getHeight());
    double[] outElevations=intsToDoubles(outPixels);
}

static int[] doublesToInts(double[] elevations)
{
    int[] out=new int[elevations.length];
    for (int i=0;i<elevations.length;i++)
    {
        int tmp=(int) (elevations[i]*1000000);          
        out[i]=0xFF000000|tmp>>8;
    }
    return out;
}
static double[] intsToDoubles(int[] pixels)
{
    double[] out=new double[pixels.length];
    for (int i=0;i<pixels.length;i++)
        out[i]=(pixels[i]<<8)/1000000.0;
    return out;
}
于 2013-04-28T12:28:41.777 回答
0

作为具有红色、绿色、蓝色和 alpha(不透明度/透明度)的颜色。从所有像素透明开始。并将对应的值填写为(R,G,B),不透明(高八位。(或“不填写”的其他约定。)

RGB 构成整数的低 24 位。

x 和 y 的经度和纬度

高度为整数减去 0x01_00_00_00。反之亦然:

double elevation = 238.27;
int code = (int)(elevation * 100);
Color c = new Color(code); // BufferedImage uses int, so 'code' sufThat does not fices.
code = c.getRGB();
elevation = ((double)code) / 100;  

BufferedImagesetRGB(code)左右(有不同的可能性)。

通过谷歌搜索 BufferedImage 等来使用 Oracles javadoc。

要填充未使用的像素,请在第二个 BufferedImage 中进行平均。所以永远不会平均到原始像素。

PS 我的荷兰海拔可能小于零,所以也许 + ... 。

于 2013-04-28T11:20:30.153 回答