URI转换Utils

/**
 * 根据Uri获取图片绝对路径,解决Android4.4以上版本Uri转换
 * @param activity
 * @param imageUri
 * @author zq
 * @date 2014-10-12
 */
@TargetApi(19)
public static String getFileAbsolutePath(Activity context, Uri imageUri) {
    if (context == null || imageUri == null)
        return null;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, imageUri)) {
        if (isExternalStorageDocument(imageUri)) {
            String docId = DocumentsContract.getDocumentId(imageUri);
            String[] split = docId.split(":");
            String type = split[0];
            if ("primary".equalsIgnoreCase(type)) {
                return Environment.getExternalStorageDirectory() + "/" + split[1];
            }
        } else if (isDownloadsDocument(imageUri)) {
            String id = DocumentsContract.getDocumentId(imageUri);
            Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
            return getDataColumn(context, contentUri, null, null);
        } else if (isMediaDocument(imageUri)) {
            String docId = DocumentsContract.getDocumentId(imageUri);
            String[] split = docId.split(":");
            String type = split[0];
            Uri contentUri = null;
            if ("image".equals(type)) {
                contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
            } else if ("video".equals(type)) {
                contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
            } else if ("audio".equals(type)) {
                contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            }
            String selection = MediaStore.Images.Media._ID + "=?";
            String[] selectionArgs = new String[] { split[1] };
            return getDataColumn(context, contentUri, selection, selectionArgs);
        }
    } // MediaStore (and general)
    else if ("content".equalsIgnoreCase(imageUri.getScheme())) {
        // Return the remote address
        if (isGooglePhotosUri(imageUri))
            return imageUri.getLastPathSegment();
        return getDataColumn(context, imageUri, null, null);
    }
    // File
    else if ("file".equalsIgnoreCase(imageUri.getScheme())) {
        return imageUri.getPath();
    }
    return null;
}

public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
    Cursor cursor = null;
    String column = MediaStore.Images.Media.DATA;
    String[] projection = { column };
    try {
        cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
        if (cursor != null && cursor.moveToFirst()) {
            int index = cursor.getColumnIndexOrThrow(column);
            return cursor.getString(index);
        }
    } finally {
        if (cursor != null)
            cursor.close();
    }
    return null;
}

/**
 * @param uri The Uri to check.
 * @return Whether the Uri authority is ExternalStorageProvider.
 */
public static boolean isExternalStorageDocument(Uri uri) {
    return "com.android.externalstorage.documents".equals(uri.getAuthority());
}

/**
 * @param uri The Uri to check.
 * @return Whether the Uri authority is DownloadsProvider.
 */
public static boolean isDownloadsDocument(Uri uri) {
    return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}

/**
 * @param uri The Uri to check.
 * @return Whether the Uri authority is MediaProvider.
 */
public static boolean isMediaDocument(Uri uri) {
    return "com.android.providers.media.documents".equals(uri.getAuthority());
}

/**
 * @param uri The Uri to check.
 * @return Whether the Uri authority is Google Photos.
 */
public static boolean isGooglePhotosUri(Uri uri) {
    return "com.google.android.apps.photos.content".equals(uri.getAuthority());
}
好的,这是一个关于QGIS和Python编程的问题。我会尽力回答。 首先,需要安装QGIS软件,并确保已经安装了Python插件。然后,可以使用以下Python脚本实现批量将txt经纬度文件转换成shp文件: ```python import os from qgis.core import * import qgis.utils # 设置QGIS应用程序路径 QgsApplication.setPrefixPath("C:/Program Files/QGIS 3.10", True) qgs = QgsApplication([], False) qgs.initQgis() # 设置经纬度txt文件路径 input_folder = "C:/input_folder" # 设置输出shp文件路径 output_folder = "C:/output_folder" # 遍历输入文件夹中的所有txt文件 for file_name in os.listdir(input_folder): if file_name.endswith(".txt"): # 加载txt文件 uri = "file:///" + os.path.join(input_folder, file_name) + "?delimiter=," layer = QgsVectorLayer(uri, file_name[:-4], "delimitedtext") # 设置坐标系 crs = QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.EpsgCrsId) layer.setCrs(crs) # 保存为shp文件 output_file = os.path.join(output_folder, file_name[:-4] + ".shp") QgsVectorFileWriter.writeAsVectorFormat(layer, output_file, "UTF-8", crs, "ESRI Shapefile") print("Converted {} to {}".format(file_name, output_file)) # 退出QGIS应用程序 qgs.exitQgis() ``` 在这个脚本中,首先设置了QGIS应用程序的路径,并初始化了QGIS应用程序。然后,设置了输入文件夹和输出文件夹的路径,并遍历了输入文件夹中的所有txt文件。对于每个txt文件,首先使用QGIS的delimitedtext数据提供程序加载文件,并设置其坐标系为WGS 84。然后,使用QGIS的ESRI Shapefile格式将图层保存为shp文件。最后,退出QGIS应用程序。 希望这个脚本能够帮助到你。如果你有任何问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑着巨人找巨人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值