From e5a090685df3d5e96a37b141d9a1d002d36f16f2 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期五, 14 二月 2025 16:53:43 +0800 Subject: [PATCH] 1.web地图添加管网显示。 2.安卓原生添加管网信息的获取。 3.安卓原生添加管网信息的本地持久化(SQLite数据库)。 4.实现图例用户的选择状态按钮的持久化。 5.实现自定义搜索按钮的实现。 6.实现搜索后弹出界面的相关功能开发。 --- app/src/main/java/com/dayu/pipirrapp/utils/MapJpgUtils.java | 128 ++++++++++++++++++++++++++++++++++++------ 1 files changed, 110 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/dayu/pipirrapp/utils/MapJpgUtils.java b/app/src/main/java/com/dayu/pipirrapp/utils/MapJpgUtils.java index 80c5055..f2f6ef7 100644 --- a/app/src/main/java/com/dayu/pipirrapp/utils/MapJpgUtils.java +++ b/app/src/main/java/com/dayu/pipirrapp/utils/MapJpgUtils.java @@ -1,6 +1,11 @@ package com.dayu.pipirrapp.utils; -import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.util.Log; + +import com.dayu.pipirrapp.MyApplication; import java.io.File; import java.io.FileOutputStream; @@ -8,6 +13,8 @@ import java.io.OutputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.HashMap; +import java.util.Map; import okhttp3.ResponseBody; @@ -18,14 +25,17 @@ * 澶囨敞锛� 瀹屾垚鍦板浘缂撳瓨绛栫暐 */ public class MapJpgUtils { - static MapJpgUtils mapJpgUtils; - Context context; + static String TAG = "MapJpgUtils"; - public static MapJpgUtils getInsatance(Context context) { + static MapJpgUtils mapJpgUtils; + + String childName = "mapCache"; + String fileType = ".jpg"; + + public static MapJpgUtils getInsatance() { if (mapJpgUtils == null) { mapJpgUtils = new MapJpgUtils(); } - mapJpgUtils.context = context; return mapJpgUtils; } @@ -33,7 +43,8 @@ // 鑾峰彇缂撳瓨鐡︾墖鏂囦欢 public File getCachedTile(String url) { String fileName = hashUrl(url); // URL 杞崲涓哄敮涓�鐨勫搱甯屽�兼垨鏂囦欢鍚� - File cacheDir = new File(context.getCacheDir(), "mapCache"); // 鐡︾墖瀛樺偍鐩綍 + String folderPath = extractTileInfoFromUrl(url); + File cacheDir = new File(MyApplication.myApplication.getCacheDir() + File.separator + childName + File.separator + folderPath); // 鐡︾墖瀛樺偍鐩綍 if (!cacheDir.exists()) { cacheDir.mkdirs(); } @@ -50,7 +61,7 @@ for (byte b : hashBytes) { sb.append(String.format("%02x", b)); } - return sb.toString(); + return sb.toString() + fileType; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return String.valueOf(url.hashCode()); @@ -61,12 +72,13 @@ public boolean saveTileToCache(String url, ResponseBody body) { try { - File tileFile = new File(context.getCacheDir() + File.separator + hashUrl(url) + ".png"); + //浠� URL 涓彁鍙栫摝鐗囩殑 Z/X/Y 鍊� + String folderPath = extractTileInfoFromUrl(url); + File tileFile = new File(MyApplication.myApplication.getCacheDir() + File.separator + childName + File.separator + folderPath + File.separator + hashUrl(url)); if (!tileFile.getParentFile().exists()) { tileFile.getParentFile().mkdirs(); } - InputStream inputStream = null; OutputStream outputStream = null; @@ -90,7 +102,25 @@ outputStream.flush(); // 淇濆瓨瀹屾垚鍚庯紝璁板綍缂撳瓨鍒涘缓鏃堕棿 tileFile.setLastModified(System.currentTimeMillis()); - return true; + if (validateImageFile(tileFile)) { + // 鏍¢獙涓嬭浇鏂囦欢澶у皬鍜屽疄闄呭ぇ灏忔槸鍚︿竴鑷� + long actualFileSize = tileFile.length(); + if (fileSizeDownloaded == actualFileSize) { + Log.d(TAG, "鏂囦欢澶у皬鍖归厤锛屼笅杞藉ぇ灏忥細" + fileSizeDownloaded + " 瀛楄妭锛屽疄闄呭ぇ灏忥細" + actualFileSize + " 瀛楄妭"); + return true; + } else { + //淇濆瓨澶辫触,鍒犻櫎鏂囦欢 + tileFile.delete(); + Log.e(TAG, "鏂囦欢澶у皬涓嶅尮閰嶏紝涓嬭浇澶у皬锛�" + fileSizeDownloaded + " 瀛楄妭锛屽疄闄呭ぇ灏忥細" + actualFileSize + " 瀛楄妭"); + return false; + } + } else { + //淇濆瓨澶辫触,鍒犻櫎鏂囦欢 + tileFile.delete(); + Log.d(TAG, "淇濆瓨澶辫触锛屾枃浠舵病鏈変繚瀛樺畬鏁�"); + return false; + } + } catch (Exception e) { return false; } finally { @@ -114,7 +144,7 @@ */ public boolean isHasFiles(String url) { String fileName = hashUrl(url); // URL 杞崲涓哄敮涓�鐨勫搱甯屽�兼垨鏂囦欢鍚� - File cacheDir = new File(context.getCacheDir(), "mapCache"); // 鐡︾墖瀛樺偍鐩綍 + File cacheDir = new File(MyApplication.myApplication.getCacheDir(), "mapCache"); // 鐡︾墖瀛樺偍鐩綍 if (!cacheDir.exists()) { cacheDir.mkdirs(); } @@ -131,20 +161,82 @@ return (System.currentTimeMillis() - lastModified) > cacheValidity; } - // 娓呯悊鏃х紦瀛� - private void clearOldCacheFiles() { - File cacheDir = new File(context.getCacheDir(), "mapCache"); + /** + * 鍒ゆ柇褰撳墠鏂囦欢鏄惁瀹屾暣 + * + * @param url + * @return + */ + public boolean isComplete(String url, long size) { + return false; + } + + // 娓呯悊鎵�鏈夋棫缂撳瓨 + public void clearOldCacheFiles() { + File cacheDir = new File(MyApplication.myApplication.getCacheDir(), "mapCache"); if (cacheDir.exists()) { File[] files = cacheDir.listFiles(); if (files != null) { for (File file : files) { - // 娓呯悊瓒呰繃 7 澶╃殑缂撳瓨鏂囦欢 - if (System.currentTimeMillis() - file.lastModified() > 7 * 24 * 60 * 60 * 1000) { - file.delete(); - } + file.delete(); } } } } + //娓呯悊鍗曚釜缂撳瓨 + public void clearCacheFile(String url) { + File file = new File(MyApplication.myApplication.getCacheDir() + File.separator + childName + File.separator + hashUrl(url) + fileType); + if (file.exists()) { + file.delete(); + } + } + + + // 鏍¢獙鍥剧墖鐨勫畬鏁存�� + public boolean validateImageFile(File tileFile) { + if (!tileFile.exists()) { + // 鏂囦欢涓嶅瓨鍦紝瑙嗕负涓嶅畬鏁� + return false; + } + // 灏濊瘯瑙f瀽鍥惧儚 + Bitmap bitmap = BitmapFactory.decodeFile(tileFile.getAbsolutePath()); + if (bitmap != null) { + // 鍥惧儚瑙f瀽鎴愬姛锛屾枃浠跺畬鏁� + Log.d(TAG, "鍥惧儚瑙f瀽鎴愬姛锛屾枃浠跺畬鏁�"); + // 瑙f瀽瀹屽浘鍍忓悗锛屾墜鍔ㄥ洖鏀禕itmap鐨勫唴瀛� + bitmap.recycle(); + return true; + } else { + // 鍥惧儚瑙f瀽澶辫触锛屾枃浠朵笉瀹屾暣鎴栨崯鍧� + Log.e(TAG, "鍥惧儚瑙f瀽澶辫触锛屾枃浠朵笉瀹屾暣鎴栨崯鍧�"); + return false; + } + } + + + /** + * 鍒ゆ柇璇锋眰鏄惁涓哄ぉ鍦板浘鐡︾墖 + * + * @param url + * @return + */ + public boolean isTianDiTuTileRequest(String url) { + return url.contains("tianditu.gov.cn") && url.contains("wmts") && url.contains("TILEMATRIX"); + } + + + /** + * 浠� URL 涓彁鍙栫摝鐗囩殑 Z/X/Y 鍊� + * + * @param url + * @return + */ + public String extractTileInfoFromUrl(String url) { + Uri uri = Uri.parse(url); + Map<String, String> tileInfo = new HashMap<>(); + String path = uri.getQueryParameter("TILEMATRIX") + File.separator + uri.getQueryParameter("TILEROW") + File.separator + uri.getQueryParameter("TILECOL"); + return path; + } + } -- Gitblit v1.8.0