张世豪
15 小时以前 a541fbdc8812337de120aad3792a2033a5dd7afe
src/zhuye/Coordinate.java
@@ -79,34 +79,24 @@
   /**
    * 解析GNGGA数据返回Coordinate对象列表(增强版,包含高程数据)
    * 解析GNGGA/GPGGA/GBGGA数据返回Coordinate对象列表(增强版,包含高程数据)
    */
   public static void parseGNGGAToCoordinateList(String gnggaData) { 
      if (!isStartSaveGngga || gnggaData == null || gnggaData.isEmpty()) {
         return;
      }
      // 处理完整的GNGGA数据(可能包含$GNGGA前缀)
      String cleaned = gnggaData.trim();
      if (cleaned.startsWith("$GNGGA")) {
         // 如果数据以$GNGGA开头,直接解析
         String record = cleaned.substring("$GNGGA".length());
      // 使用正则分割支持多种头部
      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);
         }
      } else {
         // 处理可能包含多个$GNGGA记录的情况
         String[] records = cleaned.split("\\$GNGGA");
         for (String record : records) {
            if (record == null || record.trim().isEmpty()) {
               continue;  // 跳过空字符串(split产生的第一个元素可能是空的)
            }
            Coordinate coord = parseSingleGnggaRecord(record, false);
            if (coord != null) {
               coordinates.add(coord);
            }
         }
      }
   }
@@ -123,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);
@@ -168,7 +168,8 @@
            return null;
         }
         if (fixQuality != 4) {
         // 修改为允许非RTK固定解也能显示位置(只要不是无效定位0即可)
         if (fixQuality == 0) {
            return null;
         }