我正在编写代码以从图像捕获中检索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();
}
}
从这个角度来看,我们从图像中得到经度和纬度。我搜索了一会儿,我无法得到位置。
答案 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