如何从捕获的图像中获取经度和纬度 - Android

时间:2013-07-17 14:05:04

标签: android android-location

我正在编写代码以从图像捕获中检索lat和long。我可以使用相机事件和onActivityResult拍摄图像。

eprotected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Uri _uri = null;
    Cursor cursor = null;

    try {
        final int PICK_IMAGE = 1;
        if (requestCode == PICK_IMAGE && data != null
                && data.getData() != null) {
            _uri = data.getData();

            if (_uri != null) {
                // User had pick an image.
                cursor = getContentResolver()
                        .query(_uri,
                                new String[] { android.provider.MediaStore.Images.ImageColumns.DATA },
                                null, null, null);
                cursor.moveToFirst();

                // Link to the image
                final String imageFilePath = cursor.getString(0);
                // Toast.makeText(getApplicationContext(), imageFilePath,
                // Toast.LENGTH_LONG).show();
                imageLocation= imageFilePath;

                File imgFile = new File(imageFilePath);
                if (imgFile.exists()) {
                    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
                    captureImage.setImageBitmap(myBitmap);

                }
                cursor.close();
            } else {

                // Toast.makeText(getApplicationContext(), getSdCard,
                // Toast.LENGTH_LONG).show();
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    } catch (Exception e) {
        if (cursor == null || cursor.equals("")) {
            String getSdCard = _uri.getPath();
            imageLocation= getSdCard;
            File imgFile = new File(getSdCard);
            if (imgFile.exists()) {

                Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());

                captureImage.setImageBitmap(myBitmap);

            }
        }
        e.printStackTrace();
    }
}

从这个角度来看,我们从图像中得到经度和纬度。我搜索了一会儿,我无法得到位置。

3 个答案:

答案 0 :(得分:1)

相机可能会也可能不会使用图像捕获位置数据,这取决于用户的相机应用程序及其使用的任何设置(您可以禁用地理标记照片,默认情况下,在大多数Android手机上禁用它)。如果图像附加了任何位置数据,您可以使用ExifInterface和图像路径,或使用MediaStore.Images.Media database lat/lng columns找到它。

您永远不能保证始终可以获取任何照片的位置数据。可能会禁用提供程序(gps / wifi / cell),可能会禁用地理标记,即使两者都启用,手机也可能无法获取足够且足够准确的地理位置。

答案 1 :(得分:1)

Monkeyless建议的是正确的,使用Exifinterface。在这里接受的答案中有一个有效的例子:

How to get the latititude and longitude of an image in sdcard to my application?

答案 2 :(得分:0)

当您通过移动设备捕获图像时,它通常仅使用捕获时刻的日期和时间将图像保存在移动设备上。如果要为图片添加坐标,则必须在捕获期间使用Android中的LocationManager类。通过这个,您可以获得捕获图像的长/纬度坐标。

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

请注意,如果您要使用上述代码段,则必须在Android清单文件中包含下一个权限

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

在此处阅读更多内容:android location strategies