826220679@qq.com
7 小时以前 69b40096cb0ae965f2a3e92672b880edfe7d04d2
src/zhuye/Coordinate.java
@@ -79,15 +79,20 @@
   /**
    * 解析GNGGA数据返回Coordinate对象列表(增强版,包含高程数据)
    * 解析GNGGA/GPGGA/GBGGA数据返回Coordinate对象列表(增强版,包含高程数据)
    */
   public static void parseGNGGAToCoordinateList(String gnggaData) { 
      if (!isStartSaveGngga || gnggaData == null || gnggaData.isEmpty()) {
         return;
      }
      String[] records = gnggaData.split("\\$GNGGA");
      String cleaned = gnggaData.trim();
      // 使用正则分割支持多种头部
      String[] records = cleaned.split("\\$(GN|GP|GB)GGA");
      for (String record : records) {
         if (record == null || record.trim().isEmpty()) {
            continue;
         }
         Coordinate coord = parseSingleGnggaRecord(record, false);
         if (coord != null) {
            coordinates.add(coord);
@@ -108,9 +113,19 @@
         return null;
      }
      int markerIndex = cleaned.indexOf("$GNGGA");
      int markerIndex = -1;
      String[] headers = {"$GNGGA", "$GPGGA", "$GBGGA"};
      // 找到最早出现的头部
      for (String header : headers) {
         int idx = cleaned.indexOf(header);
         if (idx >= 0 && (markerIndex == -1 || idx < markerIndex)) {
            markerIndex = idx;
         }
      }
      String record = markerIndex >= 0
            ? cleaned.substring(markerIndex + "$GNGGA".length())
            ? cleaned.substring(markerIndex + 6) // 所有头部长度均为6
            : cleaned;
      Coordinate coordinate = parseSingleGnggaRecord(record, true);
@@ -153,7 +168,8 @@
            return null;
         }
         if (fixQuality != 4) {
         // 修改为允许非RTK固定解也能显示位置(只要不是无效定位0即可)
         if (fixQuality == 0) {
            return null;
         }
@@ -260,8 +276,6 @@
         String line;
         StringBuilder gnggaData = new StringBuilder();
         System.out.println("开始读取GNGGA文件: " + file.getAbsolutePath());
         while ((line = reader.readLine()) != null) {
            // 清理数据:移除多余的空格和换行
            line = line.trim();
@@ -279,18 +293,6 @@
         if (gnggaData.length() > 0) {
            parseGNGGAToCoordinateList(gnggaData.toString());
            loadedCount = coordinates.size();
            System.out.println("成功加载 " + loadedCount + " 个坐标点");
            // 输出统计信息
            if (loadedCount > 0) {
               double[] elevationRange = getElevationRange();
               double avgElevation = getAverageElevation();
               System.out.println("海拔统计: 范围=" + String.format("%.2f", elevationRange[0]) +
                     " - " + String.format("%.2f", elevationRange[1]) + "米, 平均=" +
                     String.format("%.2f", avgElevation) + "米");
            }
         } else {
            System.out.println("文件中未找到有效的GNGGA数据");
         }
      } catch (IOException e) {