diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/API_DOCUMENTATION.md b/API_DOCUMENTATION.md new file mode 100644 index 0000000..e67b419 --- /dev/null +++ b/API_DOCUMENTATION.md @@ -0,0 +1,1734 @@ +# GasFlux Web API 文档 + +## 概述 + +GasFlux Web API 是一个基于 Flask 的 RESTful API,用于上传数据文件、执行气体通量分析处理,并下载处理结果。该 API 支持异步处理,能够处理大量数据并提供实时状态监控。 + +## 快速开始 + +### 基础信息 + +- **基础 URL**: `http://localhost:5000` +- **认证**: 无需认证 +- **数据格式**: JSON +- **文件大小限制**: 100MB +- **支持的文件类型**: + - 数据文件: `.xlsx`, `.xls` + - 配置文件: `.yaml`, `.yml` + +### 完整工作流程示例 + +```python +import requests +import time + +def process_gasflux_data(): + # 1. 检查 API 健康状态 + health_response = requests.get('http://localhost:5000/health') + print(f"API Status: {health_response.json()['status']}") + + # 2. 上传数据文件 + with open('data.xlsx', 'rb') as f: + files = {'file': f} + upload_response = requests.post('http://localhost:5000/upload', files=files) + + result = upload_response.json() + task_id = result['job_id'] + print(f"任务已创建: {task_id}") + + # 3. 监控处理状态 + while True: + status_response = requests.get(f'http://localhost:5000/task/{task_id}') + status = status_response.json() + + print(f"Status: {status['status']} - {status['message']}") + + if status['status'] == 'completed': + # 4. 下载结果文件 + for result_file in status['results']: + download_url = f"http://localhost:5000{result_file['download_url']}" + download_response = requests.get(download_url) + + with open(result_file['name'], 'wb') as f: + f.write(download_response.content) + print(f"Downloaded: {result_file['name']}") + break + elif status['status'] == 'failed': + print(f"Task failed: {status.get('error', '未知错误')}") + break + + time.sleep(3) # 每3秒检查一次状态 +``` + +## API 端点 + +### 🔍 监控和健康检查 + +#### 1. 获取健康状态 +**端点**: `GET /health` + +**描述**: 获取 API 的健康状态、系统信息和性能指标。健康检查会评估多个关键指标,当任何指标超出正常范围时,服务状态会标记为 `degraded`。 + +**健康检查逻辑**: +- **存储检查**: 验证上传和输出文件夹是否可写 +- **负载检查**: 活跃任务数量超过20个时发出警告 +- **错误率检查**: HTTP错误率超过10%时标记为不健康 +- **综合评估**: 任何一项检查失败都会影响整体健康状态 + +**响应示例** - 健康状态 (200): +```json +{ + "code": 200, + "message": "健康检查完成", + "data": { + "status": "healthy", + "version": "1.0.0", + "timestamp": 1705257600.123, + "uptime": "2h 30m 15s", + "storage": { + "uploads_writable": true, + "outputs_writable": true + }, + "tasks": { + "active_count": 2, + "total_tracked": 15, + "total_processed": 13, + "success_rate_percent": 92.31 + }, + "performance": { + "requests_per_second": 0.08, + "avg_response_time_ms": 234.56, + "error_rate_percent": 1.5 + } + } +} +``` + +**响应示例** - 不健康状态 (503): +```json +{ + "code": 503, + "message": "服务不可用", + "data": { + "status": "degraded", + "version": "1.0.0", + "timestamp": 1705257600.123, + "uptime": "1h 30m 45s", + "storage": { + "uploads_writable": true, + "outputs_writable": true + }, + "tasks": { + "active_count": 0, + "total_tracked": 5, + "total_processed": 3, + "success_rate_percent": 60.0 + }, + "performance": { + "requests_per_second": 0.12, + "avg_response_time_ms": 145.67, + "error_rate_percent": 50.0 + }, + "issues": [ + "错误率过高 (50.0%)", + "活跃任务数量过多 (25)" + ] + } +} +``` + +**状态码**: +- `200`: API 健康 (`status: "healthy"`) +- `503`: API 不健康 (`status: "degraded"`) - 服务不可用 + +**健康状态说明**: +- **healthy**: 所有检查通过,服务正常运行 +- **degraded**: 部分检查失败,服务仍可运行但需要关注 + - 错误率 > 10%: HTTP请求错误率过高 + - 活跃任务 > 20: 系统负载过高 + - 存储不可写: 文件系统权限问题 + +**字段说明**: +- `storage.uploads_writable`: 上传文件夹是否可写 +- `storage.outputs_writable`: 输出文件夹是否可写 +- `tasks.active_count`: 当前活跃的任务数量 +- `performance.error_rate_percent`: HTTP请求错误率百分比 +- `issues`: 当状态为degraded时的具体问题列表 + +--- + +#### 2. 获取系统统计信息 +**端点**: `GET /stats` + +**描述**: 获取详细的 API 统计信息、性能指标和系统监控数据,包括请求统计、任务状态、性能指标和系统资源使用情况。 + +**响应示例** (200): +```json +{ + "code": 200, + "message": "统计信息获取成功", + "data": { + "summary": { + "uptime_seconds": 3600.5, + "uptime_formatted": "1h 0m 0s", + "requests_total": 150, + "requests_per_second": 0.04, + "error_rate_percent": 2.0, + "active_tasks": 1 + }, + "requests": { + "by_method": { + "GET": 120, + "POST": 30 + }, + "by_status": { + "200": 145, + "400": 3, + "500": 2 + }, + "top_endpoints": { + "/task/abc123": 45, + "/health": 30, + "/": 25 + } + }, + "tasks": { + "total_created": 25, + "total_completed": 20, + "total_failed": 2, + "success_rate_percent": 90.91, + "by_status": { + "pending": 1, + "processing": 1, + "completed": 20, + "failed": 2 + } + }, + "performance": { + "avg_response_time_ms": 245.67, + "max_response_time_ms": 1250.34, + "min_response_time_ms": 12.45 + }, + "system": { + "memory_usage_percent": 45.2, + "memory_used_gb": 7.3, + "memory_total_gb": 16.0, + "disk_usage_percent": 23.1, + "disk_used_gb": 46.8, + "disk_total_gb": 203.2 + }, + "recent_tasks": [ + { + "task_id": "abc123-def456", + "status": "completed", + "age_seconds": 45.2, + "message": "处理完成成功" + } + ] + } +} +``` + +**字段说明**: +- `summary.uptime_seconds`: API运行时间(秒) +- `summary.uptime_formatted`: 格式化的运行时间(如 "1h 0m 0s") +- `summary.requests_total`: 总请求数 +- `summary.requests_per_second`: 平均每秒请求数 +- `summary.error_rate_percent`: 请求错误率百分比 +- `summary.active_tasks`: 当前活跃任务数(pending或processing状态) +- `requests.by_method`: 按HTTP方法分组的请求统计 +- `requests.by_status`: 按HTTP状态码分组的请求统计 +- `requests.top_endpoints`: 请求最多的前10个端点 +- `tasks.total_created`: 创建的总任务数 +- `tasks.total_completed`: 完成的任务数 +- `tasks.total_failed`: 失败的任务数 +- `tasks.success_rate_percent`: 任务成功率百分比 +- `tasks.by_status`: 按状态分组的任务统计 +- `performance.avg_response_time_ms`: 平均响应时间(毫秒) +- `performance.max_response_time_ms`: 最大响应时间(毫秒) +- `performance.min_response_time_ms`: 最小响应时间(毫秒) +- `system.memory_usage_percent`: 内存使用率百分比 +- `system.memory_used_gb`: 已用内存(GB) +- `system.memory_total_gb`: 总内存(GB) +- `system.disk_usage_percent`: 磁盘使用率百分比(输出目录所在磁盘) +- `system.disk_used_gb`: 已用磁盘空间(GB) +- `system.disk_total_gb`: 总磁盘空间(GB) +- `recent_tasks[]`: 最近20个任务的状态信息 + +--- + +#### 3. 重置统计信息 +**端点**: `POST /stats/reset` + +**描述**: 重置所有 API 统计数据(管理员功能)。 + +**响应示例** (200): +```json +{ + "code": 200, + "message": "统计信息重置成功", + "data": { + "timestamp": 1705257600.123 + } +} +``` + +--- + +#### 4. 获取配置信息 +**端点**: `GET /config` + +**描述**: 获取当前应用配置信息和支持的环境变量。 + +**响应示例** (200): +```json +{ + "code": 200, + "message": "配置信息获取成功", + "data": { + "configuration": { + "host": "0.0.0.0", + "port": 5000, + "debug": false, + "base_dir": "/app", + "upload_folder": "/app/web_api_data/uploads", + "output_folder": "/app/web_api_data/outputs", + "max_content_length": 104857600, + "log_level": "INFO", + "log_file": "logs/gasflux_api.log", + "cors_origins": ["*"], + "task_cleanup_interval": 3600, + "max_task_age": 86400, + "threads": 8, + "connection_limit": 100, + "channel_timeout": 300 + }, + "environment_variables": { + "supported": [ + "GASFLUX_HOST", "GASFLUX_PORT", "GASFLUX_DEBUG", + "GASFLUX_UPLOAD_FOLDER", "GASFLUX_OUTPUT_FOLDER", + "GASFLUX_MAX_CONTENT_LENGTH", "GASFLUX_LOG_LEVEL", + "GASFLUX_LOG_FILE", "GASFLUX_CORS_ORIGINS", + "GASFLUX_TASK_CLEANUP_INTERVAL", "GASFLUX_MAX_TASK_AGE", + "GASFLUX_THREADS", "GASFLUX_CONNECTION_LIMIT", + "GASFLUX_CHANNEL_TIMEOUT" + ], + "current_values": { + "GASFLUX_HOST": "0.0.0.0", + "GASFLUX_PORT": "5000", + "GASFLUX_DEBUG": "false" + } + } + } +} +``` + +### 📤 文件上传和管理 + +#### 5. 文件上传和处理 +**端点**: `POST /upload` + +**描述**: 上传数据文件并启动异步处理任务。 + +**请求参数** (multipart/form-data): +- `file` (必需): 数据文件 (.xlsx 或 .xls 格式) +- `config` (可选): 配置文件 (.yaml 或 .yml 格式) + +**请求示例** (cURL): +```bash +curl -X POST \ + -F "file=@data.xlsx" \ + -F "config=@config.yaml" \ + http://localhost:5000/upload +``` + +**请求示例** (Python): +```python +import requests + +files = {'file': open('data.xlsx', 'rb')} +config = {'config': open('config.yaml', 'rb')} # 可选 + +response = requests.post('http://localhost:5000/upload', files={**files, **config}) +result = response.json() +print(f"Task ID: {result['job_id']}") +``` + +**成功响应** (202): +```json +{ + "code": 202, + "message": "任务已接受并加入处理队列", + "data": { + "status": "accepted", + "job_id": "abc123-def456-ghi789", + "task_status_url": "/task/abc123-def456-ghi789" + } +} +``` + +**错误响应示例**: + +- 文件类型不支持 (400): +```json +{ + "code": 400, + "message": "无效的数据文件类型。只允许 .xlsx 和 .xls 格式。", + "data": {} +} +``` + +- 文件过大 (413): +```json +{ + "code": 413, + "message": "文件过大。最大尺寸为 100MB。", + "data": {} +} +``` + +- 配置文件格式错误 (400): +```json +{ + "code": 400, + "message": "无效的配置文件类型。只允许 .yaml 和 .yml 格式。", + "data": {} +} +``` + +### 📊 任务管理和监控 + +#### 6. 查询任务状态 +**端点**: `GET /task/{task_id}` + +**描述**: 查询异步处理任务的当前状态和进度信息。 + +**路径参数**: +- `task_id`: 任务 ID (UUID 格式) + +**响应示例** - 处理中 (200): +```json +{ + "code": 200, + "message": "任务查询成功", + "data": { + "task_id": "abc123-def456-ghi789", + "status": "processing", + "message": "GasFlux 分析完成,正在生成报告...", + "updated_at": 1705257600.123, + "progress": { + "stage": "report_generation", + "completed_steps": 4, + "total_steps": 5, + "estimated_time_remaining": 45 + } + } +} +``` + +**响应示例** - 处理完成 (200): +```json +{ + "code": 200, + "message": "任务查询成功", + "data": { + "task_id": "abc123-def456-ghi789", + "status": "completed", + "message": "处理完成成功", + "updated_at": 1705257600.123, + "processing_time_seconds": 125.67, + "results": [ + { + "name": "08_34_01_5m.processed_ch4_report.html", + "rel_path": "abc123-def456-ghi789/08_34_01_5m.processed_ch4_report.html", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed_ch4_report.html", + "size": 245760, + "type": "report" + }, + { + "name": "08_34_01_5m.processed_data.csv", + "rel_path": "abc123-def456-ghi789/08_34_01_5m.processed_data.csv", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed_data.csv", + "size": 153600, + "type": "data" + }, + { + "name": "08_34_01_5m.processed_config.yaml", + "rel_path": "abc123-def456-ghi789/08_34_01_5m.processed_config.yaml", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed_config.yaml", + "size": 2048, + "type": "config" + }, + { + "name": "08_34_01_5m.processed_output_vars.json", + "rel_path": "abc123-def456-ghi789/08_34_01_5m.processed_output_vars.json", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed_output_vars.json", + "size": 4096, + "type": "metadata" + } + ] + } +} +``` + +**响应示例** - 处理失败 (200): +```json +{ + "task_id": "abc123-def456-ghi789", + "status": "failed", + "message": "处理失败", + "updated_at": 1705257600.123, + "processing_time_seconds": 23.45, + "error": "处理失败: Invalid data format in column 'temperature'", + "error_details": { + "stage": "data_validation", + "error_code": "INVALID_DATA_FORMAT", + "traceback": "..." + } +} +``` + +**响应示例** - 任务不存在 (404): +```json +{ + "code": 404, + "message": "任务未找到", + "data": {} +} +``` + +**任务状态说明**: +- `pending`: 任务已排队,等待处理 +- `processing`: 正在处理中(包含进度信息) +- `completed`: 处理完成(包含结果文件列表) +- `failed`: 处理失败(包含错误信息) + +--- + +#### 7. 更新任务状态 +**端点**: `PUT /task/{task_id}` + +**描述**: 更新任务的状态、信息或优先级。 + +**路径参数**: +- `task_id`: 任务 ID (UUID 格式) + +**请求参数** (JSON): +- `status` (可选): 新的任务状态 + - `pending`: 重新排队等待处理 + - `processing`: 标记为处理中 + - `completed`: 标记为完成 + - `failed`: 标记为失败 +- `message` (可选): 状态消息或错误描述 +- `priority` (可选): 任务优先级 (normal/high/low) + +**请求示例** (cURL): +```bash +# 标记任务为完成 +curl -X PUT http://localhost:5000/task/abc123-def456-ghi789 \ + -H "Content-Type: application/json" \ + -d '{"status": "completed", "message": "手动标记为完成"}' + +# 更新任务消息 +curl -X PUT http://localhost:5000/task/abc123-def456-ghi789 \ + -H "Content-Type: application/json" \ + -d '{"message": "更新的状态消息"}' + +# 设置高优先级 +curl -X PUT http://localhost:5000/task/abc123-def456-ghi789 \ + -H "Content-Type: application/json" \ + -d '{"priority": "high"}' +``` + +**请求示例** (Python): +```python +import requests + +# 标记任务为失败 +response = requests.put( + 'http://localhost:5000/task/abc123-def456-ghi789', + json={ + 'status': 'failed', + 'message': '处理失败 due to invalid input data' + } +) + +# 更新任务优先级 +response = requests.put( + 'http://localhost:5000/task/abc123-def456-ghi789', + json={'priority': 'high'} +) +``` + +**成功响应** (200): +```json +{ + "code": 200, + "message": "任务更新成功", + "data": { + "task_id": "abc123-def456-ghi789", + "status": "updated", + "task_info": { + "status": "completed", + "message": "手动标记为完成", + "updated_at": 1705257600.123, + "priority": "normal" + } + } +} +``` + +**错误响应示例**: + +- 任务不存在 (404): +```json +{ + "code": 404, + "message": "任务未找到", + "data": {} +} +``` + +- 无效状态 (400): +```json +{ + "code": 400, + "message": "无效状态。必须是以下之一: pending, processing, completed, failed", + "data": {} +} +``` + +- 无效请求 (400): +```json +{ + "code": 400, + "message": "请求体必须是 JSON 格式", + "data": {} +} +``` + +--- + +#### 8. 删除任务 +**端点**: `DELETE /task/{task_id}` + +**描述**: 删除任务及其所有相关的文件和数据。 + +**路径参数**: +- `task_id`: 任务 ID (UUID 格式) + +**请求示例** (cURL): +```bash +# 删除指定任务 +curl -X DELETE http://localhost:5000/task/abc123-def456-ghi789 +``` + +**请求示例** (Python): +```python +import requests + +# 删除任务 +response = requests.delete('http://localhost:5000/task/abc123-def456-ghi789') + +if response.status_code == 200: + result = response.json() + print(f"Task {result['task_id']} deleted") + print(f"Files deleted: {result['details']['folders_deleted']}") + print(f"Size freed: {result['details']['total_size_deleted']} bytes") +else: + print(f"Failed to delete task: {response.json()}") +``` + +**成功响应** (200): +```json +{ + "code": 200, + "message": "任务及相关文件删除成功", + "data": { + "task_id": "abc123-def456-ghi789", + "status": "deleted", + "details": { + "folders_deleted": 1, + "total_size_deleted": 307200, + "task_status": "completed" + } + } +} +``` + +**错误响应示例**: + +- 任务不存在 (404): +```json +{ + "code": 404, + "message": "任务未找到", + "data": {} +} +``` + +- 任务正在处理 (409): +```json +{ + "code": 409, + "message": "无法删除当前正在处理或等待处理的任务", + "data": { + "task_status": "processing" + } +} +``` + +- 删除文件失败 (500): +```json +{ + "code": 500, + "message": "删除任务文件失败: Permission denied", + "data": {} +} +``` + +**注意事项**: +- 只能删除已完成或失败的任务 +- 无法删除正在处理或等待处理的任务 +- 删除操作会同时删除任务记录和所有相关文件 +- 删除操作不可逆,请谨慎使用 + +--- + +### 📋 报告管理和查询 + +#### 9. 分页查询已生成报告 +**端点**: `GET /reports` + +**描述**: 分页查询所有已生成的处理报告,支持排序和过滤。 + +**查询参数**: +- `page` (可选): 页码 (默认: 1) +- `per_page` (可选): 每页报告数量 (默认: 20, 最大: 100) +- `sort_by` (可选): 排序字段 (默认: created_at) + - `created_at`: 按创建时间排序 + - `task_id`: 按任务ID排序 + - `file_size`: 按文件总大小排序 + - `processing_time`: 按处理时间排序 +- `sort_order` (可选): 排序顺序 (默认: desc) + - `asc`: 升序 + - `desc`: 降序 +- `status` (可选): 按任务状态过滤 + - `completed`: 只显示完成的任务 + - `failed`: 只显示失败的任务 + - 不指定: 显示所有任务 + +**请求示例** (cURL): +```bash +# 获取第一页,每页20个报告,按创建时间倒序 +curl "http://localhost:5000/reports?page=1&per_page=20&sort_by=created_at&sort_order=desc" + +# 获取第二页,只显示完成的任务 +curl "http://localhost:5000/reports?page=2&status=completed" + +# 按处理时间升序排序 +curl "http://localhost:5000/reports?sort_by=processing_time&sort_order=asc" +``` + +**请求示例** (Python): +```python +import requests + +# 基本查询 +response = requests.get('http://localhost:5000/reports') +reports = response.json() + +# 分页查询 +params = { + 'page': 1, + 'per_page': 10, + 'sort_by': 'created_at', + 'sort_order': 'desc', + 'status': 'completed' +} +response = requests.get('http://localhost:5000/reports', params=params) +data = response.json() + +print(f"总报告数: {data['pagination']['total_reports']}") +print(f"当前页: {data['pagination']['page']}/{data['pagination']['total_pages']}") + +for report in data['reports']: + print(f"任务: {report['task_id']}") + print(f"状态: {report['status']}") + print(f"创建时间: {report['created_at']}") + print(f"文件数量: {report['file_count']}") + if report['main_report']: + print(f"主报告: {report['main_report']['download_url']}") +``` + +**成功响应** (200): +```json +{ + "code": 200, + "message": "报告列表获取成功", + "data": { + "reports": [ + { + "task_id": "abc123-def456-ghi789", + "report_name": "08_34_01_5m", + "status": "completed", + "created_at": 1705257600.123, + "file_count": 4, + "total_size": 307200, + "processing_time_seconds": 125.67, + "main_report": { + "name": "08_34_01_5m.processed_ch4_report.html", + "size": 245760, + "type": "report", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run/08_34_01_5m.processed_ch4_report.html" + }, + "all_files": [ + { + "name": "08_34_01_5m.processed_ch4_report.html", + "size": 245760, + "type": "report", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run/08_34_01_5m.processed_ch4_report.html" + }, + { + "name": "08_34_01_5m.processed_data.csv", + "size": 153600, + "type": "data", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run/08_34_01_5m.processed_data.csv" + }, + { + "name": "08_34_01_5m.processed_config.yaml", + "size": 2048, + "type": "config", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run/08_34_01_5m.processed_config.yaml" + }, + { + "name": "08_34_01_5m.processed_output_vars.json", + "size": 4096, + "type": "metadata", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run/08_34_01_5m.processed_output_vars.json" + } + ], + "run_directory": "abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run" + } + ], + "pagination": { + "page": 1, + "per_page": 20, + "total_reports": 45, + "total_pages": 3, + "has_next": true, + "has_prev": false + }, + "filters": { + "sort_by": "created_at", + "sort_order": "desc", + "status": null + } + } +} +``` + +**错误响应示例**: + +- 参数无效 (400): +```json +{ + "code": 400, + "message": "Invalid parameter: per_page must be between 1 and 100", + "data": {} +} +``` + +--- + +### 📁 文件下载 + +#### 10. 下载处理结果 +**端点**: `GET /download/{filename}` + +**描述**: 下载处理后的结果文件。 + +**路径参数**: +- `filename`: 文件的相对路径 (包含任务ID) + +**请求示例** (cURL): +```bash +# 下载 HTML 报告 +curl -O http://localhost:5000/download/abc123-def456-ghi789/report.html + +# 下载 CSV 数据 +curl -O http://localhost:5000/download/abc123-def456-ghi789/data.csv + +# 使用 Python 下载 +import requests + +response = requests.get('http://localhost:5000/download/abc123-def456-ghi789/report.html') +with open('report.html', 'wb') as f: + f.write(response.content) +``` + +**状态码**: +- `200`: 成功下载文件 +- `403`: 访问被拒绝 (路径遍历攻击防护) +- `404`: 文件不存在 +- `400`: 路径不是文件 + +--- + +### 🌐 Web 界面 + +#### 11. Web 管理界面 +**端点**: `GET /` + +**描述**: 访问用户友好的 Web 界面,支持文件上传、任务监控和结果下载。 + +**响应**: HTML 页面,包含: +- 文件上传表单 +- 任务状态监控面板 +- 结果文件下载链接 +- 系统状态信息 + +--- + +## 🔄 处理流程详解 + +### 完整处理流程 + +1. **文件上传阶段** + - 客户端验证文件类型和大小 + - 上传数据文件和可选的配置文件 + - 服务器进行安全检查和文件存储 + +2. **任务队列管理** + - 服务器为上传任务分配唯一的 UUID + - 任务进入处理队列,根据系统负载进行调度 + +3. **异步数据处理** + - **数据预处理**: 格式转换、数据验证、单位转换 + - **配置合并**: 默认配置 + 用户配置 + - **GasFlux 核心分析**: + - 背景校正算法 + - 气体通量计算 + - 空间插值 (克里金插值) + - 统计分析和可视化 + - **结果生成**: HTML 报告、CSV 数据、配置文件备份 + +4. **实时状态监控** + - 客户端通过任务 ID 轮询状态 + - 支持进度跟踪和预计完成时间 + +5. **结果获取和清理** + - 处理完成后提供下载链接 + - 定期清理过期任务和文件 + +### 处理时间估计 + +- 小文件 (< 10MB): 1-3 分钟 +- 中等文件 (10-50MB): 3-10 分钟 +- 大文件 (> 50MB): 10-30 分钟 +- 受计算复杂度、数据质量和系统负载影响 + +## ⚠️ 错误处理 + +### HTTP 状态码 + +| 状态码 | 说明 | 处理建议 | +|--------|------|----------| +| 200 | 请求成功 | 正常处理响应数据 | +| 202 | 请求已接受 (异步处理) | 记录任务 ID,开始状态轮询 | +| 400 | 请求参数错误 | 检查请求格式和参数 | +| 403 | 访问被拒绝 | 检查文件路径和权限 | +| 404 | 资源不存在 | 验证任务 ID 或文件路径 | +| 413 | 文件过大 | 压缩文件或联系管理员 | +| 500 | 服务器内部错误 | 检查系统状态,重试请求 | + +### 常见错误响应 + +**文件上传错误**: +```json +{ + "code": 400, + "message": "无效的数据文件类型。只允许 .xlsx 和 .xls 格式。", + "data": {} +} +``` + +```json +{ + "code": 413, + "message": "文件过大。最大尺寸为 100MB。", + "data": {} +} +``` + +**任务查询错误**: +```json +{ + "code": 404, + "message": "任务未找到", + "data": { + "task_id": "invalid-task-id" + } +} +``` + +**文件下载错误**: +```json +{ + "code": 404, + "message": "文件未找到", + "data": { + "filename": "task-id/file.html" + } +} +``` + +## 📊 性能监控和日志 + +### 日志记录 + +所有 API 请求都会记录到 `gasflux_api.log` 文件,包含: + +``` +2026-01-14 10:30:15,123 - INFO - [task:abc123] POST /upload - 202 - 2.34s +2026-01-14 10:30:17,456 - INFO - [task:abc123] Processing started: data.xlsx (15.2MB) +2026-01-14 10:32:22,789 - INFO - [task:abc123] Processing completed: 4 files generated +2026-01-14 10:32:25,012 - INFO - [task:abc123] GET /download/abc123/report.html - 200 - 0.45s +``` + +### 性能指标 + +通过 `/stats` 端点获取: +- 请求响应时间统计 +- 任务成功率 +- 系统资源使用情况 +- 错误率和热点端点 + +## 💻 编程示例 + +### Python 完整示例 + +#### 基础用法 +```python +import requests +import time +import os +from pathlib import Path + +class GasFluxClient: + def __init__(self, base_url="http://localhost:5000"): + self.base_url = base_url.rstrip('/') + + def check_health(self): + """检查 API 健康状态""" + response = requests.get(f"{self.base_url}/health") + return response.json() + + def upload_and_process(self, data_file, config_file=None, output_dir="./results"): + """上传文件并处理""" + files = {'file': open(data_file, 'rb')} + if config_file and os.path.exists(config_file): + files['config'] = open(config_file, 'rb') + + # 上传文件 + print(f"Uploading {data_file}...") + response = requests.post(f"{self.base_url}/upload", files=files) + result = response.json() + + if response.status_code != 202: + raise Exception(f"Upload failed: {result.get('error', 'Unknown error')}") + + task_id = result['job_id'] + print(f"任务已创建: {task_id}") + + # 监控处理状态 + while True: + status_response = requests.get(f"{self.base_url}/task/{task_id}") + status = status_response.json() + + print(f"Status: {status['status']} - {status['message']}") + + if status['status'] == 'completed': + # 下载结果文件 + os.makedirs(output_dir, exist_ok=True) + for result_file in status['results']: + download_url = f"{self.base_url}{result_file['download_url']}" + output_path = Path(output_dir) / result_file['name'] + + print(f"Downloading {result_file['name']}...") + download_response = requests.get(download_url) + with open(output_path, 'wb') as f: + f.write(download_response.content) + + print(f"Processing completed! Results saved to {output_dir}") + return status + + elif status['status'] == 'failed': + error_msg = status.get('error', 'Unknown error') + raise Exception(f"Task failed: {error_msg}") + + time.sleep(3) # 每3秒检查一次状态 + +# 使用示例 +client = GasFluxClient() +try: + # 检查 API 状态 + health = client.check_health() + print(f"API Status: {health['status']}") + + # 处理数据 + result = client.upload_and_process( + data_file="data.xlsx", + config_file="config.yaml", + output_dir="./gasflux_results" + ) + print("处理完成成功!") + +except Exception as e: + print(f"Error: {e}") +``` + +#### 异步版本 (使用 asyncio) +```python +import asyncio +import aiohttp +import aiofiles +from pathlib import Path + +class AsyncGasFluxClient: + def __init__(self, base_url="http://localhost:5000"): + self.base_url = base_url.rstrip('/') + + async def upload_and_process(self, data_file, config_file=None, output_dir="./results"): + async with aiohttp.ClientSession() as session: + # 准备文件上传 + data = aiohttp.FormData() + data.add_field('file', open(data_file, 'rb'), filename=Path(data_file).name) + if config_file and Path(config_file).exists(): + data.add_field('config', open(config_file, 'rb'), filename=Path(config_file).name) + + # 上传文件 + print(f"Uploading {data_file}...") + async with session.post(f"{self.base_url}/upload", data=data) as response: + result = await response.json() + if response.status != 202: + raise Exception(f"Upload failed: {result.get('error', 'Unknown error')}") + + task_id = result['job_id'] + print(f"任务已创建: {task_id}") + + # 监控处理状态 + while True: + async with session.get(f"{self.base_url}/task/{task_id}") as response: + status = await response.json() + + print(f"Status: {status['status']} - {status['message']}") + + if status['status'] == 'completed': + # 下载结果文件 + Path(output_dir).mkdir(exist_ok=True) + for result_file in status['results']: + download_url = f"{self.base_url}{result_file['download_url']}" + output_path = Path(output_dir) / result_file['name'] + + print(f"Downloading {result_file['name']}...") + async with session.get(download_url) as response: + async with aiofiles.open(output_path, 'wb') as f: + await f.write(await response.read()) + + print(f"Processing completed! Results saved to {output_dir}") + return status + + elif status['status'] == 'failed': + error_msg = status.get('error', 'Unknown error') + raise Exception(f"Task failed: {error_msg}") + + await asyncio.sleep(3) + +# 使用异步客户端 +async def main(): + client = AsyncGasFluxClient() + try: + result = await client.upload_and_process( + data_file="large_dataset.xlsx", + config_file="config.yaml", + output_dir="./async_results" + ) + print("Async processing completed!") + except Exception as e: + print(f"Error: {e}") + +# 运行异步示例 +# asyncio.run(main()) +``` + +### JavaScript/Node.js 示例 + +#### 完整实现 +```javascript +const axios = require('axios'); +const FormData = require('form-data'); +const fs = require('fs').promises; +const path = require('path'); + +class GasFluxAPI { + constructor(baseURL = 'http://localhost:5000') { + this.baseURL = baseURL.replace(/\/$/, ''); + this.client = axios.create({ + baseURL: this.baseURL, + timeout: 30000 + }); + } + + async checkHealth() { + try { + const response = await this.client.get('/health'); + return response.data; + } catch (error) { + throw new Error(`Health check failed: ${error.message}`); + } + } + + async uploadFile(dataFilePath, configFilePath = null) { + const formData = new FormData(); + + // 添加数据文件 + if (!await fs.access(dataFilePath).then(() => true).catch(() => false)) { + throw new Error(`Data file not found: ${dataFilePath}`); + } + formData.append('file', fs.createReadStream(dataFilePath), { + filename: path.basename(dataFilePath) + }); + + // 添加配置文件(如果提供) + if (configFilePath) { + if (!await fs.access(configFilePath).then(() => true).catch(() => false)) { + console.warn(`Config file not found: ${configFilePath}, skipping...`); + } else { + formData.append('config', fs.createReadStream(configFilePath), { + filename: path.basename(configFilePath) + }); + } + } + + try { + const response = await this.client.post('/upload', formData, { + headers: formData.getHeaders(), + maxContentLength: Infinity, + maxBodyLength: Infinity + }); + + return response.data; + } catch (error) { + if (error.response) { + throw new Error(`Upload failed: ${error.response.data.error}`); + } + throw error; + } + } + + async getTaskStatus(taskId) { + try { + const response = await this.client.get(`/task/${taskId}`); + return response.data; + } catch (error) { + if (error.response && error.response.status === 404) { + throw new Error(`任务未找到: ${taskId}`); + } + throw error; + } + } + + async downloadFile(downloadUrl, outputPath) { + try { + const response = await this.client.get(downloadUrl, { + responseType: 'stream' + }); + + const writer = fs.createWriteStream(outputPath); + response.data.pipe(writer); + + return new Promise((resolve, reject) => { + writer.on('finish', resolve); + writer.on('error', reject); + }); + } catch (error) { + throw new Error(`Download failed: ${error.message}`); + } + } + + async processData(dataFilePath, configFilePath = null, outputDir = './results', pollInterval = 3000) { + try { + // 1. 检查 API 健康状态 + console.log('Checking API health...'); + const health = await this.checkHealth(); + console.log(`API Status: ${health.status}`); + + // 2. 上传文件 + console.log(`Uploading ${dataFilePath}...`); + const uploadResult = await this.uploadFile(dataFilePath, configFilePath); + const taskId = uploadResult.job_id; + console.log(`任务已创建: ${taskId}`); + + // 3. 监控处理状态 + console.log('Monitoring processing status...'); + while (true) { + const status = await this.getTaskStatus(taskId); + + console.log(`[${new Date().toISOString()}] Status: ${status.status} - ${status.message}`); + + if (status.status === 'completed') { + console.log('处理完成成功!'); + + // 4. 下载结果文件 + console.log('Downloading result files...'); + await fs.mkdir(outputDir, { recursive: true }); + + for (const resultFile of status.results) { + const downloadUrl = `${this.baseURL}${resultFile.download_url}`; + const outputPath = path.join(outputDir, resultFile.name); + + console.log(`Downloading ${resultFile.name}...`); + await this.downloadFile(downloadUrl, outputPath); + console.log(`Saved to ${outputPath}`); + } + + return { + taskId, + status: status.status, + results: status.results, + outputDir + }; + + } else if (status.status === 'failed') { + const errorMsg = status.error || 'Unknown error'; + throw new Error(`处理失败: ${errorMsg}`); + } + + // 等待后重试 + await new Promise(resolve => setTimeout(resolve, pollInterval)); + } + + } catch (error) { + console.error(`Error in processData: ${error.message}`); + throw error; + } + } +} + +// 使用示例 +async function main() { + const api = new GasFluxAPI(); + + try { + const result = await api.processData( + 'data.xlsx', + 'config.yaml', // 可选 + './gasflux_results', + 5000 // 5秒检查一次状态 + ); + + console.log('All done!', result); + + } catch (error) { + console.error('处理失败:', error.message); + process.exit(1); + } +} + +// 如果直接运行此文件 +if (require.main === module) { + main(); +} + +module.exports = GasFluxAPI; +``` + +### cURL 命令示例 + +#### 基本上传和监控 +```bash +#!/bin/bash + +# API 基础 URL +API_URL="http://localhost:5000" + +# 检查健康状态 +echo "Checking API health..." +curl -s "${API_URL}/health" | jq '.' + +# 上传文件 +echo "Uploading data file..." +UPLOAD_RESPONSE=$(curl -s -X POST \ + -F "file=@data.xlsx" \ + -F "config=@config.yaml" \ + "${API_URL}/upload") + +echo "Upload response: $UPLOAD_RESPONSE" + +# 提取任务 ID +TASK_ID=$(echo "$UPLOAD_RESPONSE" | jq -r '.job_id') + +if [ "$TASK_ID" = "null" ] || [ -z "$TASK_ID" ]; then + echo "Upload failed!" + exit 1 +fi + +echo "Task ID: $TASK_ID" + +# 监控任务状态 +echo "Monitoring task status..." +while true; do + STATUS_RESPONSE=$(curl -s "${API_URL}/task/${TASK_ID}") + STATUS=$(echo "$STATUS_RESPONSE" | jq -r '.status') + MESSAGE=$(echo "$STATUS_RESPONSE" | jq -r '.message') + + echo "[$(date '+%Y-%m-%d %H:%M:%S')] Status: $STATUS - $MESSAGE" + + if [ "$STATUS" = "completed" ]; then + echo "Processing completed!" + + # 下载结果文件 + echo "Downloading result files..." + mkdir -p results + + echo "$STATUS_RESPONSE" | jq -r '.results[].download_url' | while read -r download_url; do + filename=$(basename "$download_url") + echo "Downloading $filename..." + curl -s -o "results/$filename" "${API_URL}${download_url}" + done + + echo "All files downloaded to ./results/" + break + + elif [ "$STATUS" = "failed" ]; then + ERROR=$(echo "$STATUS_RESPONSE" | jq -r '.error // "Unknown error"') + echo "Task failed: $ERROR" + exit 1 + fi + + sleep 3 +done +``` + +## 🔧 故障排除指南 + +### 常见问题和解决方案 + +#### 1. 连接问题 +**问题**: 无法连接到 API 服务器 +```bash +curl: (7) 连接被拒绝,无法连接到 localhost 端口 5000 +``` + +**解决方案**: +- 检查服务器是否正在运行:`ps aux | grep gasflux` +- 验证端口配置:检查环境变量 `GASFLUX_PORT` +- 确认防火墙设置:`sudo ufw status` 或 `sudo firewall-cmd --list-all` + +#### 2. 文件上传失败 + +**问题**: 文件上传被拒绝 +```json +{"error": "无效的数据文件类型。只允许 .xlsx 和 .xls 格式。"} +``` + +**解决方案**: +- 检查文件扩展名(必须是 .xlsx 或 .xls) +- 验证文件不是空的 +- 确保文件大小不超过 100MB + +**问题**: 文件过大 +```json +{"error": "文件过大。最大尺寸为 100MB。"} +``` + +**解决方案**: +- 压缩数据文件 +- 分割成多个较小的文件 +- 联系管理员增加文件大小限制 + +#### 3. 任务处理问题 + +**问题**: 任务长时间处于 pending 状态 +```json +{"status": "pending", "message": "Task queued for processing"} +``` + +**解决方案**: +- 检查系统负载:`GET /stats` +- 查看服务器资源使用情况 +- 等待队列处理或联系管理员 + +**问题**: 处理失败 +```json +{ + "status": "failed", + "error": "处理失败: Invalid data format in column 'temperature'" +} +``` + +**解决方案**: +- 检查输入数据格式和列名 +- 验证数据范围(温度、压力等) +- 查看详细的错误信息和日志 + +#### 4. 文件下载问题 + +**问题**: 下载失败 +```json +{"error": "File not found or access denied"} +``` + +**解决方案**: +- 确认任务已完成(status: "completed") +- 检查下载 URL 格式 +- 验证文件路径是否存在 + +#### 5. 服务器性能问题 + +**问题**: 响应缓慢或超时 + +**解决方案**: +- 检查系统资源:`GET /stats` +- 查看并发任务数量 +- 监控内存和 CPU 使用率 +- 考虑增加服务器资源或优化配置 + +### 调试技巧 + +#### 启用详细日志 +```bash +# 设置环境变量启用 DEBUG 模式 +export GASFLUX_LOG_LEVEL=DEBUG +export GASFLUX_DEBUG=true + +# 重启服务器 +python server_waitress.py +``` + +#### 查看实时日志 +```bash +# 监控日志文件 +tail -f logs/gasflux_api.log + +# 过滤特定任务的日志 +tail -f logs/gasflux_api.log | grep "task:abc123" +``` + +#### 使用健康检查进行诊断 +```bash +# 基本健康检查 +curl -s http://localhost:5000/health | jq '.' + +# 详细统计信息 +curl -s http://localhost:5000/stats | jq '.' + +# 配置信息 +curl -s http://localhost:5000/config | jq '.' +``` + +## 🛡️ 安全考虑 + +### 数据保护 +- **文件类型验证**: 只接受指定的文件类型 (.xlsx, .xls, .yaml, .yml) +- **路径遍历保护**: 防止通过 `../` 等路径访问敏感文件 +- **文件大小限制**: 防止拒绝服务攻击 + +### 访问控制 +- **无认证设计**: 适用于内部网络或受控环境 +- **IP 白名单**: 可通过反向代理实现 +- **HTTPS 推荐**: 在生产环境中使用 HTTPS + +### 数据清理 +- **自动清理**: 过期的任务和文件会被自动删除 +- **配置选项**: 可通过环境变量调整清理间隔和过期时间 + +## 📈 最佳实践 + +### 客户端实现 + +#### 1. 错误处理 +```python +def safe_api_call(url, max_retries=3, backoff_factor=2): + for attempt in range(max_retries): + try: + response = requests.get(url, timeout=30) + response.raise_for_status() + return response.json() + except requests.exceptions.RequestException as e: + if attempt == max_retries - 1: + raise e + wait_time = backoff_factor ** attempt + print(f"Request failed, retrying in {wait_time}s...") + time.sleep(wait_time) +``` + +#### 2. 状态轮询优化 +```python +def monitor_task_efficiently(task_id, max_wait_time=3600): + start_time = time.time() + check_interval = 2 # 初始检查间隔 + + while time.time() - start_time < max_wait_time: + status = get_task_status(task_id) + + if status['status'] in ['completed', 'failed']: + return status + + # 根据任务阶段调整检查间隔 + if 'progress' in status: + stage = status['progress'].get('stage', '') + if 'data_processing' in stage: + check_interval = 5 # 数据处理阶段检查频率降低 + elif 'report_generation' in stage: + check_interval = 10 # 报告生成阶段进一步降低 + + time.sleep(check_interval) + + raise TimeoutError(f"Task monitoring timed out after {max_wait_time}s") +``` + +#### 3. 大文件处理 +```python +def upload_large_file(file_path, chunk_size=1024*1024): # 1MB chunks + file_size = os.path.getsize(file_path) + + # 对于大文件,考虑压缩或分块上传 + if file_size > 50*1024*1024: # 50MB + print(f"Large file detected ({file_size/1024/1024:.1f}MB)") + print("Consider compressing the data or splitting into smaller files") + + # 标准上传 + with open(file_path, 'rb') as f: + files = {'file': f} + response = requests.post('http://localhost:5000/upload', files=files) + return response.json() +``` + +### 服务器部署 + +#### 生产环境配置 +```bash +# 环境变量配置 +export GASFLUX_HOST=0.0.0.0 +export GASFLUX_PORT=5000 +export GASFLUX_LOG_LEVEL=INFO +export GASFLUX_MAX_CONTENT_LENGTH=104857600 # 100MB + +# 使用进程管理器 +# systemd 服务示例 +cat > /etc/systemd/system/gasflux.service << EOF +[Unit] +Description=GasFlux Web API +After=network.target + +[Service] +User=gasflux +Group=gasflux +WorkingDirectory=/opt/gasflux +ExecStart=/opt/gasflux/venv/bin/python server_waitress.py +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target +EOF + +# 启用和启动服务 +sudo systemctl enable gasflux +sudo systemctl start gasflux +``` + +#### 监控和告警 +```bash +#!/bin/bash +# 健康检查脚本 +API_URL="http://localhost:5000" + +# 检查健康状态 +if ! curl -f -s "${API_URL}/health" > /dev/null; then + echo "API is unhealthy, sending alert..." + # 发送告警邮件、Slack 通知等 +fi + +# 检查队列长度 +STATS=$(curl -s "${API_URL}/stats") +ACTIVE_TASKS=$(echo "$STATS" | jq '.summary.active_tasks') + +if [ "$ACTIVE_TASKS" -gt 10 ]; then + echo "High task queue detected: $ACTIVE_TASKS active tasks" + # 发送告警 +fi +``` + +## 📚 附录 + +### 支持的环境变量 + +| 变量名 | 默认值 | 描述 | +|--------|--------|------| +| `GASFLUX_HOST` | `0.0.0.0` | 服务器监听地址 | +| `GASFLUX_PORT` | `5000` | 服务器监听端口 | +| `GASFLUX_DEBUG` | `false` | 调试模式开关 | +| `GASFLUX_UPLOAD_FOLDER` | `web_api_data/uploads` | 上传文件存储目录 | +| `GASFLUX_OUTPUT_FOLDER` | `web_api_data/outputs` | 输出文件存储目录 | +| `GASFLUX_MAX_CONTENT_LENGTH` | `104857600` | 最大文件大小 (字节) | +| `GASFLUX_LOG_LEVEL` | `INFO` | 日志级别 | +| `GASFLUX_LOG_FILE` | `logs/gasflux_api.log` | 日志文件路径 | +| `GASFLUX_CORS_ORIGINS` | `["*"]` | 允许的 CORS 源 | +| `GASFLUX_TASK_CLEANUP_INTERVAL` | `3600` | 任务清理间隔 (秒) | +| `GASFLUX_MAX_TASK_AGE` | `86400` | 任务最大年龄 (秒) | +| `GASFLUX_THREADS` | `8` | Waitress 线程数 | +| `GASFLUX_CONNECTION_LIMIT` | `100` | 最大连接数 | +| `GASFLUX_CHANNEL_TIMEOUT` | `300` | 通道超时 (秒) | + +### API 响应时间基准 + +- `/health`: < 100ms +- `/stats`: < 500ms +- `/config`: < 200ms +- `/upload`: < 2s (文件处理时间) +- `/task/{id}`: < 300ms +- `/download/{file}`: 根据文件大小 (通常 < 5s) + +### 文件格式规范 + +#### 数据文件要求 +- **格式**: Excel (.xlsx 或 .xls) +- **必需列**: latitude, longitude, height_ato, windspeed, winddir, temperature, pressure +- **可选列**: ch4, co2, c2h6 等气体浓度 +- **数据类型**: 数值型 (float/int) +- **缺失值**: NaN 或空值 + +#### 配置文件格式 +```yaml +output_dir: ~/gasflux_reports + +required_cols: + latitude: [-90, 90] + longitude: [-180, 180] + height_ato: [-200, 500] + windspeed: [0, 50] + winddir: [0, 360] + temperature: [-50, 60] + pressure: [900, 1100] + +gases: + ch4: [1.5, 500] + co2: [300, 5000] + c2h6: [-0.5, 10] + +strategies: + background: "algorithmic" + sensor: "insitu" + spatial: "curtain" + interpolation: "kriging" +``` + +--- + +*最后更新: 2026年1月14日* + +*GasFlux Web API 版本: 1.0.0* +*文档维护: API 开发团队* \ No newline at end of file diff --git a/API_ENDPOINTS.md b/API_ENDPOINTS.md new file mode 100644 index 0000000..456ab7e --- /dev/null +++ b/API_ENDPOINTS.md @@ -0,0 +1,782 @@ +# GasFlux Web API 端点参考 + +## 概述 + +GasFlux Web API 是一个基于 Flask 的 RESTful API,用于上传数据文件、执行气体通量分析处理,并下载处理结果。 + +**基础信息:** +- **基础 URL**: `http://localhost:5000` +- **认证**: 无需认证 +- **数据格式**: JSON +- **文件大小限制**: 100MB +- **支持的文件类型**: `.xlsx`, `.xls`, `.yaml`, `.yml` + +--- + +## 🔍 监控和健康检查 + +### 1. 获取健康状态 +**端点**: `GET /health` + +**描述**: 获取 API 的健康状态、系统信息和性能指标。 + +**响应示例** (200): +```json +{ + "code": 200, + "message": "健康检查完成", + "data": { + "status": "healthy", + "version": "1.0.0", + "timestamp": 1705257600.123, + "uptime": "2h 30m 15s", + "storage": { + "uploads_writable": true, + "outputs_writable": true + }, + "tasks": { + "active_count": 2, + "total_tracked": 15, + "total_processed": 13, + "success_rate_percent": 92.31 + }, + "performance": { + "requests_per_second": 0.08, + "avg_response_time_ms": 234.56, + "error_rate_percent": 1.5 + } + } +} +``` + +**响应示例** (503): +```json +{ + "code": 503, + "message": "服务不可用", + "data": { + "status": "degraded", + "version": "1.0.0", + "timestamp": 1705257600.123, + "uptime": "1h 30m 45s", + "storage": { + "uploads_writable": true, + "outputs_writable": true + }, + "tasks": { + "active_count": 0, + "total_tracked": 5, + "total_processed": 3, + "success_rate_percent": 60.0 + }, + "performance": { + "requests_per_second": 0.12, + "avg_response_time_ms": 145.67, + "error_rate_percent": 50.0 + }, + "issues": [ + "错误率过高 (50.0%)", + "活跃任务数量过多 (25)" + ] + } +} +``` + +**状态码**: +- `200`: API 健康 +- `503`: API 不健康 + +--- + +### 2. 获取系统统计信息 +**端点**: `GET /stats` + +**描述**: 获取详细的 API 统计信息、性能指标和系统监控数据。 + +**响应示例** (200): +```json +{ + "code": 200, + "message": "统计信息获取成功", + "data": { + "summary": { + "uptime_seconds": 3600.5, + "uptime_formatted": "1h 0m 0s", + "requests_total": 150, + "requests_per_second": 0.04, + "error_rate_percent": 2.0, + "active_tasks": 1 + }, + "requests": { + "by_method": { + "GET": 120, + "POST": 30 + }, + "by_status": { + "200": 145, + "400": 3, + "500": 2 + }, + "top_endpoints": { + "/task/abc123": 45, + "/health": 30, + "/": 25 + } + }, + "tasks": { + "total_created": 25, + "total_completed": 20, + "total_failed": 2, + "success_rate_percent": 90.91, + "by_status": { + "pending": 1, + "processing": 1, + "completed": 20, + "failed": 2 + } + }, + "performance": { + "avg_response_time_ms": 245.67, + "max_response_time_ms": 1250.34, + "min_response_time_ms": 12.45 + }, + "system": { + "memory_usage_percent": 45.2, + "memory_used_gb": 7.3, + "memory_total_gb": 16.0, + "disk_usage_percent": 23.1, + "disk_used_gb": 46.8, + "disk_total_gb": 203.2 + }, + "recent_tasks": [ + { + "task_id": "abc123-def456", + "status": "completed", + "age_seconds": 45.2, + "message": "处理完成成功" + } + ] + } +} +``` + +**状态码**: +- `200`: 成功 + +--- + +### 3. 重置统计信息 +**端点**: `POST /stats/reset` + +**描述**: 重置所有 API 统计数据(管理员功能)。 + +**响应示例** (200): +```json +{ + "code": 200, + "message": "统计信息重置成功", + "data": { + "timestamp": 1705257600.123 + } +} +``` + +**状态码**: +- `200`: 成功 + +--- + +### 4. 获取配置信息 +**端点**: `GET /config` + +**描述**: 获取当前应用配置信息和支持的环境变量。 + +**响应示例** (200): +```json +{ + "code": 200, + "message": "配置信息获取成功", + "data": { + "configuration": { + "host": "0.0.0.0", + "port": 5000, + "debug": false, + "base_dir": "/app", + "upload_folder": "/app/web_api_data/uploads", + "output_folder": "/app/web_api_data/outputs", + "max_content_length": 104857600, + "log_level": "INFO", + "log_file": "logs/gasflux_api.log", + "cors_origins": ["*"], + "task_cleanup_interval": 3600, + "max_task_age": 86400, + "threads": 8, + "connection_limit": 100, + "channel_timeout": 300 + }, + "environment_variables": { + "supported": [ + "GASFLUX_HOST", "GASFLUX_PORT", "GASFLUX_DEBUG", + "GASFLUX_UPLOAD_FOLDER", "GASFLUX_OUTPUT_FOLDER", + "GASFLUX_MAX_CONTENT_LENGTH", "GASFLUX_LOG_LEVEL", + "GASFLUX_LOG_FILE", "GASFLUX_CORS_ORIGINS", + "GASFLUX_TASK_CLEANUP_INTERVAL", "GASFLUX_MAX_TASK_AGE", + "GASFLUX_THREADS", "GASFLUX_CONNECTION_LIMIT", + "GASFLUX_CHANNEL_TIMEOUT" + ], + "current_values": { + "GASFLUX_HOST": "0.0.0.0", + "GASFLUX_PORT": "5000", + "GASFLUX_DEBUG": "false" + } + } + } +} +``` + +**状态码**: +- `200`: 成功 + +--- + +## 📤 文件上传和管理 + +### 5. 文件上传和处理 +**端点**: `POST /upload` + +**描述**: 上传数据文件并启动异步处理任务。 + +**请求参数** (multipart/form-data): +- `file` (必需): 数据文件 (.xlsx 或 .xls 格式) +- `config` (可选): 配置文件 (.yaml 或 .yml 格式) + +**响应示例** (202): +```json +{ + "code": 202, + "message": "任务已接受并加入处理队列", + "data": { + "status": "accepted", + "job_id": "abc123-def456-ghi789", + "task_status_url": "/task/abc123-def456-ghi789" + } +} +``` + +**错误响应示例** (400): +```json +{ + "code": 400, + "message": "无效的数据文件类型。只允许 .xlsx 和 .xls 格式。", + "data": {} +} +``` + +**错误响应示例** (413): +```json +{ + "code": 413, + "message": "文件过大。最大尺寸为 100MB。", + "data": {} +} +``` + +**状态码**: +- `202`: 任务已接受 +- `400`: 请求参数错误 +- `413`: 文件过大 + +--- + +## 📊 任务管理和监控 + +### 6. 分页查询任务列表 +**端点**: `GET /tasks` + +**描述**: 分页查询所有任务,支持按状态过滤、排序和分页。返回体为前端友好的瘦身结构:仅包含任务状态信息;当任务已完成时会包含 `downloads` 直达下载链接。 + +**查询参数**: +- `page` (可选): 页码 (默认: 1) +- `page_size` (可选): 每页任务数量 (默认: 20, 最大: 100) +- `sort_by` (可选): 排序字段 ('created_at', 'updated_at', 'status') (默认: 'updated_at') +- `sort_order` (可选): 排序顺序 ('asc', 'desc') (默认: 'desc') +- `status` (可选): 按任务状态过滤,支持多个状态用逗号分隔 + +**响应示例** (200): +```json +{ + "code": 200, + "message": "任务列表查询成功", + "data": { + "tasks": [ + { + "task_id": "abc123-def456-ghi789", + "status": "completed", + "message": "Processing completed successfully", + "updated_at": 1705257700.456, + "downloads": { + "data_xlsx": "/download/abc123-def456-ghi789/08_34_01_5m.processed_data.xlsx", + "report_ch4": "/download/abc123-def456-ghi789/08_34_01_5m.processed_ch4_report.html", + "report_co2": "/download/abc123-def456-ghi789/08_34_01_5m.processed_co2_report.html", + "config": "/download/abc123-def456-ghi789/08_34_01_5m.processed_config.yaml", + "metadata": "/download/abc123-def456-ghi789/08_34_01_5m.processed_output_vars.json" + } + }, + { + "task_id": "xyz789-abc123-def456", + "status": "processing", + "message": "正在进行数据分析...", + "updated_at": 1705257650.321 + } + ], + "total": 25, + "page": 1, + "page_size": 20, + "total_pages": 2, + "has_next": true, + "has_prev": false + } +} +``` + +**状态码**: +- `200`: 成功 +- `400`: 参数无效 + +--- + +### 7. 获取任务池统计信息 +**端点**: `GET /tasks/stats` + +**描述**: 获取任务池的统计信息,包括各状态任务数量、活跃任务数等。 + +**响应示例** (200): +```json +{ + "code": 200, + "message": "任务池统计信息查询成功", + "data": { + "total_tasks": 25, + "status_counts": { + "pending": 3, + "processing": 2, + "completed": 18, + "failed": 2 + }, + "active_tasks": 2, + "queued_tasks": 3, + "completed_tasks": 18, + "failed_tasks": 2 + } +} +``` + +**状态码**: +- `200`: 成功 + +--- + +### 8. 获取活跃任务列表 +**端点**: `GET /tasks/active` + +**描述**: 获取当前正在处理的任务列表(瘦身结构)。当列表中包含已完成任务时会附带 `downloads` 直达下载链接。 + +**响应示例** (200): +```json +{ + "code": 200, + "message": "活跃任务查询成功", + "data": { + "active_tasks": [ + { + "task_id": "abc123-def456-ghi789", + "status": "processing", + "message": "正在生成报告...", + "updated_at": 1705257650.321 + }, + { + "task_id": "completed-task-123", + "status": "completed", + "message": "Processing completed successfully", + "updated_at": 1705257550.456, + "downloads": { + "data_xlsx": "/download/completed-task-123/processed_data.xlsx", + "report_html": "/download/completed-task-123/data_report.html" + } + } + ], + "count": 2 + } +} +``` + +**状态码**: +- `200`: 成功 + +--- + +### 9. 获取队列任务列表 +**端点**: `GET /tasks/queue` + +**描述**: 获取等待处理的任务队列(瘦身结构)。当列表中包含已完成任务时会附带 `downloads` 直达下载链接。 + +**响应示例** (200): +```json +{ + "code": 200, + "message": "队列任务查询成功", + "data": { + "queued_tasks": [ + { + "task_id": "xyz789-abc123-def456", + "status": "pending", + "message": "等待处理", + "updated_at": 1705257400.123 + }, + { + "task_id": "completed-queued-task", + "status": "completed", + "message": "Processing completed successfully", + "updated_at": 1705257450.321, + "downloads": { + "data_xlsx": "/download/completed-queued-task/processed_data.xlsx", + "report_html": "/download/completed-queued-task/analysis_report.html" + } + } + ], + "count": 2, + "queue_position_info": "任务按创建时间排序,较早的任务优先处理" + } +} +``` + +**状态码**: +- `200`: 成功 + +--- + +### 10. 查询任务状态 +**端点**: `GET /task/{task_id}` + +**描述**: 查询异步处理任务的当前状态和进度信息。 + +**路径参数**: +- `task_id`: 任务 ID (UUID 格式) + +**响应示例** - 处理中 (200): +```json +{ + "code": 200, + "message": "任务查询成功", + "data": { + "task_id": "abc123-def456-ghi789", + "status": "processing", + "message": "GasFlux 分析完成,正在生成报告...", + "updated_at": 1705257600.123 + } +} +``` + +**响应示例** - 处理完成 (200): +```json +{ + "code": 200, + "message": "任务查询成功", + "data": { + "task_id": "abc123-def456-ghi789", + "status": "completed", + "message": "处理完成成功", + "updated_at": 1705257600.123, + "results": [ + { + "name": "08_34_01_5m.processed_ch4_report.html", + "rel_path": "abc123-def456-ghi789/08_34_01_5m.processed_ch4_report.html", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed_ch4_report.html", + "size": 245760, + "type": "report" + }, + { + "name": "08_34_01_5m.processed_data.xlsx", + "rel_path": "abc123-def456-ghi789/08_34_01_5m.processed_data.xlsx", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed_data.xlsx", + "size": 153600, + "type": "data" + }, + { + "name": "08_34_01_5m.processed_config.yaml", + "rel_path": "abc123-def456-ghi789/08_34_01_5m.processed_config.yaml", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed_config.yaml", + "size": 2048, + "type": "config" + }, + { + "name": "08_34_01_5m.processed_output_vars.json", + "rel_path": "abc123-def456-ghi789/08_34_01_5m.processed_output_vars.json", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed_output_vars.json", + "size": 4096, + "type": "metadata" + } + ], + "downloads": { + "data_xlsx": "/download/abc123-def456-ghi789/08_34_01_5m.processed_data.xlsx", + "report_ch4": "/download/abc123-def456-ghi789/08_34_01_5m.processed_ch4_report.html", + "report_co2": "/download/abc123-def456-ghi789/08_34_01_5m.processed_co2_report.html", + "config": "/download/abc123-def456-ghi789/08_34_01_5m.processed_config.yaml", + "metadata": "/download/abc123-def456-ghi789/08_34_01_5m.processed_output_vars.json" + } + } +} +``` + +**响应示例** - 任务不存在 (404): +```json +{ + "code": 404, + "message": "任务未找到", + "data": {} +} +``` + +**状态码**: +- `200`: 成功 +- `404`: 任务不存在 + +--- + +### 11. 更新任务状态 +**端点**: `PUT /task/{task_id}` + +**描述**: 更新任务的状态、信息或优先级。 + +**路径参数**: +- `task_id`: 任务 ID (UUID 格式) + +**请求参数** (JSON): +- `status` (可选): 新的任务状态 +- `message` (可选): 状态消息或错误描述 +- `priority` (可选): 任务优先级 (normal/high/low) + +**响应示例** (200): +```json +{ + "code": 200, + "message": "任务更新成功", + "data": { + "task_id": "abc123-def456-ghi789", + "status": "updated", + "task_info": { + "status": "completed", + "message": "手动标记为完成", + "updated_at": 1705257600.123, + "priority": "normal" + } + } +} +``` + +**错误响应示例** (404): +```json +{ + "code": 404, + "message": "任务未找到", + "data": {} +} +``` + +**错误响应示例** (400): +```json +{ + "code": 400, + "message": "无效状态。必须是以下之一: pending, processing, completed, failed", + "data": {} +} +``` + +**状态码**: +- `200`: 成功 +- `400`: 无效请求 +- `404`: 任务不存在 + +--- + +### 12. 删除任务 +**端点**: `DELETE /task/{task_id}` + +**描述**: 删除任务及其所有相关的文件和数据。 + +**路径参数**: +- `task_id`: 任务 ID (UUID 格式) + +**响应示例** (200): +```json +{ + "code": 200, + "message": "任务及相关文件删除成功", + "data": { + "task_id": "abc123-def456-ghi789", + "status": "deleted", + "details": { + "folders_deleted": 1, + "total_size_deleted": 307200, + "task_status": "completed" + } + } +} +``` + +**错误响应示例** (404): +```json +{ + "code": 404, + "message": "任务未找到", + "data": {} +} +``` + +**错误响应示例** (409): +```json +{ + "code": 409, + "message": "无法删除当前正在处理或等待处理的任务", + "data": { + "task_status": "processing" + } +} +``` + +**状态码**: +- `200`: 成功 +- `404`: 任务不存在 +- `409`: 任务正在处理 + +--- + +## 📋 报告管理和查询 + +### 13. 分页查询已生成报告 +**端点**: `GET /reports` + +**描述**: 分页查询所有已生成的处理报告,支持排序和过滤。 + +**查询参数**: +- `page` (可选): 页码 (默认: 1) +- `per_page` (可选): 每页报告数量 (默认: 20, 最大: 100) +- `sort_by` (可选): 排序字段 (默认: created_at) +- `sort_order` (可选): 排序顺序 (默认: desc) +- `status` (可选): 按任务状态过滤 + +**响应示例** (200): +```json +{ + "code": 200, + "message": "报告列表获取成功", + "data": { + "reports": [ + { + "task_id": "abc123-def456-ghi789", + "report_name": "08_34_01_5m", + "status": "completed", + "created_at": 1705257600.123, + "file_count": 4, + "total_size": 307200, + "processing_time_seconds": 125.67, + "main_report": { + "name": "08_34_01_5m.processed_ch4_report.html", + "size": 245760, + "type": "report", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run/08_34_01_5m.processed_ch4_report.html" + }, + "all_files": [ + { + "name": "08_34_01_5m.processed_ch4_report.html", + "size": 245760, + "type": "report", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run/08_34_01_5m.processed_ch4_report.html" + }, + { + "name": "08_34_01_5m.processed_data.csv", + "size": 153600, + "type": "data", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run/08_34_01_5m.processed_data.csv" + }, + { + "name": "08_34_01_5m.processed_config.yaml", + "size": 2048, + "type": "config", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run/08_34_01_5m.processed_config.yaml" + }, + { + "name": "08_34_01_5m.processed_output_vars.json", + "size": 4096, + "type": "metadata", + "download_url": "/download/abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run/08_34_01_5m.processed_output_vars.json" + } + ], + "run_directory": "abc123-def456-ghi789/08_34_01_5m.processed/2026-01-14_10-33-29-961698_processing_run" + } + ], + "pagination": { + "page": 1, + "per_page": 20, + "total_reports": 45, + "total_pages": 3, + "has_next": true, + "has_prev": false + }, + "filters": { + "sort_by": "created_at", + "sort_order": "desc", + "status": null + } + } +} +``` + +**错误响应示例** (400): +```json +{ + "code": 400, + "message": "Invalid parameter: per_page must be between 1 and 100", + "data": {} +} +``` + +**状态码**: +- `200`: 成功 +- `400`: 参数无效 + +--- + +## 📁 文件下载 + +### 14. 下载处理结果 +**端点**: `GET /download/{filename}` + +**描述**: 下载处理后的结果文件,支持传入完整文件路径。 + +**路径参数**: +- `filename`: 文件的完整路径或相对路径 (包含任务ID) + +**状态码**: +- `200`: 成功下载文件 +- `403`: 访问被拒绝 +- `404`: 文件不存在 +- `400`: 路径不是文件 + +--- + +## 🌐 Web 界面 + +### 15. Web 管理界面 +**端点**: `GET /` + +**描述**: 访问用户友好的 Web 界面,支持文件上传、任务监控和结果下载。 + +**状态码**: +- `200`: 成功 + +--- + +*最后更新: 2026年1月29日* + +*GasFlux Web API 版本: 1.0.0* \ No newline at end of file diff --git a/ENVIRONMENT_VARIABLES.md b/ENVIRONMENT_VARIABLES.md new file mode 100644 index 0000000..e3a709b --- /dev/null +++ b/ENVIRONMENT_VARIABLES.md @@ -0,0 +1,255 @@ +# GasFlux Web API - 环境变量配置指南 + +本文档介绍如何使用环境变量来配置 GasFlux Web API 的行为。 + +## 概述 + +GasFlux 支持通过环境变量进行灵活配置,无需修改代码即可适应不同的部署环境和需求。 + +## 环境变量列表 + +### 服务器配置 + +| 变量名 | 默认值 | 描述 | +|--------|--------|------| +| `GASFLUX_HOST` | `0.0.0.0` | 服务器监听主机地址 | +| `GASFLUX_PORT` | `5000` | 服务器监听端口 | +| `GASFLUX_DEBUG` | `false` | 是否启用调试模式 (true/false) | + +### 目录配置 + +| 变量名 | 默认值 | 描述 | +|--------|--------|------| +| `GASFLUX_UPLOAD_FOLDER` | `web_api_data/uploads` | 上传文件存储目录 | +| `GASFLUX_OUTPUT_FOLDER` | `web_api_data/outputs` | 处理结果输出目录 | + +### 文件和性能配置 + +| 变量名 | 默认值 | 描述 | +|--------|--------|------| +| `GASFLUX_MAX_CONTENT_LENGTH` | `104857600` (100MB) | 最大上传文件大小(字节) | +| `GASFLUX_THREADS` | `8` | Waitress 服务器线程数 | +| `GASFLUX_CONNECTION_LIMIT` | `100` | 最大并发连接数 | +| `GASFLUX_CHANNEL_TIMEOUT` | `300` | 连接超时时间(秒) | + +### 日志配置 + +| 变量名 | 默认值 | 描述 | +|--------|--------|------| +| `GASFLUX_LOG_LEVEL` | `INFO` | 日志级别 (DEBUG/INFO/WARNING/ERROR/CRITICAL) | +| `GASFLUX_LOG_FILE` | `logs/gasflux_api.log` | 日志文件路径 | + +### 安全和跨域配置 + +| 变量名 | 默认值 | 描述 | +|--------|--------|------| +| `GASFLUX_CORS_ORIGINS` | `*` | 允许的 CORS 源,用逗号分隔 | + +### 任务管理配置 + +| 变量名 | 默认值 | 描述 | +|--------|--------|------| +| `GASFLUX_TASK_CLEANUP_INTERVAL` | `3600` | 任务清理检查间隔(秒) | +| `GASFLUX_MAX_TASK_AGE` | `86400` | 任务最大保留时间(秒,24小时) | + +## 配置示例 + +### 开发环境 + +```bash +# 开发环境配置 +export GASFLUX_HOST=127.0.0.1 +export GASFLUX_PORT=5000 +export GASFLUX_DEBUG=true +export GASFLUX_LOG_LEVEL=DEBUG +``` + +### 生产环境 + +```bash +# 生产环境配置 +export GASFLUX_HOST=0.0.0.0 +export GASFLUX_PORT=80 +export GASFLUX_DEBUG=false +export GASFLUX_LOG_LEVEL=INFO +export GASFLUX_THREADS=16 +export GASFLUX_CONNECTION_LIMIT=200 +export GASFLUX_MAX_CONTENT_LENGTH=524288000 # 500MB +``` + +### Docker 部署 + +```bash +# Docker 环境变量 +docker run -p 80:5000 \ + -e GASFLUX_HOST=0.0.0.0 \ + -e GASFLUX_PORT=5000 \ + -e GASFLUX_LOG_LEVEL=INFO \ + gasflux-api +``` + +### Windows 服务 + +创建 `start_gasflux.bat`: + +```batch +@echo off +set GASFLUX_HOST=0.0.0.0 +set GASFLUX_PORT=80 +set GASFLUX_LOG_LEVEL=INFO +set GASFLUX_THREADS=8 + +GasFluxAPI.exe +``` + +### Linux systemd + +创建 `/etc/systemd/system/gasflux.service`: + +```ini +[Unit] +Description=GasFlux Web API +After=network.target + +[Service] +Type=simple +User=gasflux +Environment=GASFLUX_HOST=0.0.0.0 +Environment=GASFLUX_PORT=80 +Environment=GASFLUX_LOG_LEVEL=INFO +Environment=GASFLUX_THREADS=8 +ExecStart=/path/to/GasFluxAPI +Restart=always + +[Install] +WantedBy=multi-user.target +``` + +## 运行时配置检查 + +启动应用后,可以通过以下方式检查当前配置: + +### API 端点 + +```bash +curl http://localhost:5000/config +``` + +### 启动日志 + +应用启动时会输出当前配置信息: + +``` +Configuration: { + 'host': '0.0.0.0', + 'port': 5000, + 'debug': False, + ... +} +``` + +## 最佳实践 + +### 安全考虑 + +1. **生产环境**: + - 设置 `GASFLUX_DEBUG=false` + - 配置适当的 `GASFLUX_CORS_ORIGINS` + - 使用防火墙限制访问 + +2. **文件权限**: + - 确保上传和输出目录有适当的权限 + - 定期清理旧文件 + +### 性能调优 + +1. **线程数**:根据 CPU 核心数设置 `GASFLUX_THREADS` +2. **连接限制**:根据服务器容量设置 `GASFLUX_CONNECTION_LIMIT` +3. **文件大小**:根据实际需求调整 `GASFLUX_MAX_CONTENT_LENGTH` + +### 日志管理 + +1. **日志轮转**:定期备份和清理日志文件 +2. **日志级别**: + - 开发环境:`DEBUG` + - 生产环境:`INFO` 或 `WARNING` + +## 故障排除 + +### 常见问题 + +1. **端口占用**: + ```bash + # 检查端口使用 + netstat -tulpn | grep :5000 + ``` + +2. **权限问题**: + ```bash + # 确保目录权限正确 + chmod -R 755 web_api_data/ + ``` + +3. **配置不生效**: + - 确保环境变量在应用启动前设置 + - 检查变量名拼写是否正确 + +### 调试配置 + +启用详细日志查看配置加载: + +```bash +export GASFLUX_LOG_LEVEL=DEBUG +# 启动应用 +``` + +## 配置验证脚本 + +创建一个验证脚本 `check_config.py`: + +```python +#!/usr/bin/env python3 +"""Configuration validation script""" + +import os +from pathlib import Path + +def check_config(): + """Check current configuration.""" + print("GasFlux Configuration Check") + print("=" * 40) + + # Server config + print(f"Host: {os.getenv('GASFLUX_HOST', '0.0.0.0')}") + print(f"Port: {os.getenv('GASFLUX_PORT', '5000')}") + print(f"Debug: {os.getenv('GASFLUX_DEBUG', 'false')}") + print(f"Log Level: {os.getenv('GASFLUX_LOG_LEVEL', 'INFO')}") + + # Directory config + base_dir = Path.cwd() + upload_dir = base_dir / os.getenv('GASFLUX_UPLOAD_FOLDER', 'web_api_data/uploads') + output_dir = base_dir / os.getenv('GASFLUX_OUTPUT_FOLDER', 'web_api_data/outputs') + + print(f"Upload Folder: {upload_dir}") + print(f"Output Folder: {output_dir}") + + # Check directories + print(" +Directory Status:") + print(f"Upload dir exists: {upload_dir.exists()}") + print(f"Output dir exists: {output_dir.exists()}") + + # Performance config + print(" +Performance Config:") + print(f"Threads: {os.getenv('GASFLUX_THREADS', '8')}") + print(f"Connection Limit: {os.getenv('GASFLUX_CONNECTION_LIMIT', '100')}") + +if __name__ == "__main__": + check_config() +``` + +运行验证: +```bash +python check_config.py +``` \ No newline at end of file diff --git a/EXE_BUILD_README.md b/EXE_BUILD_README.md new file mode 100644 index 0000000..0365054 --- /dev/null +++ b/EXE_BUILD_README.md @@ -0,0 +1,203 @@ +# GasFlux Web API - Executable Build Guide + +This guide explains how to build and deploy the GasFlux Web API as a standalone executable using Waitress WSGI server. + +## Prerequisites + +Before building the executable, ensure you have all dependencies installed: + +```bash +# Install all required packages +pip install -r requirements.txt + +# Install build tools +pip install pyinstaller waitress +``` + +## Building the Executable + +### Windows + +Run the build script: + +```cmd +build_exe.bat +``` + +Or manually: + +```cmd +pyinstaller --onefile ^ + --name GasFluxAPI ^ + --hidden-import waitress ^ + --hidden-import flask ^ + --hidden-import werkzeug ^ + --hidden-import yaml ^ + --hidden-import pandas ^ + --hidden-import numpy ^ + --hidden-import flask_cors ^ + --add-data "src\gasflux\gasflux_config.yaml;src\gasflux" ^ + --add-data "API_DOCUMENTATION.md;." ^ + --exclude-module matplotlib ^ + --exclude-module tkinter ^ + server_waitress.py +``` + +### Linux/macOS + +Make the build script executable and run it: + +```bash +chmod +x build_exe.sh +./build_exe.sh +``` + +Or manually: + +```bash +pyinstaller --onefile \ + --name GasFluxAPI \ + --hidden-import waitress \ + --hidden-import flask \ + --hidden-import werkzeug \ + --hidden-import yaml \ + --hidden-import pandas \ + --hidden-import numpy \ + --hidden-import flask_cors \ + --add-data "src/gasflux/gasflux_config.yaml:src/gasflux" \ + --add-data "API_DOCUMENTATION.md:." \ + --exclude-module matplotlib \ + --exclude-module tkinter \ + server_waitress.py +``` + +## Running the Executable + +After successful build, you'll find `GasFluxAPI.exe` (Windows) or `GasFluxAPI` (Linux/macOS) in the `dist/` directory. + +### Basic Usage + +```bash +# Windows +GasFluxAPI.exe + +# Linux/macOS +./GasFluxAPI +``` + +The server will start on `http://localhost:5000` by default. + +### Command Line Options + +Waitress supports various command-line options. You can create a wrapper script to customize: + +```bash +# Custom port and host +waitress-serve --listen=0.0.0.0:8080 server_waitress:app + +# Production settings +waitress-serve --threads=16 --connection-limit=200 server_waitress:app +``` + +## Deployment Considerations + +### Directory Structure + +When deploying the executable, ensure these directories exist and are writable: + +``` +your-deployment-directory/ +├── GasFluxAPI(.exe) # The executable +├── web_api_data/ # Data directory (auto-created) +│ ├── uploads/ # Uploaded files +│ └── outputs/ # Processing results +├── logs/ # Log files (auto-created) +└── gasflux_config.yaml # Configuration (optional) +``` + +### Firewall Configuration + +Make sure the server port (default 5000) is open in your firewall. + +### Production Deployment + +For production use: + +1. **Use a reverse proxy**: Place Nginx or Apache in front of the executable +2. **SSL/TLS**: Configure HTTPS +3. **Process management**: Use systemd, supervisor, or similar +4. **Logging**: Configure log rotation + +### Example systemd Service (Linux) + +Create `/etc/systemd/system/gasflux-api.service`: + +```ini +[Unit] +Description=GasFlux Web API +After=network.target + +[Service] +Type=simple +User=your-user +WorkingDirectory=/path/to/deployment +ExecStart=/path/to/deployment/GasFluxAPI +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target +``` + +Then: + +```bash +sudo systemctl daemon-reload +sudo systemctl enable gasflux-api +sudo systemctl start gasflux-api +``` + +## Troubleshooting + +### Common Issues + +1. **"Permission denied"**: Ensure the executable has execute permissions and data directories are writable + +2. **"Port already in use"**: Change the port or stop other services using port 5000 + +3. **"Module not found"**: Some dependencies might be missing. Try: + ```bash + pip install --upgrade pyinstaller + pip install -r requirements.txt + ``` + +4. **Large executable size**: The `--exclude-module` options help reduce size, but some scientific packages are large + +### Performance Tuning + +- **Threads**: Increase `--threads` for more concurrent requests +- **Connection limit**: Adjust `--connection-limit` based on server capacity +- **Memory**: Monitor memory usage, especially with large data processing + +### Logs + +Logs are written to: +- Console output (when running interactively) +- `logs/gasflux_api.log` file + +Check logs for startup errors and runtime issues. + +## API Documentation + +Once running, access the API documentation at: +- Web interface: `http://your-server:5000` +- API docs: See `API_DOCUMENTATION.md` +- Statistics: `GET /stats` - Real-time API statistics and monitoring +- Health check: `GET /health` - System health with performance metrics + +## Security Notes + +- Default configuration listens on all interfaces (`0.0.0.0`) +- No authentication is configured by default +- Consider adding authentication and SSL for production use +- Regularly update dependencies for security patches \ No newline at end of file diff --git a/GASFLUX_CONFIG_DOCUMENTATION.md b/GASFLUX_CONFIG_DOCUMENTATION.md new file mode 100644 index 0000000..2ccbb2f --- /dev/null +++ b/GASFLUX_CONFIG_DOCUMENTATION.md @@ -0,0 +1,422 @@ +# GasFlux 配置清单完整说明文档 + +## 概述 + +GasFlux 是一个用于处理无人机气体通量数据的完整管道系统。本文档详细说明了所有配置文件参数及其使用方法。 + +## 配置文件结构 + +GasFlux 使用 YAML 格式的配置文件,主要包含以下几个部分: + +1. **输出设置** (`output_dir`) +2. **必需列定义** (`required_cols`) +3. **气体配置** (`gases`) +4. **处理策略** (`strategies`) +5. **背景校正设置** (`algorithmic_baseline_settings`) +6. **半变异函数设置** (`semivariogram_settings`) +7. **普通克里金设置** (`ordinary_kriging_settings`) +8. **可选过滤器** (`filters`) - 高级配置 + +## 详细参数说明 + +### 1. 输出设置 + +```yaml +output_dir: ./output # 输出目录路径 +``` + +- **类型**: 字符串 +- **描述**: 指定处理结果的输出目录 +- **默认值**: `./output` +- **注意**: 可以使用相对路径或绝对路径 + +### 2. 必需列定义 + +```yaml +required_cols: + latitude: [-90, 90] # 纬度范围 + longitude: [-180, 180] # 经度范围 + height_ato: [0, 200] # 相对起飞高度(米) + windspeed: [0, 20] # 风速(m/s) + winddir: [0, 360] # 风向(度) + temperature: [-50, 60] # 温度(°C) + pressure: [900, 1100] # 气压(hPa) +``` + +- **格式**: 字典,键为列名,值为 `[最小值, 最大值]` 数组 +- **作用**: 数据验证和范围检查 +- **注意**: + - 所有值必须是 float64 类型 + - 不允许 NaN 值 + - 超出范围的值会报错 + +### 3. 气体配置 + +```yaml +gases: + co2: [300, 500] # 二氧化碳浓度范围(ppm) + ch4: [1.5, 10.0] # 甲烷浓度范围(ppm) +``` + +- **格式**: 字典,键为气体名称,值为 `[最小值, 最大值]` 数组 +- **作用**: 指定要处理的 gases 及其合理浓度范围 +- **注意**: + - 气体名称必须与数据中的列名完全匹配 + - 范围用于数据验证 + +### 4. 处理策略 + +```yaml +strategies: + background: "algorithm" # 背景校正方法 + sensor: "insitu" # 传感器类型 + spatial: "curtain" # 空间处理模式: "curtain" 或 "spiral" + interpolation: "kriging" # 插值方法 +``` + +- **background**: 目前只支持 `"algorithm"` +- **sensor**: 目前只支持 `"insitu"` +- **spatial**: `"curtain"` (平面模式) 或 `"spiral"` (螺旋模式) +- **interpolation**: 目前只支持 `"kriging"` + +## 背景校正算法设置 + +### 算法总览 + +```yaml +algorithmic_baseline_settings: + algorithm: fastchrom # 选择使用的算法 + # 以下是各算法的具体参数 +``` + +### 支持的算法 + +#### 1. FastChrom 算法 (推荐用于大多数情况) + +```yaml +algorithmic_baseline_settings: + algorithm: fastchrom + fastchrom: + half_window: 6 # 半窗口大小,用于基线拟合 + threshold: "custom" # 阈值方法,推荐使用 "custom" + min_fwhm: ~ # 最小峰宽,~ 表示 null + interp_half_window: 3 # 插值半窗口 + smooth_half_window: 3 # 平滑半窗口 + weights: ~ # 权重,~ 表示 null + max_iter: 100 # 最大迭代次数 + min_length: 2 # 最小段长度 +``` + +#### 2. Dietrich 算法 + +```yaml +algorithmic_baseline_settings: + algorithm: dietrich + dietrich: + poly_order: 5 # 多项式阶数 + smooth_half_window: 5 # 平滑半窗口 +``` + +#### 3. FABC (Fully Automatic Baseline Correction) 算法 + +```yaml +algorithmic_baseline_settings: + algorithm: fabc + fabc: + lam: 10000 # 平滑参数,值越大基线越平滑 + scale: 10 # 小波变换尺度 + diff_order: 2 # 微分矩阵阶数 +``` + +#### 4. Golotvin 算法 + +```yaml +algorithmic_baseline_settings: + algorithm: golotvin + golotvin: + half_window: 2 # 半窗口大小 + sections: 10 # 分段数量 +``` + +## 克里金插值设置 + +### 半变异函数设置 + +```yaml +semivariogram_settings: + model: spherical # 变异函数模型: spherical, gaussian, exponential + estimator: cressie # 估计器: cressie, matheron, dowd + n_lags: 20 # 滞后期数 + bin_func: even # 分箱函数: even, uniform + fit_method: lm # 拟合方法: lm, manual + maxlag: 100 # 最大滞后距离(米) + tolerance: 10 # 方向容差(度) + azimuth: 0 # 方位角(度,0为水平向右) + bandwidth: 20 # 带宽(米) +``` + +### 普通克里金设置 + +```yaml +ordinary_kriging_settings: + min_points: 3 # 最小邻点数 + max_points: 100 # 最大邻点数 + grid_resolution: 500 # 网格分辨率 + min_nodes: 10 # 最小网格节点数 + y_min: ~ # 最小y值覆盖,手动覆盖,~表示使用默认 + cut_ground: True # 是否切割地面以下的值 +``` + +## 空间处理模式详解 + +### 平面模式 (Curtain Mode) + +**适用场景**: 直线飞行路径,沿着固定方向的多个平行航线 + +```yaml +strategies: + spatial: "curtain" + +# 推荐的半变异函数设置(平面模式) +semivariogram_settings: + model: spherical + estimator: cressie + n_lags: 15 + bin_func: even + fit_method: lm + maxlag: 80 # 根据飞行距离调整 + tolerance: 15 # 较大的容差适应直线路径 + azimuth: 0 # 沿着飞行方向 + bandwidth: 25 # 较大的带宽适应航线间距 + +ordinary_kriging_settings: + min_points: 5 + max_points: 80 + grid_resolution: 200 # 较高的分辨率 + min_nodes: 10 + y_min: 20 # 设置最小高度 + cut_ground: True +``` + +**特点**: +- 应用风偏移校正 +- 沿着最大单调序列提取航线 +- 适合规则的栅格飞行模式 + +### 螺旋模式 (Spiral Mode) + +**适用场景**: 螺旋或圆形飞行路径 + +```yaml +strategies: + spatial: "spiral" + +# 推荐的半变异函数设置(螺旋模式) +semivariogram_settings: + model: spherical + estimator: cressie + n_lags: 20 + bin_func: even + fit_method: lm + maxlag: 100 # 较大的最大距离适应螺旋半径 + tolerance: 30 # 更大的容差适应圆形路径 + azimuth: 0 # 径向方向 + bandwidth: 20 # 适应螺旋间距 + +ordinary_kriging_settings: + min_points: 3 + max_points: 100 + grid_resolution: 500 # 较低的分辨率适应圆形区域 + min_nodes: 10 + y_min: ~ # 自动确定最小高度 + cut_ground: True +``` + +**特点**: +- 不应用风偏移校正(假设风垂直于螺旋) +- 计算圆偏差和中心 +- 重新居中方位角 +- 使用周长距离作为x坐标 + +## 可选过滤器(高级配置) + +```yaml +filters: + course_filter: + azimuth_filter: 15 # 方位角过滤容差(度) + azimuth_window: 8 # 滚动中位数窗口大小 + elevation_filter: 8 # 海拔过滤容差(度) +``` + +## 完整配置示例 + +### 平面模式完整配置 + +```yaml +output_dir: ./curtain_output + +required_cols: + latitude: [-90, 90] + longitude: [-180, 180] + height_ato: [0, 200] + windspeed: [0, 20] + winddir: [0, 360] + temperature: [-50, 60] + pressure: [900, 1100] + +gases: + co2: [300, 500] + ch4: [1.5, 10.0] + +strategies: + background: "algorithm" + sensor: "insitu" + spatial: "curtain" + interpolation: "kriging" + +algorithmic_baseline_settings: + algorithm: fastchrom + fastchrom: + half_window: 6 + threshold: "custom" + min_fwhm: ~ + interp_half_window: 3 + smooth_half_window: 3 + weights: ~ + max_iter: 100 + min_length: 2 + +semivariogram_settings: + model: spherical + estimator: cressie + n_lags: 15 + bin_func: even + fit_method: lm + maxlag: 80 + tolerance: 15 + azimuth: 0 + bandwidth: 25 + +ordinary_kriging_settings: + min_points: 5 + max_points: 80 + grid_resolution: 200 + min_nodes: 10 + y_min: 20 + cut_ground: True +``` + +### 螺旋模式完整配置 + +```yaml +output_dir: ./spiral_output + +required_cols: + latitude: [-90, 90] + longitude: [-180, 180] + height_ato: [0, 200] + windspeed: [0, 20] + winddir: [0, 360] + temperature: [-50, 60] + pressure: [900, 1100] + +gases: + co2: [300, 500] + ch4: [1.5, 10.0] + +strategies: + background: "algorithm" + sensor: "insitu" + spatial: "spiral" + interpolation: "kriging" + +algorithmic_baseline_settings: + algorithm: fastchrom + fastchrom: + half_window: 6 + threshold: "custom" + min_fwhm: ~ + interp_half_window: 3 + smooth_half_window: 3 + weights: ~ + max_iter: 100 + min_length: 2 + +semivariogram_settings: + model: spherical + estimator: cressie + n_lags: 20 + bin_func: even + fit_method: lm + maxlag: 100 + tolerance: 30 + azimuth: 0 + bandwidth: 20 + +ordinary_kriging_settings: + min_points: 3 + max_points: 100 + grid_resolution: 500 + min_nodes: 10 + y_min: ~ + cut_ground: True +``` + +## 参数调优指南 + +### 空间模式选择 + +1. **平面模式 (curtain)**: + - 飞行路径呈直线或平行航线 + - 数据点分布在规则的栅格中 + - 适合大型区域的系统采样 + +2. **螺旋模式 (spiral)**: + - 飞行路径呈螺旋或圆形 + - 数据点围绕中心点分布 + - 适合点源排放的详细采样 + +### 半变异函数调优 + +1. **maxlag**: 设置为数据空间范围的 80-100% +2. **tolerance**: 平面模式 10-20°,螺旋模式 20-40° +3. **bandwidth**: 根据飞行间距调整,过大会影响精度 +4. **n_lags**: 通常 10-25,根据数据量调整 + +### 克里金插值调优 + +1. **grid_resolution**: 影响输出网格密度 +2. **min_points/max_points**: 平衡计算速度和精度 +3. **cut_ground**: 根据是否有地面高程数据决定 + +## 故障排除 + +### 常见错误 + +1. **"autodetected range of [nan, nan] is not finite"** + - 检查气体列是否有NaN值 + - 确认气体名称与数据列名匹配 + +2. **"`ydata` must not be empty!"** + - 检查半变异函数参数是否过于严格 + - 减少 maxlag 或增加 tolerance + +3. **Missing columns** + - 确认数据列名与配置中的 gases 键匹配 + - 检查必需列是否存在 + +### 性能优化 + +1. **减少计算时间**: 降低 grid_resolution,减少 max_points +2. **提高精度**: 增加 n_lags,调整半变异函数参数 +3. **内存优化**: 适当减少 max_points 和 grid_resolution + +## 版本信息 + +- **GasFlux 版本**: 开发版 +- **最后更新**: 2025年2月 +- **文档版本**: 1.0 + +--- + +*本配置文档基于 GasFlux 系统的实际代码实现编写。如有疑问,请参考源码注释或提交 Issue。* \ No newline at end of file diff --git a/README.md b/README.md index 3358bd8..a6b35ac 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ GasFlux 是一个专门用于处理无人机或飞行器采集的气体浓度数 - **灵活配置**: 基于 YAML 的配置系统,支持自定义参数 - **可视化输出**: 自动生成数据分析图表和报告 - **命令行工具**: 提供直观的 CLI 接口 +- **Web API 服务**: 提供完整的 RESTful API,支持异步处理、实时监控和详细统计 - **跨平台支持**: 支持 Windows、macOS 和 Linux ## 📋 系统要求 @@ -77,6 +78,62 @@ gasflux process /path/to/data/directory python src/gasflux/run_example.py your_data.xlsx ``` +## 🌐 Web API 服务 + +GasFlux 提供完整的 Web API 服务,支持通过 HTTP 接口进行数据处理。详见以下文档: + +- [API 文档](API_DOCUMENTATION.md) - 完整的 API 接口说明 +- [环境变量配置](ENVIRONMENT_VARIABLES.md) - 环境变量配置指南 +- [Waitress 部署](WAITRESS_DEPLOYMENT.md) - 生产环境部署指南 + +### 启动 Web 服务 + +```bash +# 启动 API 服务(使用默认配置) +python run_api.py + +# 或使用自定义环境变量 +export GASFLUX_PORT=8080 +export GASFLUX_LOG_LEVEL=DEBUG +python run_api.py + +# 服务将在配置的地址和端口启动 +# 访问 http://localhost:5000 查看 Web 界面 +``` + +### 环境变量配置 + +GasFlux 支持通过环境变量进行灵活配置。详见 [ENVIRONMENT_VARIABLES.md](ENVIRONMENT_VARIABLES.md) 获取完整配置指南。 + +**常用配置示例**: + +```bash +# 端口配置 +export GASFLUX_PORT=8080 + +# 日志配置 +export GASFLUX_LOG_LEVEL=DEBUG +export GASFLUX_LOG_FILE=/var/log/gasflux/api.log + +# 性能配置 +export GASFLUX_THREADS=16 +export GASFLUX_MAX_CONTENT_LENGTH=524288000 # 500MB + +# 目录配置 +export GASFLUX_UPLOAD_FOLDER=/data/uploads +export GASFLUX_OUTPUT_FOLDER=/data/outputs +``` + +### API 特性 + +- **异步处理**: 支持大文件处理,不阻塞客户端 +- **实时监控**: 通过任务 ID 实时查询处理状态 +- **文件管理**: 自动文件上传、处理和下载 +- **健康检查**: 系统状态监控和诊断 +- **详细日志**: 完整的请求日志和性能监控 +- **统计监控**: 实时 API 统计、性能指标和系统资源监控 +- **环境变量配置**: 通过环境变量灵活配置,无需修改代码 + ## 📖 使用指南 ### 配置文件 diff --git a/WAITRESS_DEPLOYMENT.md b/WAITRESS_DEPLOYMENT.md new file mode 100644 index 0000000..608f611 --- /dev/null +++ b/WAITRESS_DEPLOYMENT.md @@ -0,0 +1,271 @@ +# GasFlux Web API - Waitress WSGI 部署指南 + +本文档介绍如何使用 Waitress WSGI 服务器打包和部署 GasFlux Web API 为独立可执行文件。 + +## 概述 + +Waitress 是一个纯 Python WSGI 服务器,适合生产环境使用。本部署方案将 Flask 应用与 Waitress 打包为单个可执行文件,无需额外安装 Python 环境。 + +## 文件说明 + +### 核心文件 + +- **`server_waitress.py`** - Waitress 服务器入口点 +- **`src/gasflux/app.py`** - Flask 应用定义 +- **`build_exe.bat`** - Windows 构建脚本 +- **`build_exe.sh`** - Linux/macOS 构建脚本 +- **`EXE_BUILD_README.md`** - 详细构建和部署指南 + +### 构建产物 + +- **`dist/GasFluxAPI.exe`** (Windows) 或 **`dist/GasFluxAPI`** (Linux/macOS) - 独立可执行文件 + +## 快速开始 + +### 1. 安装依赖 + +```bash +pip install -r requirements.txt +pip install pyinstaller waitress +``` + +### 2. 构建可执行文件 + +**Windows:** +```cmd +build_exe.bat +``` + +**Linux/macOS:** +```bash +chmod +x build_exe.sh +./build_exe.sh +``` + +### 3. 运行服务器 + +```bash +# Windows +dist\GasFluxAPI.exe + +# Linux/macOS +./dist/GasFluxAPI +``` + +服务器将在 `http://localhost:5000` 启动。 + +## 服务器配置 + +### 默认配置 + +```python +host = '0.0.0.0' # 监听所有接口 +port = 5000 # 默认端口 +threads = 8 # 工作线程数 +connection_limit = 100 # 最大并发连接 +timeout = 300 # 请求超时(秒) +``` + +### 自定义配置 + +修改 `server_waitress.py` 中的参数: + +```python +# 自定义端口 +port = 8080 + +# 增加线程数 +threads = 16 + +# 调整超时时间 +timeout = 600 # 10分钟 +``` + +## 部署架构 + +### 单文件部署 + +``` +部署目录/ +├── GasFluxAPI(.exe) # 可执行文件 +├── web_api_data/ # 数据目录(自动创建) +│ ├── uploads/ # 上传文件 +│ └── outputs/ # 处理结果 +├── logs/ # 日志文件(自动创建) +└── gasflux_config.yaml # 配置文件(可选) +``` + +### 生产部署建议 + +#### 使用反向代理 + +```nginx +# nginx 配置示例 +server { + listen 80; + server_name your-domain.com; + + location / { + proxy_pass http://127.0.0.1:5000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} +``` + +#### 使用进程管理器 + +**systemd (Linux):** + +```ini +[Unit] +Description=GasFlux Web API +After=network.target + +[Service] +Type=simple +User=www-data +WorkingDirectory=/path/to/deployment +ExecStart=/path/to/deployment/GasFluxAPI +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target +``` + +**Windows 服务:** + +使用 NSSM (Non-Sucking Service Manager) 将 exe 注册为 Windows 服务。 + +## 性能优化 + +### Waitress 参数调优 + +```python +serve( + app, + host='0.0.0.0', + port=5000, + threads=16, # 根据 CPU 核心数调整 + connection_limit=200, # 最大并发连接 + timeout=300, # 长请求超时 + backlog=2048, # 连接队列长度 + recv_bytes=8192, # 接收缓冲区 + send_bytes=8192, # 发送缓冲区 +) +``` + +### 监控和日志 + +- **访问日志**: `logs/gasflux_api.log` +- **控制台输出**: 启动时显示的控制台信息 +- **健康检查**: `GET /health` 端点 + +### 资源使用 + +- **内存**: 每个工作进程约 50-200MB(取决于数据处理量) +- **CPU**: 多线程处理,建议 4+ 核心 +- **磁盘**: 日志和临时文件存储 + +## 安全考虑 + +### 基本安全措施 + +1. **防火墙配置**: 只开放必要端口 +2. **用户权限**: 以非 root 用户运行 +3. **文件权限**: 数据目录限制访问权限 + +### 生产环境建议 + +1. **HTTPS**: 使用反向代理配置 SSL +2. **认证**: 添加 API 密钥或 JWT 认证 +3. **限流**: 实现请求频率限制 +4. **监控**: 设置日志监控和告警 + +## 故障排除 + +### 常见问题 + +1. **端口占用** + ```bash + # 检查端口使用 + netstat -tulpn | grep :5000 + # 或 Windows: netstat -ano | findstr :5000 + ``` + +2. **权限问题** + ```bash + # 确保可执行文件有执行权限 + chmod +x GasFluxAPI + # 确保数据目录可写 + chmod -R 755 web_api_data/ + ``` + +3. **构建失败** + ```bash + # 清理旧构建 + rm -rf build/ dist/ + # 重新安装依赖 + pip install --upgrade pyinstaller waitress + ``` + +4. **内存不足** + - 减少线程数 + - 增加服务器内存 + - 优化数据处理流程 + +### 调试模式 + +临时启用详细日志: + +```bash +# 修改 server_waitress.py +import logging +logging.basicConfig(level=logging.DEBUG) +``` + +## 维护和更新 + +### 更新部署 + +1. 构建新版本可执行文件 +2. 备份数据目录 +3. 停止旧服务 +4. 替换可执行文件 +5. 启动新服务 + +### 备份策略 + +- **数据**: `web_api_data/` 目录 +- **配置**: `gasflux_config.yaml` +- **日志**: `logs/` 目录 + +## API 使用 + +部署完成后,API 端点与开发环境相同: + +- **健康检查**: `GET /health` +- **文件上传**: `POST /upload` +- **任务状态**: `GET /task/{task_id}` +- **文件下载**: `GET /download/{filename}` +- **Web 界面**: `GET /` + +详细 API 文档请参考 `API_DOCUMENTATION.md`。 + +## 总结 + +使用 Waitress 打包的方案提供了: + +- ✅ **零依赖部署**: 单文件可执行 +- ✅ **生产就绪**: WSGI 服务器,适合高并发 +- ✅ **跨平台**: 支持 Windows/Linux/macOS +- ✅ **易于维护**: 简单的部署和更新流程 +- ✅ **完整功能**: 保留所有 Flask 应用功能 + +这种部署方式特别适合: +- Windows 服务器环境 +- 简单的生产部署需求 +- 需要独立可执行文件的场景 \ No newline at end of file diff --git a/build_exe.bat b/build_exe.bat new file mode 100644 index 0000000..3b1dfb0 --- /dev/null +++ b/build_exe.bat @@ -0,0 +1,62 @@ +@echo off +REM GasFlux Web API - Build executable with PyInstaller +REM This script builds a standalone executable using Waitress WSGI server + +echo Building GasFlux Web API executable... + +REM Check if PyInstaller is installed +python -c "import PyInstaller" >nul 2>&1 +if errorlevel 1 ( + echo Error: PyInstaller is not installed. Please run: + echo pip install pyinstaller waitress + pause + exit /b 1 +) + +REM Check if Waitress is installed +python -c "import waitress" >nul 2>&1 +if errorlevel 1 ( + echo Error: Waitress is not installed. Please run: + echo pip install waitress + pause + exit /b 1 +) + +REM Create dist directory if it doesn't exist +if not exist "dist" mkdir dist + +echo Creating executable with PyInstaller... + +REM Build the executable +pyinstaller --onefile ^ + --name GasFluxAPI ^ + --hidden-import waitress ^ + --hidden-import flask ^ + --hidden-import werkzeug ^ + --hidden-import yaml ^ + --hidden-import pandas ^ + --hidden-import numpy ^ + --hidden-import flask_cors ^ + --hidden-import psutil ^ + --add-data "src\gasflux\gasflux_config.yaml;src\gasflux" ^ + --add-data "API_DOCUMENTATION.md;." ^ + --exclude-module matplotlib ^ + --exclude-module tkinter ^ + server_waitress.py + +if errorlevel 1 ( + echo Error: Failed to build executable + pause + exit /b 1 +) + +echo. +echo Build completed successfully! +echo Executable created: dist\GasFluxAPI.exe +echo. +echo To run the server: +echo GasFluxAPI.exe +echo. +echo The server will start on http://localhost:5000 +echo. +pause \ No newline at end of file diff --git a/build_exe.sh b/build_exe.sh new file mode 100644 index 0000000..e9cd096 --- /dev/null +++ b/build_exe.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# GasFlux Web API - Build executable with PyInstaller +# This script builds a standalone executable using Waitress WSGI server + +echo "Building GasFlux Web API executable..." + +# Check if PyInstaller is installed +if ! python3 -c "import PyInstaller" 2>/dev/null; then + echo "Error: PyInstaller is not installed. Please run:" + echo "pip install pyinstaller waitress" + exit 1 +fi + +# Check if Waitress is installed +if ! python3 -c "import waitress" 2>/dev/null; then + echo "Error: Waitress is not installed. Please run:" + echo "pip install waitress" + exit 1 +fi + +# Create dist directory if it doesn't exist +mkdir -p dist + +echo "Creating executable with PyInstaller..." + +# Build the executable +pyinstaller --onefile \ + --name GasFluxAPI \ + --hidden-import waitress \ + --hidden-import flask \ + --hidden-import werkzeug \ + --hidden-import yaml \ + --hidden-import pandas \ + --hidden-import numpy \ + --hidden-import flask_cors \ + --hidden-import psutil \ + --add-data "src/gasflux/gasflux_config.yaml:src/gasflux" \ + --add-data "API_DOCUMENTATION.md:." \ + --exclude-module matplotlib \ + --exclude-module tkinter \ + server_waitress.py + +if [ $? -ne 0 ]; then + echo "Error: Failed to build executable" + exit 1 +fi + +echo "" +echo "Build completed successfully!" +echo "Executable created: dist/GasFluxAPI" +echo "" +echo "To run the server:" +echo "./dist/GasFluxAPI" +echo "" +echo "The server will start on http://localhost:5000" \ No newline at end of file diff --git a/build_gasflux_exe.bat b/build_gasflux_exe.bat deleted file mode 100644 index d04a53c..0000000 --- a/build_gasflux_exe.bat +++ /dev/null @@ -1,48 +0,0 @@ -@echo off -echo ======================================== -echo GasFlux RunExample EXE打包工具 (Windows) -echo ======================================== -echo. - -cd /d "%~dp0" - -echo [1/4] 检查Python环境... -python --version -if errorlevel 1 ( - echo 错误:未找到Python - pause - exit /b 1 -) - -echo [2/4] 升级pip... -python -m pip install --upgrade pip - -echo [3/4] 安装PyInstaller... -python -m pip install pyinstaller -if errorlevel 1 ( - echo 错误:PyInstaller安装失败 - pause - exit /b 1 -) - -echo [4/4] 开始打包... -python -m PyInstaller --clean gasflux_run_example.spec -if errorlevel 1 ( - echo 错误:打包失败 - pause - exit /b 1 -) - -echo. -echo ======================================== -echo 打包完成! -echo ======================================== -echo. -echo 可执行文件位置:dist\GasFlux_RunExample.exe -echo. -echo 使用方法: -echo GasFlux_RunExample.exe input.xlsx -echo GasFlux_RunExample.exe input.xlsx --output result.csv -echo GasFlux_RunExample.exe input.xlsx --no-gasflux -echo. -pause diff --git a/build_gasflux_exe.sh b/build_gasflux_exe.sh deleted file mode 100644 index ce4472f..0000000 --- a/build_gasflux_exe.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash - -echo "========================================" -echo "GasFlux RunExample EXE打包工具 (Linux/Mac)" -echo "========================================" -echo - -cd "$(dirname "$0")" - -echo "[1/4] 检查Python环境..." -if ! command -v python3 &> /dev/null; then - echo "错误:未找到Python3" - exit 1 -fi - -python3 --version - -echo "[2/4] 升级pip..." -python3 -m pip install --upgrade pip - -echo "[3/4] 安装PyInstaller..." -python3 -m pip install pyinstaller - -if [ $? -ne 0 ]; then - echo "错误:PyInstaller安装失败" - exit 1 -fi - -echo "[4/4] 开始打包..." -python3 -m PyInstaller --clean gasflux_run_example.spec - -if [ $? -ne 0 ]; then - echo "错误:打包失败" - exit 1 -fi - -echo -echo "========================================" -echo "打包完成!" -echo "========================================" -echo -echo "可执行文件位置:dist/GasFlux_RunExample" -echo -echo "使用方法:" -echo " ./GasFlux_RunExample input.xlsx" -echo " ./GasFlux_RunExample input.xlsx --output result.csv" -echo " ./GasFlux_RunExample input.xlsx --no-gasflux" -echo diff --git a/env.example b/env.example new file mode 100644 index 0000000..e25604b --- /dev/null +++ b/env.example @@ -0,0 +1,30 @@ +# GasFlux Web API - Environment Variables Example +# Copy this file to your environment and modify as needed + +# Server Configuration +GASFLUX_HOST=0.0.0.0 +GASFLUX_PORT=5000 +GASFLUX_DEBUG=false + +# Directory Configuration +GASFLUX_UPLOAD_FOLDER=web_api_data/uploads +GASFLUX_OUTPUT_FOLDER=web_api_data/outputs + +# File Size Limits (in bytes) +GASFLUX_MAX_CONTENT_LENGTH=104857600 # 100MB + +# Logging Configuration +GASFLUX_LOG_LEVEL=INFO +GASFLUX_LOG_FILE=logs/gasflux_api.log + +# CORS Configuration +GASFLUX_CORS_ORIGINS=* + +# Task Management +GASFLUX_TASK_CLEANUP_INTERVAL=3600 # 1 hour +GASFLUX_MAX_TASK_AGE=86400 # 24 hours + +# Performance Tuning +GASFLUX_THREADS=8 +GASFLUX_CONNECTION_LIMIT=100 +GASFLUX_CHANNEL_TIMEOUT=300 \ No newline at end of file diff --git a/examples/basic_usage/advanced_config.yaml b/examples/basic_usage/advanced_config.yaml deleted file mode 100644 index 5ee39da..0000000 --- a/examples/basic_usage/advanced_config.yaml +++ /dev/null @@ -1,52 +0,0 @@ -output_dir: ./advanced_output - -required_cols: - latitude: [-90, 90] - longitude: [-180, 180] - height_ato: [-100, 500] - windspeed: [1, 15] - winddir: [0, 360] - temperature: [0, 30] - pressure: [980, 1030] - -gases: - ch4: [1.8, 5.0] - co2: [400, 500] - - -strategies: - background: "algorithm" - sensor: "insitu" - spatial: "curtain" - interpolation: "kriging" - -algorithmic_baseline_settings: - algorithm: dietrich - dietrich: - poly_order: 4 - smooth_half_window: 4 - -semivariogram_settings: - model: gaussian - estimator: cressie - n_lags: 15 - bin_func: even - fit_method: lm - maxlag: 80 - tolerance: 15 - azimuth: 0 - bandwidth: 25 - -ordinary_kriging_settings: - min_points: 5 - max_points: 80 - grid_resolution: 200 - min_nodes: 10 - y_min: 20 - cut_ground: True - -filters: - course_filter: - azimuth_filter: 15 - azimuth_window: 8 - elevation_filter: 8 diff --git a/examples/basic_usage/data/08_34_01_间隔高度5m.xlsx b/examples/basic_usage/data/08_34_01_间隔高度5m.xlsx deleted file mode 100644 index 693ae7d..0000000 Binary files a/examples/basic_usage/data/08_34_01_间隔高度5m.xlsx and /dev/null differ diff --git a/examples/basic_usage/data/08_51_15_间隔高度10m.xlsx b/examples/basic_usage/data/08_51_15_间隔高度10m.xlsx deleted file mode 100644 index b71b273..0000000 Binary files a/examples/basic_usage/data/08_51_15_间隔高度10m.xlsx and /dev/null differ diff --git a/examples/basic_usage/data/gasflux_config.yaml b/examples/basic_usage/data/gasflux_config.yaml deleted file mode 100644 index 9f435a5..0000000 --- a/examples/basic_usage/data/gasflux_config.yaml +++ /dev/null @@ -1,69 +0,0 @@ -# GasFlux configuration file for basic usage example - -output_dir: ./10m - -# Required columns and their maximum valid ranges -required_cols: - latitude: [-90, 90] - longitude: [-180, 180] - height_ato: [0, 50] # meters above takeoff - windspeed: [0, 50] # m/s - winddir: [0, 360] # degrees - temperature: [-50, 60] # degrees Celsius - pressure: [900, 1100] # hPa/mb - -# Optional gas columns and their maximum ppm concentration ranges. -# Relative concentrations are used, so absolute offset can be incorrect as long as gain and linearity are correct. -gases: - ch4: [2, 2.5] - - -strategies: - background: "algorithm" # Currently only algorithmic baseline correction (via pybaselines) is supported - sensor: "insitu" # Currently only in-situ sensor data is supported - spatial: "spiral" # Spatial processing mode: "curtain" and "spiral" are supported - interpolation: "kriging" # Currently only kriging interpolation is supported - -# Baseline correction algorithm settings -algorithmic_baseline_settings: - algorithm: fastchrom - fastchrom: { - "half_window": 6, - "threshold": "custom", # - "min_fwhm": ~, - "interp_half_window": 3, - "smooth_half_window": 3, - "weights": ~, - "max_iter": 100, - "min_length": 2} - fabc : { - "lam": 10000, # The smoothing parameter. Larger values will create smoother baselines. Default is 1e6. - "scale": 10, # The scale at which to calculate the continuous wavelet transform. Should be approximately equal to the index-based full-width-at-half-maximum of the peaks or features in the data. Default is None, which will use half of the value from optimize_window(), which is not always a good value, but at least scales with the number of data points and gives a starting point for tuning the parameter. - "diff_order": 2} # The order of the differential matrix. Must be greater than 0. Default is 2 (second order differential matrix). Typical values are 2 or 1. - dietrich : { - "poly_order": 5, - "smooth_half_window": 5,} - golotvin : { - "half_window": 2, - "sections": 10} - -# Kriging settings - aggressively optimized for Spiral mode -semivariogram_settings: - model: exponential # Changed to exponential model for better circular data fitting - estimator: cressie # Robust estimator for variogram calculation - n_lags: 50 # Further increased to 50 for better variogram resolution - bin_func: even # Even binning function - fit_method: lm # Least squares fitting method - ### Aggressively increased search ranges for circular/spiral data distribution - maxlag: 5000 # Dramatically increased to 5000m for comprehensive coverage - tolerance: 180 # Increased to 180° to allow full circular search - azimuth: 0 # Horizontal direction maintained - bandwidth: 300 # Further increased to 300m for maximum search bandwidth - # fit_sigma: linear # this should allow for a spatial uncertainty but currently producing bugs -ordinary_kriging_settings: - min_points: 1 # Reduced to 1 to allow interpolation even with sparse data - max_points: 20 # Further reduced to 20 to minimize computational load - grid_resolution: 100 # Increased density to 100 for finer interpolation grid - min_nodes: 20 # Increased to 20 to ensure sufficient grid nodes - y_min: ~ # Automatically determine minimum y value - cut_ground: False # Keep ground cutting disabled diff --git a/examples/basic_usage/data/testdata.csv b/examples/basic_usage/data/testdata.csv deleted file mode 100644 index 3b15806..0000000 --- a/examples/basic_usage/data/testdata.csv +++ /dev/null @@ -1,1001 +0,0 @@ -timestamp,latitude,longitude,x,height_ato,windspeed,temperature,pressure,ch4,co2,c2h6,norm_x,norm_altitude_ato,index_x,index_y,winddir,geometry,utm_easting,utm_northing,hor_distance,vert_distance,course_azimuth,course_elevation -2022-09-26 02:03:00,54.87667,15.41,50.0,-10.0,5.7636649217848985,10.0,1000.0,1.9500281451845713,380.00001357720237,1.1292820243772104e-05,0.05,0.07142857142857142,24,7,359.37311574951946,POINT (526307.4073509022 6081144.509516094),526307.4073509022,6081144.509516094,,,, -2022-09-26 02:03:01,54.8766544010694,15.409846579958499,59.09090909090909,-10.0,5.701597666420126,10.0,1000.0,1.9500404026708875,380.0000236957387,1.3841592705542263e-05,0.0590909090909091,0.07142857142857142,29,7,358.7056703640377,POINT (526297.573457074 6081142.716126854),526297.573457074,6081142.716126854,9.996084873172414,0.0,259.66465276264836,0.0 -2022-09-26 02:03:02,54.87663880213877,15.409693159976248,68.18181818181819,-10.0,5.658136726485464,10.0,1000.0,1.9500575591729477,380.0000408897218,1.696505410230664e-05,0.06818181818181819,0.07142857142857142,34,7,357.5735954982973,POINT (526287.7395593789 6081140.922759174),526287.7395593789,6081140.922759174,9.99608480905653,0.0,259.6647783179793,0.0 -2022-09-26 02:03:03,54.87662320320811,15.409539740053246,77.27272727272728,-10.0,5.642223864269387,10.0,1000.0,1.9500759373742647,380.00006260790616,1.997797100264311e-05,0.07727272727272728,0.07142857142857142,38,7,356.55246896166614,POINT (526277.9056578164 6081139.129413056),526277.9056578164,6081139.129413056,9.996084745561282,0.0,259.6649038739105,0.0 -2022-09-26 02:03:04,54.8766076042774,15.409386320189489,86.36363636363637,-10.0,5.648587858244058,10.0,1000.0,1.9501065050569175,380.00010501078367,2.4554107668660794e-05,0.08636363636363638,0.07142857142857142,43,7,355.3969654033975,POINT (526268.0717523864 6081137.336088495),526268.0717523864,6081137.336088495,9.996084682896887,0.0,259.6650294089567,0.0 -2022-09-26 02:03:05,54.87659200534666,15.409232900384978,95.45454545454547,-10.0,5.673670472887558,10.0,1000.0,1.9501386625700552,380.0001566833345,2.9029119474096733e-05,0.09545454545454547,0.07142857142857142,47,7,354.7333112625282,POINT (526258.2378430893 6081135.542785497),526258.2378430893,6081135.542785497,9.996084618819895,0.0,259.665154975035,0.0 -2022-09-26 02:03:06,54.87657640641588,15.409079480639713,104.54545454545455,-10.0,5.725218623129551,10.0,1000.0,1.9501911520790183,380.0002537022056,3.5944744990592254e-05,0.10454545454545455,0.07142857142857142,52,7,354.3696970043718,POINT (526248.4039299246 6081133.74950406),526248.4039299246,6081133.74950406,9.996084555750253,0.0,259.6652805258391,0.0 -2022-09-26 02:03:07,54.87656080748504,15.408926060953696,113.63636363636364,-10.0,5.777457959822437,10.0,1000.0,1.9502453482327697,380.0003673772214,4.284519345805669e-05,0.11363636363636365,0.07142857142857142,56,7,354.4698031579665,POINT (526238.5700128927 6081131.95624418),526238.5700128927,6081131.95624418,9.996084492719179,0.0,259.66540606578246,0.0 -2022-09-26 02:03:08,54.87654520855417,15.408772641326928,122.72727272727273,-10.0,5.849489690452739,10.0,1000.0,1.9503321173207224,380.0005721245226,5.376078814724531e-05,0.12272727272727274,0.07142857142857142,61,7,354.95635221245993,POINT (526228.7360919937 6081130.1630058605),526228.7360919937,6081130.1630058605,9.99608442928742,0.0,259.66553161611085,0.0 -2022-09-26 02:03:09,54.87652960962325,15.408619221759407,131.8181818181818,-10.0,5.909313535638171,10.0,1000.0,1.9504200055612742,380.0008023487054,6.492406450991009e-05,0.1318181818181818,0.07142857142857142,65,7,355.4171553952361,POINT (526218.9021672276 6081128.3697891),526218.9021672276,6081128.3697891,9.99608436618526,0.0,259.665657161309,0.0 -2022-09-26 02:03:10,54.87651401069229,15.408465802251133,140.90909090909093,-10.0,5.9868615132561365,10.0,1000.0,1.9505579657370602,380.0011996287321,8.303859430897744e-05,0.14090909090909093,0.07142857142857142,70,7,355.9292556857745,POINT (526209.0682385943 6081126.576593901),526209.0682385943,6081126.576593901,9.996084302682425,0.0,259.6657827168922,0.0 -2022-09-26 02:03:11,54.8764984117613,15.408312382802109,150.0,-10.0,6.047436830746507,10.0,1000.0,1.9506949940913105,380.00162789200834,0.00010201092521687018,0.15,0.07142857142857142,74,7,356.25175315815284,POINT (526199.2343060941 6081124.783420263),526199.2343060941,6081124.783420263,9.996084239113065,0.0,259.6659082723572,0.0 -2022-09-26 02:03:12,54.87648281283027,15.40815896341233,159.0909090909091,-10.0,6.110698796456781,10.0,1000.0,1.9509058065986362,380.00233552390125,0.000133460504925043,0.1590909090909091,0.07142857142857142,79,7,356.43058552081504,POINT (526189.4003697266 6081122.990268184),526189.4003697266,6081122.990268184,9.99608417626942,0.0,259.6660338176798,0.0 -2022-09-26 02:03:13,54.8764672138992,15.408005544081798,168.1818181818182,-10.0,6.1425832539255305,10.0,1000.0,1.951111051797966,380.003066562536,0.00016696064399955834,0.16818181818181818,0.07142857142857142,83,7,356.3010730073197,POINT (526179.5664294921 6081121.197137665),526179.5664294921,6081121.197137665,9.996084112963123,0.0,259.6661593678965,0.0 -2022-09-26 02:03:14,54.876451614968076,15.407852124810512,177.27272727272728,-10.0,6.149695797254641,10.0,1000.0,1.9514204099907506,380.00422329066174,0.0002231584344845958,0.17727272727272728,0.07142857142857142,88,7,355.7104399903312,POINT (526169.7324853905 6081119.404028704),526169.7324853905,6081119.404028704,9.996084050153474,0.0,259.66628490773127,0.0 -2022-09-26 02:03:15,54.87643601603692,15.407698705598474,186.36363636363637,-10.0,6.125816753150344,10.0,1000.0,1.951715522233947,380.00536886456354,0.0002834073416901586,0.18636363636363637,0.07142857142857142,92,7,354.87931200031227,POINT (526159.8985374217 6081117.610941307),526159.8985374217,6081117.610941307,9.996083986671046,0.0,259.66641047394523,0.0 -2022-09-26 02:03:16,54.876420417105734,15.407545286445682,195.45454545454547,-10.0,6.060527264557768,10.0,1000.0,1.95215115434926,380.0071063346476,0.00038456749108773183,0.19545454545454546,0.07142857142857142,97,7,353.4525568817885,POINT (526150.0645855862 6081115.817875468),526150.0645855862,6081115.817875468,9.996083923446747,0.0,259.66653601867574,0.0 -2022-09-26 02:03:17,54.8764048181745,15.407391867352137,204.54545454545456,-10.0,5.964725552413674,10.0,1000.0,1.952668587658934,380.0092087742348,0.0005241859808887582,0.20454545454545456,0.07142857142857142,102,7,351.7543322756277,POINT (526140.2306298836 6081114.024831189),526140.2306298836,6081114.024831189,9.996083860614025,0.0,259.6666615637668,0.0 -2022-09-26 02:03:18,54.87638921924323,15.407238448317841,213.63636363636365,-10.0,5.876499214541821,10.0,1000.0,1.9531464376301855,380.01116495987935,0.000672405204139021,0.21363636363636365,0.07142857142857142,106,7,350.36285284045294,POINT (526130.3966703143 6081112.2318084715),526130.3966703143,6081112.2318084715,9.996083796984552,0.0,259.6667871242552,0.0 -2022-09-26 02:03:19,54.87637362031191,15.407085029342788,222.72727272727275,-10.0,5.767526596105532,10.0,1000.0,1.9538288886685624,380.01395756899325,0.0009171525311755627,0.22272727272727275,0.07142857142857142,111,7,348.81008837668503,POINT (526120.5627068777 6081110.438807312),526120.5627068777,6081110.438807312,9.996083734529401,0.0,259.6669126642176,0.0 -2022-09-26 02:03:20,54.876358021380554,15.406931610426984,231.81818181818184,-10.0,5.692501672821711,10.0,1000.0,1.9544459293779177,380.01646684306246,0.0011729770851334276,0.23181818181818184,0.07142857142857142,115,7,347.8645065399562,POINT (526110.7287395744 6081108.645827714),526110.7287395744,6081108.645827714,9.996083671162983,0.0,259.6670382194576,0.0 -2022-09-26 02:03:21,54.87634242244917,15.406778191570428,240.90909090909093,-10.0,5.623289813014538,10.0,1000.0,1.9553085392625313,380.0199384141567,0.0015877209423254676,0.24090909090909093,0.07142857142857142,120,7,347.15224859703216,POINT (526100.8947684044 6081106.8528696755),526100.8947684044,6081106.8528696755,9.99608360817866,0.0,259.66716376419595,0.0 -2022-09-26 02:03:22,54.876326823517736,15.406624772773114,250.00000000000003,-10.0,5.586216204987441,10.0,1000.0,1.9560722189805266,380.02297638400654,0.002012733632866698,0.25000000000000006,0.07142857142857142,124,7,346.8965761925583,POINT (526091.0607933672 6081105.059933197),526091.0607933672,6081105.059933197,9.996083545533395,0.0,259.6672893146663,0.0 -2022-09-26 02:03:23,54.87631122458625,15.406471354035048,259.0909090909091,-10.0,5.549886168164713,10.0,1000.0,1.9571177382412297,380.0270955887956,0.0026869916544790488,0.25909090909090915,0.07142857142857142,129,7,346.67890109905267,POINT (526081.2268144635 6081103.267018278),526081.2268144635,6081103.267018278,9.996083482248963,0.0,259.66741486442004,0.0 -2022-09-26 02:03:24,54.87629562565474,15.406317935356228,268.1818181818182,-10.0,5.536757918681367,10.0,1000.0,1.9580248137529428,380.0306547976658,0.0033627114618665476,0.2681818181818182,0.07142857142857142,133,7,346.5238221291873,POINT (526071.3928316928 6081101.474124919),526071.3928316928,6081101.474124919,9.99608341963768,0.0,259.6675404094025,0.0 -2022-09-26 02:03:25,54.87628002672318,15.406164516736656,277.27272727272725,-10.0,5.553984921173504,10.0,1000.0,1.9592427450782604,380.03546290986253,0.004409848469979827,0.2772727272727272,0.07142857142857142,138,7,346.4133059650662,POINT (526061.5588450555 6081099.681253118),526061.5588450555,6081099.681253118,9.996083356730807,0.0,259.66766595402754,0.0 -2022-09-26 02:03:26,54.876264427791575,15.40601109817633,286.3636363636364,-10.0,5.596731976119806,10.0,1000.0,1.9602804940176155,380.03963871448894,0.005434819923077223,0.2863636363636364,0.07142857142857142,142,7,346.4280687579564,POINT (526051.7248545515 6081097.888402879),526051.7248545515,6081097.888402879,9.996083293652381,0.0,259.66779150927704,0.0 -2022-09-26 02:03:27,54.87624882885993,15.405857679675249,295.4545454545455,-10.0,5.681108422815226,10.0,1000.0,1.9616514906743125,380.0453589367831,0.006985106320066661,0.29545454545454547,0.07142857142857142,147,7,346.6025241241012,POINT (526041.8908601807 6081096.095574198),526041.8908601807,6081096.095574198,9.996083231123063,0.0,259.66791704877323,0.0 -2022-09-26 02:03:28,54.87623322992825,15.405704261233415,304.54545454545456,-10.0,5.765436047103088,10.0,1000.0,1.9628037712233117,380.05042660478796,0.008466457886030777,0.30454545454545456,0.07142857142857142,151,7,346.8659028558997,POINT (526032.0568619432 6081094.302767078),526032.0568619432,6081094.302767078,9.996083168140633,0.0,259.6680426040259,0.0 -2022-09-26 02:03:29,54.876217630996535,15.405550842850829,313.6363636363637,-10.0,5.878251249339562,10.0,1000.0,1.9643103874725674,380.0575292118875,0.01065274853977091,0.31363636363636366,0.07142857142857142,156,7,347.31776778746314,POINT (526022.2228598393 6081092.509981518),526022.2228598393,6081092.509981518,9.996083105196686,0.0,259.66816814841786,0.0 -2022-09-26 02:03:30,54.87620203206478,15.405397424527488,322.72727272727275,-10.0,5.983211661504501,10.0,1000.0,1.9658904999335982,380.0656822468473,0.013243854419196299,0.32272727272727275,0.07142857142857142,161,7,347.8362184127275,POINT (526012.3888538688 6081090.717217519),526012.3888538688,6081090.717217519,9.996083042028697,0.0,259.66829370880566,0.0 -2022-09-26 02:03:31,54.87618643313298,15.405244006263391,331.81818181818187,-10.0,6.050795848923459,10.0,1000.0,1.9672104553430505,380.07310908243596,0.01562789431806899,0.33181818181818185,0.07142857142857142,165,7,348.23040615298555,POINT (526002.5548440315 6081088.924475078),526002.5548440315,6081088.924475078,9.996082979972908,0.0,259.66841924317623,0.0 -2022-09-26 02:03:32,54.87617083420114,15.405090588058542,340.90909090909093,-10.0,6.1041582380035075,10.0,1000.0,1.968938654777339,380.08369414463016,0.019014009025306398,0.34090909090909094,0.07142857142857142,170,7,348.59825765740175,POINT (525992.7208303278 6081087.131754198),525992.7208303278,6081087.131754198,9.996082916557336,0.0,259.66854480320814,0.0 -2022-09-26 02:03:33,54.876155235269266,15.40493716991294,350.0,-10.0,6.1169539105253525,10.0,1000.0,1.970393547095642,380.09330072537955,0.02205368013350821,0.35,0.07142857142857142,174,7,348.7202284998166,POINT (525982.8868127575 6081085.339054877),525982.8868127575,6081085.339054877,9.996082854315977,0.0,259.6686703427138,0.0 -2022-09-26 02:03:34,54.876139636337356,15.404783751826582,359.0909090909091,-10.0,6.0937322562567955,10.0,1000.0,1.9723198036460294,380.1067925577085,0.02626352996423706,0.3590909090909091,0.07142857142857142,179,7,348.5800679852571,POINT (525973.0527913208 6081083.546377118),525973.0527913208,6081083.546377118,9.996082790996407,0.0,259.6687959027489,0.0 -2022-09-26 02:03:35,54.8761240374054,15.404630333799467,368.1818181818182,-10.0,6.046528432536637,10.0,1000.0,1.9739617824223328,380.1187429829405,0.029947517280256575,0.36818181818181817,0.07142857142857142,183,7,348.2077087278944,POINT (525963.2187660174 6081081.753720916),525963.2187660174,6081081.753720916,9.996082729132583,0.0,259.66892143712573,0.0 -2022-09-26 02:03:36,54.8761084384734,15.404476915831602,377.2727272727273,-10.0,5.9613837979131095,10.0,1000.0,1.9761608915353386,380.1349575608213,0.03491648734640442,0.3772727272727273,0.07142857142857142,188,7,347.4508418570288,POINT (525953.3847368477 6081079.961086275),525953.3847368477,6081079.961086275,9.996082665961504,0.0,259.6690469917927,0.0 -2022-09-26 02:03:37,54.876092839541364,15.404323497922977,386.3636363636364,-10.0,5.886027667800833,10.0,1000.0,1.9780506218008256,380.14871323633065,0.03914763698394988,0.38636363636363635,0.07142857142857142,192,7,346.73598054668196,POINT (525943.5507038111 6081078.168473193),525943.5507038111,6081078.168473193,9.996082603974154,0.0,259.6691725367956,0.0 -2022-09-26 02:03:38,54.87607724060928,15.404170080073602,395.4545454545455,-10.0,5.809524827670786,10.0,1000.0,1.9805867273489894,380.16640983301136,0.044691898174391335,0.3954545454545455,0.07142857142857142,197,7,346.0056235617308,POINT (525933.7166669087 6081076.375881671),525933.7166669087,6081076.375881671,9.996082540889516,0.0,259.6692980806034,0.0 -2022-09-26 02:03:39,54.87606164167716,15.404016662283473,404.54545454545456,-10.0,5.776066544042551,10.0,1000.0,1.9827546160775944,380.18050101017826,0.04927051164936436,0.40454545454545454,0.07142857142857142,201,7,345.7017299388282,POINT (525923.8826261399 6081074.58331171),525923.8826261399,6081074.58331171,9.99608247809149,0.0,259.6694236355144,0.0 -2022-09-26 02:03:40,54.876046042745,15.403863244552586,413.6363636363637,-10.0,5.776634418519249,10.0,1000.0,1.9856224867465926,380.19727774162715,0.0550735772155796,0.4136363636363637,0.07142857142857142,206,7,345.7539564088646,POINT (525914.0485815044 6081072.790763306),525914.0485815044,6081072.790763306,9.996082416186075,0.0,259.6695491750311,0.0 -2022-09-26 02:03:41,54.8760304438128,15.403709826880947,422.72727272727275,-10.0,5.809921892227679,10.0,1000.0,1.988017223163294,380.20940863666925,0.0596946341560312,0.42272727272727273,0.07142857142857142,210,7,346.13055291248713,POINT (525904.2145330027 6081070.998236464),525904.2145330027,6081070.998236464,9.99608235325499,0.0,259.6696747297059,0.0 -2022-09-26 02:03:42,54.87601484488055,15.403556409268553,431.81818181818187,-10.0,5.883675788755307,10.0,1000.0,1.9910794570665706,380.22210559717,0.06531665658267224,0.4318181818181819,0.07142857142857142,215,7,346.9337200122667,POINT (525894.3804806349 6081069.20573118),525894.3804806349,6081069.20573118,9.996082291039926,0.0,259.6698002633757,0.0 -2022-09-26 02:03:43,54.87599924594827,15.403402991715405,440.90909090909093,-10.0,5.976834605594784,10.0,1000.0,1.9941288296369966,380.23117959355864,0.07061515165660202,0.4409090909090909,0.07142857142857142,220,7,347.9547501535057,POINT (525884.5464244006 6081067.413247457),525884.5464244006,6081067.413247457,9.996082228266884,0.0,259.66992582354465,0.0 -2022-09-26 02:03:44,54.87598364701595,15.403249574221501,450.00000000000006,-10.0,6.050967846291904,10.0,1000.0,1.9964781972251766,380.2353017714926,0.07450857227016106,0.45000000000000007,0.07142857142857142,224,7,348.8002657323404,POINT (525874.7123643004 6081065.620785291),525874.7123643004,6081065.620785291,9.996082166033272,0.0,259.6700513570979,0.0 -2022-09-26 02:03:45,54.875968048083585,15.403096156786843,459.0909090909091,-10.0,6.124306683848626,10.0,1000.0,1.9991839045604958,380.2360867082957,0.07880575308730305,0.4590909090909091,0.07142857142857142,229,7,349.7318949702261,POINT (525864.8783003336 6081063.828344687),525864.8783003336,6081063.828344687,9.996082103637761,0.0,259.67017691213806,0.0 -2022-09-26 02:03:46,54.875952449151185,15.402942739411431,468.18181818181824,-10.0,6.154899288538875,10.0,1000.0,2.001068680622483,380.23307829236046,0.0816923878783804,0.46818181818181825,0.07142857142857142,233,7,350.2734475122514,POINT (525855.0442325011 6081062.035925643),525855.0442325011,6081062.035925643,9.996082040770077,0.0,259.67030246121016,0.0 -2022-09-26 02:03:47,54.87593685021875,15.402789322095263,477.2727272727273,-10.0,6.1458346709872265,10.0,1000.0,2.002946408986953,380.2248626538272,0.08449985170136566,0.4772727272727273,0.07142857142857142,238,7,350.5999289551674,POINT (525845.2101608021 6081060.243528158),525845.2101608021,6081060.243528158,9.996081978523032,0.0,259.67042801088206,0.0 -2022-09-26 02:03:48,54.87592125128628,15.402635904838341,486.3636363636364,-10.0,6.097465868808677,10.0,1000.0,2.003977257428759,380.21500034370604,0.08603911581733655,0.4863636363636364,0.07142857142857142,242,7,350.5574397214357,POINT (525835.3760852371 6081058.451152235),525835.3760852371,6081058.451152235,9.996081915813404,0.0,259.67055356544824,0.0 -2022-09-26 02:03:49,54.875905652353765,15.402482487640665,495.4545454545455,-10.0,5.992405254246933,10.0,1000.0,2.0045765542481124,380.1991759744984,0.08701985174287614,0.4954545454545455,0.07142857142857142,247,7,350.1790046456021,POINT (525825.542005806 6081056.65879787),525825.542005806,6081056.65879787,9.996081853767283,0.0,259.6706791043807,0.0 -2022-09-26 02:03:50,54.8758900534212,15.402329070502232,504.54545454545456,-10.0,5.888509800827984,10.0,1000.0,2.0044512847655764,380.18431884352145,0.08702988759029472,0.5045454545454545,0.07142857142857142,251,7,349.73293070181774,POINT (525815.7079225088 6081054.866465064),525815.7079225088,6081054.866465064,9.99608179165462,0.0,259.670804643195,0.0 -2022-09-26 02:03:51,54.87587445448859,15.402175653423043,513.6363636363637,-10.0,5.747926066465734,10.0,1000.0,2.003502783568526,380.16392365880773,0.08608320482623148,0.5136363636363638,0.07142857142857142,256,7,349.0251179009574,POINT (525805.8738353457 6081053.074153815),525805.8738353457,6081053.074153815,9.996081729475417,0.0,259.6709301818913,0.0 -2022-09-26 02:03:52,54.875858855555954,15.402022236403102,522.7272727272727,-10.0,5.61663521382069,10.0,1000.0,2.0021133706442367,380.14686189322896,0.08459186396051029,0.5227272727272727,0.07142857142857142,260,7,348.15279333375923,POINT (525796.0397443165 6081051.28186413),525796.0397443165,6081051.28186413,9.996081666738334,0.0,259.67105574708677,0.0 -2022-09-26 02:03:53,54.87584325662328,15.4018688194424,531.8181818181819,-10.0,5.424481909469818,10.0,1000.0,1.9996331676354513,380.1255203935256,0.08188901929475915,0.5318181818181819,0.07142857142857142,265,7,346.57936247909487,POINT (525786.2056494211 6081049.489596003),525786.2056494211,6081049.489596003,9.996081604884177,0.0,259.67118128602544,0.0 -2022-09-26 02:03:54,54.87582765769056,15.401715402540946,540.909090909091,-10.0,5.252224603950234,10.0,1000.0,1.9971160081792092,380.10903780318387,0.07913642472734841,0.540909090909091,0.07142857142857142,269,7,344.9690788357867,POINT (525776.3715506598 6081047.697349434),525776.3715506598,6081047.697349434,9.996081542848952,0.0,259.67130682472634,0.0 -2022-09-26 02:03:55,54.87581205875779,15.401561985698736,550.0,-10.0,5.025148743366488,10.0,1000.0,1.9934186665594722,380.08982714052655,0.07508968047426726,0.55,0.07142857142857142,274,7,342.6639891971543,POINT (525766.5374480325 6081045.905124426),525766.5374480325,6081045.905124426,9.996081480360777,0.0,259.6714323791839,0.0 -2022-09-26 02:03:56,54.87579645982498,15.401408568915771,559.0909090909091,-10.0,4.844933248401457,10.0,1000.0,1.9901234895858926,380.0759236429807,0.07147731004845193,0.5590909090909091,0.07142857142857142,278,7,340.73987905454743,POINT (525756.7033415395 6081044.112920976),525756.7033415395,6081044.112920976,9.996081418307005,0.0,259.6715579177683,0.0 -2022-09-26 02:03:57,54.87578086089213,15.401255152192052,568.1818181818182,-10.0,4.6366344446609755,10.0,1000.0,1.9857355121395586,380.0606610564973,0.0666483484864882,0.5681818181818182,0.07142857142857142,283,7,338.4640797784897,POINT (525746.8692311805 6081042.320739087),525746.8692311805,6081042.320739087,9.9960813560818,0.0,259.67168346697736,0.0 -2022-09-26 02:03:58,54.87576526195925,15.401101735527575,577.2727272727274,-10.0,4.462180107965677,10.0,1000.0,1.9812210789854416,380.0478650126074,0.06164202136107683,0.5772727272727274,0.07142857142857142,288,7,336.57504095465856,POINT (525737.0351169556 6081040.528578757),525737.0351169556,6081040.528578757,9.996081293904593,0.0,259.67180901618786,0.0 -2022-09-26 02:03:59,54.875749663026326,15.400948318922342,586.3636363636364,-10.0,4.355177740850345,10.0,1000.0,1.9776362989495393,380.0393704840796,0.057624886659767435,0.5863636363636364,0.07142857142857142,292,7,335.48717144763384,POINT (525727.200998865 6081038.736439986),525727.200998865,6081038.736439986,9.996081231994797,0.0,259.67193455477695,0.0 -2022-09-26 02:04:00,54.875734064093365,15.400794902376354,595.4545454545455,-10.0,4.26770022635954,10.0,1000.0,1.9733184792029415,380.03077257723703,0.05271588187762213,0.5954545454545455,0.07142857142857142,297,7,334.77412227841626,POINT (525717.3668769085 6081036.944322774),525717.3668769085,6081036.944322774,9.996081169966018,0.0,259.67206009861934,0.0 -2022-09-26 02:04:01,54.875718465160354,15.400641485889611,604.5454545454546,-10.0,4.235076673454372,10.0,1000.0,1.9700739489027497,380.02533986619153,0.04895751063261741,0.6045454545454546,0.07142857142857142,301,7,334.75054830096667,POINT (525707.5327510863 6081035.152227122),525707.5327510863,6081035.152227122,9.996081107703738,0.0,259.6721856475953,0.0 -2022-09-26 02:04:02,54.87570286622731,15.400488069462114,613.6363636363637,-10.0,4.236129940398365,10.0,1000.0,1.9663602787991101,380.0200891663056,0.04455233227947679,0.6136363636363638,0.07142857142857142,306,7,335.35362185821475,POINT (525697.6986213983 6081033.36015303),525697.6986213983,6081033.36015303,9.996081045770948,0.0,259.67231119144077,0.0 -2022-09-26 02:04:03,54.87568726729422,15.400334653093859,622.7272727272727,-10.0,4.263065797000644,10.0,1000.0,1.9637015982774877,380.0169155863309,0.0413041047278453,0.6227272727272728,0.07142857142857142,310,7,336.2312728473604,POINT (525687.8644878445 6081031.568100497),525687.8644878445,6081031.568100497,9.996080983719187,0.0,259.67243674053947,0.0 -2022-09-26 02:04:04,54.87567166836109,15.400181236784851,631.8181818181819,-10.0,4.31668554273794,10.0,1000.0,1.9607941131860447,380.01396861407886,0.037619827262022905,0.6318181818181818,0.07142857142857142,315,7,337.5864915155323,POINT (525678.0303504255 6081029.776069522),525678.0303504255,6081029.776069522,9.99608092164366,0.0,259.67256227328653,0.0 -2022-09-26 02:04:05,54.87565606942792,15.400027820535085,640.909090909091,-10.0,4.383318994835888,10.0,1000.0,1.9588023498646963,380.01225061329995,0.03497930810350324,0.640909090909091,0.07142857142857142,319,7,338.82533465564666,POINT (525668.1962091404 6081027.984060108),525668.1962091404,6081027.984060108,9.996080859864517,0.0,259.67268782799897,0.0 -2022-09-26 02:04:06,54.87564047049471,15.399874404344564,650.0,-10.0,4.515433434455221,10.0,1000.0,1.9567133918536423,380.0106990264476,0.032050973046983025,0.65,0.07142857142857142,324,7,340.61169163177857,POINT (525658.3620639896 6081026.192072253),525658.3620639896,6081026.192072253,9.99608079789464,0.0,259.67281337161137,0.0 -2022-09-26 02:04:07,54.87562487156146,15.399720988213286,659.0909090909091,-10.0,4.6594662047355815,10.0,1000.0,1.9553395317451774,380.0098101576523,0.029986200747960958,0.6590909090909092,0.07142857142857142,328,7,342.17166149256957,POINT (525648.5279149736 6081024.400105957),525648.5279149736,6081024.400105957,9.996080735743698,0.0,259.67293891498616,0.0 -2022-09-26 02:04:08,54.875609272628175,15.399567572141251,668.1818181818182,-10.0,4.872411917463458,10.0,1000.0,1.9539531956501954,380.0090069456007,0.02771468832673726,0.6681818181818182,0.07142857142857142,333,7,344.1295174020037,POINT (525638.6937620917 6081022.608161221),525638.6937620917,6081022.608161221,9.996080673931912,0.0,259.67306446409265,0.0 -2022-09-26 02:04:09,54.875593673694844,15.399414156128461,677.2727272727274,-10.0,5.05226014255647,10.0,1000.0,1.9530750984307519,380.00853525172954,0.02611182804618157,0.6772727272727274,0.07142857142857142,337,7,345.56761673615887,POINT (525628.8596053442 6081020.816238043),525628.8596053442,6081020.816238043,9.996080612439917,0.0,259.67318999720635,0.0 -2022-09-26 02:04:10,54.87557807476148,15.399260740174917,686.3636363636364,-10.0,5.264179585670257,10.0,1000.0,1.9522196589809289,380.00808385259717,0.024328780957162188,0.6863636363636364,0.07142857142857142,342,7,347.0395531590918,POINT (525619.0254447313 6081019.0243364265),525619.0254447313,6081019.0243364265,9.996080550046633,0.0,259.6733155564605,0.0 -2022-09-26 02:04:11,54.87556247582806,15.399107324280614,695.4545454545455,-10.0,5.436915866867369,10.0,1000.0,1.9515838881416723,380.00772688479503,0.022739002435850572,0.6954545454545455,0.07142857142857142,347,7,348.01803303666276,POINT (525609.1912802529 6081017.232456368),525609.1912802529,6081017.232456368,9.99608048848367,0.0,259.673441094829,0.0 -2022-09-26 02:04:12,54.87554687689462,15.398953908445554,704.5454545454546,-10.0,5.533346378737631,10.0,1000.0,1.9512010271459308,380.00747964960397,0.021571883848417763,0.7045454545454546,0.07142857142857142,351,7,348.40025321979385,POINT (525599.3571119088 6081015.440597868),525599.3571119088,6081015.440597868,9.996080427135642,0.0,259.67356662794737,0.0 -2022-09-26 02:04:13,54.87553127796112,15.398800492669737,713.6363636363637,-10.0,5.59258951586683,10.0,1000.0,1.9508445482075698,380.0071941746932,0.020206566981020017,0.7136363636363637,0.07142857142857142,356,7,348.3913892253187,POINT (525589.5229396995 6081013.648760929),525589.5229396995,6081013.648760929,9.996080364771823,0.0,259.67369218708654,0.0 -2022-09-26 02:04:14,54.875515679027586,15.398647076953164,722.7272727272727,-10.0,5.590325188322979,10.0,1000.0,1.9506351098610122,380.0069730123199,0.01916639739156403,0.7227272727272728,0.07142857142857142,360,7,348.0504078211773,POINT (525579.6887636245 6081011.856945546),525579.6887636245,6081011.856945546,9.996080303686714,0.0,259.6738177149563,0.0 -2022-09-26 02:04:15,54.87550008009402,15.398493661295834,731.8181818181819,-10.0,5.532463190975816,10.0,1000.0,1.9504439339267399,380.0066960260838,0.01790771916236066,0.7318181818181819,0.07142857142857142,365,7,347.3231509397132,POINT (525569.8545836844 6081010.065151726),525569.8545836844,6081010.065151726,9.996080241304362,0.0,259.67394327397903,0.0 -2022-09-26 02:04:16,54.875484481160406,15.398340245697748,740.909090909091,-10.0,5.452147453261595,10.0,1000.0,1.950333348873107,380.0064700826452,0.016921689493245958,0.740909090909091,0.07142857142857142,369,7,346.59661402574784,POINT (525560.0203998787 6081008.273379464),525560.0203998787,6081008.273379464,9.996080179866823,0.0,259.67406881223565,0.0 -2022-09-26 02:04:17,54.875468882226755,15.398186830158908,750.0000000000001,-10.0,5.326400981002768,10.0,1000.0,1.950233378885227,380.00617979049025,0.01570516725629477,0.7500000000000001,0.07142857142857142,374,7,345.60769600311016,POINT (525550.1862122079 6081006.481628761),525550.1862122079,6081006.481628761,9.996080118081276,0.0,259.67419435550636,0.0 -2022-09-26 02:04:18,54.87545328329307,15.398033414679308,759.0909090909091,-10.0,5.219278270534846,10.0,1000.0,1.950175806104556,380.0059408940335,0.01474142541647257,0.7590909090909091,0.07142857142857142,378,7,344.7814980147534,POINT (525540.3520206716 6081004.689899617),525540.3520206716,6081004.689899617,9.996080056572783,0.0,259.6743198990178,0.0 -2022-09-26 02:04:19,54.87543768435933,15.39787999925895,768.1818181818182,-10.0,5.103973273943935,10.0,1000.0,1.9501236952646415,380.0056346696512,0.013548704418878206,0.7681818181818183,0.07142857142857142,383,7,343.8406070360941,POINT (525530.51782527 6081002.898192033),525530.51782527,6081002.898192033,9.996079994830819,0.0,259.6744454476629,0.0 -2022-09-26 02:04:20,54.875422085425555,15.397726583897839,777.2727272727274,-10.0,5.0449042635982915,10.0,1000.0,1.9500935120042548,380.0053847173823,0.012606805956382104,0.7772727272727273,0.07142857142857142,387,7,343.2950833728871,POINT (525520.6836260032 6081001.106506007),525520.6836260032,6081001.106506007,9.99607993340858,0.0,259.6745709803152,0.0 -2022-09-26 02:04:21,54.87540648649174,15.397573168595969,786.3636363636364,-10.0,5.026920702182281,10.0,1000.0,1.9500659512119245,380.0050679987471,0.011450879000085061,0.7863636363636364,0.07142857142857142,392,7,342.9925895586705,POINT (525510.8494228713 6080999.31484154),525510.8494228713,6080999.31484154,9.996079871815002,0.0,259.67469652359205,0.0 -2022-09-26 02:04:22,54.87539088755788,15.397419753353342,795.4545454545455,-10.0,5.060608271866972,10.0,1000.0,1.9500498254240515,380.0048128108056,0.010548918893081752,0.7954545454545455,0.07142857142857142,396,7,343.09636773099794,POINT (525501.0152158738 6080997.523198632),525501.0152158738,6080997.523198632,9.996079810498475,0.0,259.6748220671097,0.0 -2022-09-26 02:04:23,54.875375288624,15.397266338169958,804.5454545454546,-10.0,5.158497467340817,10.0,1000.0,1.9500349696023882,380.0044938016689,0.009458098926747434,0.8045454545454546,0.07142857142857142,401,7,343.6525829807454,POINT (525491.1810050113 6080995.731577285),525491.1810050113,6080995.731577285,9.996079748552503,0.0,259.67494762077354,0.0 -2022-09-26 02:04:24,54.87535968969007,15.397112923045817,813.6363636363637,-10.0,5.304791333934594,10.0,1000.0,1.9500243828690749,380.004177222242,0.008416859814845508,0.8136363636363637,0.07142857142857142,406,7,344.609918828828,POINT (525481.3467902837 6080993.939977498),525481.3467902837,6080993.939977498,9.996079686821455,0.0,259.6750731691872,0.0 -2022-09-26 02:04:25,54.87534409075611,15.396959507980922,822.7272727272727,-10.0,5.442380094470363,10.0,1000.0,1.9500181538577095,380.0039273952049,0.007625381750932073,0.8227272727272728,0.07142857142857142,410,7,345.57513096453204,POINT (525471.5125716911 6080992.148399268),525471.5125716911,6080992.148399268,9.99607962552463,0.0,259.6751987017276,0.0 -2022-09-26 02:04:26,54.87532849182209,15.396806092975268,831.8181818181819,-10.0,5.618622637475831,10.0,1000.0,1.9500124279312454,380.00362135619395,0.0066940026711432,0.8318181818181819,0.07142857142857142,415,7,346.8863091608433,POINT (525461.6783492335 6080990.356842598),525461.6783492335,6080990.356842598,9.996079563941953,0.0,259.67532424477304,0.0 -2022-09-26 02:04:27,54.87531289288805,15.396652678028858,840.909090909091,-10.0,5.746614757797971,10.0,1000.0,1.9500090913379755,380.00338283165684,0.005998759402332751,0.8409090909090909,0.07142857142857142,419,7,347.90331168120895,POINT (525451.8441229106 6080988.565307487),525451.8441229106,6080988.565307487,9.996079502636329,0.0,259.67544978805915,0.0 -2022-09-26 02:04:28,54.87529729395396,15.396499263141687,850.0000000000001,-10.0,5.870789048056968,10.0,1000.0,1.9500060689812124,380.00309411843307,0.0051952161889349605,0.8500000000000001,0.07142857142857142,424,7,348.99230530148566,POINT (525442.0098927225 6080986.773793937),525442.0098927225,6080986.773793937,9.996079441159402,0.0,259.67557534196993,0.0 -2022-09-26 02:04:29,54.87528169501982,15.39634584831376,859.0909090909091,-10.0,5.931382085934742,10.0,1000.0,1.9500043417643274,380.00287169891,0.004606030745001525,0.8590909090909091,0.07142857142857142,428,7,349.6426522083566,POINT (525432.1756586696 6080984.982301941),525432.1756586696,6080984.982301941,9.9960793803262,0.0,259.6757008585221,0.0 -2022-09-26 02:04:30,54.875266096085646,15.396192433545078,868.1818181818182,-10.0,5.955132063506054,10.0,1000.0,1.950002812654852,380.0026054839251,0.003936839802004526,0.8681818181818183,0.07142857142857142,433,7,350.1537034206925,POINT (525422.3414207518 6080983.190831508),525422.3414207518,6080983.190831508,9.99607931832023,0.0,259.67582641720935,0.0 -2022-09-26 02:04:31,54.875250497151434,15.396039018835635,877.2727272727274,-10.0,5.940535670792214,10.0,1000.0,1.9500019616733213,380.00240262793983,0.0034545197841005784,0.8772727272727273,0.07142857142857142,437,7,350.3850703496687,POINT (525412.5071789687 6080981.399382633),525412.5071789687,6080981.399382633,9.996079257206574,0.0,259.6759519605016,0.0 -2022-09-26 02:04:32,54.87523489821719,15.395885604185438,886.3636363636365,-10.0,5.907816436929294,10.0,1000.0,1.9500012293524385,380.00216238768223,0.002915710693409448,0.8863636363636365,0.07142857142857142,442,7,350.6519536694173,POINT (525402.6729333211 6080979.607955318),525402.6729333211,6080979.607955318,9.99607919556826,0.0,259.6760775031976,0.0 -2022-09-26 02:04:33,54.8752192992829,15.39573218959448,895.4545454545455,-10.0,5.891419963418882,10.0,1000.0,1.950000834230739,380.001981214763,0.002533615193488339,0.8954545454545455,0.07142857142857142,446,7,350.93842619614605,POINT (525392.8386838082 6080977.816549562),525392.8386838082,6080977.816549562,9.99607913455059,0.0,259.67620304649296,0.0 -2022-09-26 02:04:34,54.875203700348564,15.395578775062766,904.5454545454546,-10.0,5.900245081713992,10.0,1000.0,1.9500005047723534,380.0017688075701,0.002113352867388719,0.9045454545454547,0.07142857142857142,451,7,351.4170486033439,POINT (525383.0044304305 6080976.025165363),525383.0044304305,6080976.025165363,9.996079073571122,0.0,259.6763285789276,0.0 -2022-09-26 02:04:35,54.875188101414196,15.395425360590295,913.6363636363637,-10.0,5.93549339849646,10.0,1000.0,1.9500003328801292,380.00161020720486,0.0018198058229014524,0.9136363636363637,0.07142857142857142,455,7,351.8828682669021,POINT (525373.1701731881 6080974.233802725),525373.1701731881,6080974.233802725,9.99607901190988,0.0,259.6764541268799,0.0 -2022-09-26 02:04:36,54.875172502479785,15.395271946177065,922.7272727272727,-10.0,6.01198902259246,10.0,1000.0,1.950000194252646,380.0014260558338,0.001501553713769997,0.9227272727272727,0.07142857142857142,460,7,352.51933556330704,POINT (525363.3359120806 6080972.442461645),525363.3359120806,6080972.442461645,9.996078950921653,0.0,259.67657967006033,0.0 -2022-09-26 02:04:37,54.87515690354533,15.395118531823078,931.8181818181819,-10.0,6.091518851991175,10.0,1000.0,1.950000124409242,380.0012898627911,0.0012823414944014404,0.9318181818181819,0.07142857142857142,464,7,353.0225056740172,POINT (525353.5016471087 6080970.651142125),525353.5016471087,6080970.651142125,9.996078889294234,0.0,259.6767052125248,0.0 -2022-09-26 02:04:38,54.87514130461083,15.394965117528333,940.909090909091,-10.0,6.198187272011959,10.0,1000.0,1.9500000699753033,380.0011332006236,0.0010477868798455159,0.940909090909091,0.07142857142857142,469,7,353.5726035061348,POINT (525343.6673782716 6080968.859844163),525343.6673782716,6080968.859844163,9.996078828683414,0.0,259.6768307505761,0.0 -2022-09-26 02:04:39,54.87512570567629,15.394811703292833,950.0,-10.0,6.291860710823726,10.0,1000.0,1.9500000385571032,380.00099113132205,0.000851926113070736,0.95,0.07142857142857142,474,7,353.9628579454128,POINT (525333.8331055702 6080967.0685677575),525333.8331055702,6080967.0685677575,9.996078767538119,0.0,259.67695627716876,0.0 -2022-09-26 02:04:40,54.87512570567629,15.394811703292833,950.0,1.0,6.628072777490187,10.0,1000.0,1.9500015969612032,380.00271571390374,0.0027162222913606217,0.95,0.15,474,14,347.16396109840844,POINT (525333.8331055702 6080967.0685677575),525333.8331055702,6080967.0685677575,0.0,11.0,0.0,90.0 -2022-09-26 02:04:41,54.87514130461083,15.394965117528333,940.909090909091,1.0,6.59102135501163,10.0,1000.0,1.9500028960160807,380.0031425760389,0.003353428974505433,0.940909090909091,0.15,469,14,345.56706649834587,POINT (525343.6673782716 6080968.859844163),525343.6673782716,6080968.859844163,9.996078767538119,0.0,79.67695627716877,0.0 -2022-09-26 02:04:42,54.87515690354533,15.395118531823078,931.8181818181819,1.0,6.573952964469596,10.0,1000.0,1.9500051410108907,380.0036211253011,0.004118833278952187,0.9318181818181819,0.15,464,14,344.207597669699,POINT (525353.5016471087 6080970.651142125),525353.5016471087,6080970.651142125,9.996078828683414,0.0,79.67683075057609,0.0 -2022-09-26 02:04:43,54.875172502479785,15.395271946177065,922.7272727272727,1.0,6.58049341701728,10.0,1000.0,1.9500080126173036,380.0040434593665,0.0048359335419002735,0.9227272727272727,0.15,460,14,343.3817151571713,POINT (525363.3359120806 6080972.442461645),525363.3359120806,6080972.442461645,9.996078889294234,0.0,79.6767052125248,0.0 -2022-09-26 02:04:44,54.875188101414196,15.395425360590295,913.6363636363637,1.0,6.614523382923712,10.0,1000.0,1.9500136880045522,380.00462335583836,0.005879355265470492,0.9136363636363637,0.15,455,14,342.7220699576855,POINT (525373.1701731881 6080974.233802725),525373.1701731881,6080974.233802725,9.996078950921653,0.0,79.67657967006032,0.0 -2022-09-26 02:04:45,54.875203700348564,15.395578775062766,904.5454545454546,1.0,6.658679701825455,10.0,1000.0,1.9500206881610154,380.0051305674792,0.006843701268908405,0.9045454545454547,0.15,451,14,342.4778935108719,POINT (525383.0044304305 6080976.025165363),525383.0044304305,6080976.025165363,9.99607901190988,0.0,79.67645412687992,0.0 -2022-09-26 02:04:46,54.8752192992829,15.39573218959448,895.4545454545455,1.0,6.726324604478223,10.0,1000.0,1.9500340109157266,380.0058206112484,0.008226783954043922,0.8954545454545455,0.15,446,14,342.45408707754825,POINT (525392.8386838082 6080977.816549562),525392.8386838082,6080977.816549562,9.996079073571122,0.0,79.67632857892761,0.0 -2022-09-26 02:04:47,54.87523489821719,15.395885604185438,886.3636363636365,1.0,6.783549702369284,10.0,1000.0,1.9500498517325002,380.0064185338874,0.009486203358823228,0.8863636363636365,0.15,442,14,342.58256691504755,POINT (525402.6729333211 6080979.607955318),525402.6729333211,6080979.607955318,9.99607913455059,0.0,79.67620304649294,0.0 -2022-09-26 02:04:48,54.875250497151434,15.396039018835635,877.2727272727274,1.0,6.853835565475228,10.0,1000.0,1.9500788781667437,380.00722415895837,0.011264511952224106,0.8772727272727273,0.15,437,14,342.826813006379,POINT (525412.5071789687 6080981.399382633),525412.5071789687,6080981.399382633,9.99607919556826,0.0,79.67607750319758,0.0 -2022-09-26 02:04:49,54.875266096085646,15.396192433545078,868.1818181818182,1.0,6.90524972790298,10.0,1000.0,1.9501121387766023,380.0079153881077,0.012858107945288421,0.8681818181818183,0.15,433,14,342.99906280905213,POINT (525422.3414207518 6080983.190831508),525422.3414207518,6080983.190831508,9.996079257206574,0.0,79.67595196050164,0.0 -2022-09-26 02:04:50,54.87528169501982,15.39634584831376,859.0909090909091,1.0,6.940557574498225,10.0,1000.0,1.9501708087100198,380.00883729375244,0.01507097009698336,0.8590909090909091,0.15,428,14,342.94515195637274,POINT (525432.1756586696 6080984.982301941),525432.1756586696,6080984.982301941,9.99607931832023,0.0,79.67582641720934,0.0 -2022-09-26 02:04:51,54.87529729395396,15.396499263141687,850.0000000000001,1.0,6.935025012252055,10.0,1000.0,1.950235586466175,380.00962009895864,0.017020366168040497,0.8500000000000001,0.15,424,14,342.5790450240669,POINT (525442.0098927225 6080986.773793937),525442.0098927225,6080986.773793937,9.9960793803262,0.0,79.67570085852209,0.0 -2022-09-26 02:04:52,54.87531289288805,15.396652678028858,840.909090909091,1.0,6.884677525379052,10.0,1000.0,1.9503455848465,380.0106529486438,0.019679619674315047,0.8409090909090909,0.15,419,14,341.69791549880597,POINT (525451.8441229106 6080988.565307487),525451.8441229106,6080988.565307487,9.996079441159402,0.0,79.67557534196995,0.0 -2022-09-26 02:04:53,54.87532849182209,15.396806092975268,831.8181818181819,1.0,6.816298518810488,10.0,1000.0,1.9504626126269644,380.0115203297308,0.02198016816364911,0.8318181818181819,0.15,415,14,340.712669725512,POINT (525461.6783492335 6080990.356842598),525461.6783492335,6080990.356842598,9.996079502636329,0.0,79.67544978805917,0.0 -2022-09-26 02:04:54,54.87534409075611,15.396959507980922,822.7272727272727,1.0,6.711787617657318,10.0,1000.0,1.950653986854366,380.0126517869683,0.025060180566755505,0.8227272727272728,0.15,410,14,339.27994270489046,POINT (525471.5125716911 6080992.148399268),525471.5125716911,6080992.148399268,9.996079563941953,0.0,79.67532424477302,0.0 -2022-09-26 02:04:55,54.87535968969007,15.397112923045817,813.6363636363637,1.0,6.628104938032319,10.0,1000.0,1.950850284965694,380.01359097879146,0.02767442062888997,0.8136363636363637,0.15,406,14,338.1164088108616,POINT (525481.3467902837 6080993.939977498),525481.3467902837,6080993.939977498,9.99607962552463,0.0,79.6751987017276,0.0 -2022-09-26 02:04:56,54.875375288624,15.397266338169958,804.5454545454546,1.0,6.545206870190922,10.0,1000.0,1.9511597642305272,380.01480165387034,0.031106643129195716,0.8045454545454546,0.15,401,14,336.84981209978446,POINT (525491.1810050113 6080995.731577285),525491.1810050113,6080995.731577285,9.996079686821455,0.0,79.6750731691872,0.0 -2022-09-26 02:04:57,54.87539088755788,15.397419753353342,795.4545454545455,1.0,6.50891185311885,10.0,1000.0,1.9515519483016188,380.0160459994742,0.03468969501783537,0.7954545454545455,0.15,396,14,336.0111823343856,POINT (525501.0152158738 6080997.523198632),525501.0152158738,6080997.523198632,9.996079748552503,0.0,79.67494762077354,0.0 -2022-09-26 02:04:58,54.87540648649174,15.397573168595969,786.3636363636364,1.0,6.526179164522296,10.0,1000.0,1.9519334695344515,380.017060638192,0.037638504553922904,0.7863636363636364,0.15,392,14,335.77467231919604,POINT (525510.8494228713 6080999.31484154),525510.8494228713,6080999.31484154,9.996079810498475,0.0,79.67482206710969,0.0 -2022-09-26 02:04:59,54.875422085425555,15.397726583897839,777.2727272727274,1.0,6.614104241432002,10.0,1000.0,1.9525052470349407,380.0183476272008,0.04139178150846702,0.7772727272727273,0.15,387,14,336.1089567802992,POINT (525520.6836260032 6081001.106506007),525520.6836260032,6081001.106506007,9.996079871815002,0.0,79.67469652359208,0.0 -2022-09-26 02:05:00,54.87543768435933,15.39787999925895,768.1818181818182,1.0,6.7365110607817815,10.0,1000.0,1.9530462136090918,380.01939034172824,0.044420965627439545,0.7681818181818183,0.15,383,14,336.8741821463583,POINT (525530.51782527 6081002.898192033),525530.51782527,6081002.898192033,9.99607993340858,0.0,79.6745709803152,0.0 -2022-09-26 02:05:01,54.87545328329307,15.398033414679308,759.0909090909091,1.0,6.940745792752993,10.0,1000.0,1.9538380319988693,380.0207136062791,0.048205139033134926,0.7590909090909091,0.15,378,14,338.32177158381603,POINT (525540.3520206716 6081004.689899617),525540.3520206716,6081004.689899617,9.996079994830819,0.0,79.67444544766292,0.0 -2022-09-26 02:05:02,54.875468882226755,15.398186830158908,750.0000000000001,1.0,7.1237276785954995,10.0,1000.0,1.9545739428577005,380.02179887531497,0.05120687479666154,0.7500000000000001,0.15,374,14,339.6648767181067,POINT (525550.1862122079 6081006.481628761),525550.1862122079,6081006.481628761,9.996080056572783,0.0,79.6743198990178,0.0 -2022-09-26 02:05:03,54.875484481160406,15.398340245697748,740.909090909091,1.0,7.346947358530964,10.0,1000.0,1.9556397412645636,380.02322317882636,0.05490124649016083,0.740909090909091,0.15,369,14,341.3012664474926,POINT (525560.0203998787 6081008.273379464),525560.0203998787,6081008.273379464,9.996080118081276,0.0,79.67419435550636,0.0 -2022-09-26 02:05:04,54.87550008009402,15.398493661295834,731.8181818181819,1.0,7.5104584086120365,10.0,1000.0,1.9566277690409402,380.0244674211067,0.05779786657337762,0.7318181818181819,0.15,365,14,342.51166141635383,POINT (525569.8545836844 6081010.065151726),525569.8545836844,6081010.065151726,9.996080179866823,0.0,79.67406881223566,0.0 -2022-09-26 02:05:05,54.875515679027586,15.398647076953164,722.7272727272727,1.0,7.679582158683607,10.0,1000.0,1.9580681520106775,380.02627865302054,0.06133939577053711,0.7227272727272728,0.15,360,14,343.78623772877427,POINT (525579.6887636245 6081011.856945546),525579.6887636245,6081011.856945546,9.996080241304362,0.0,79.67394327397903,0.0 -2022-09-26 02:05:06,54.87553127796112,15.398800492669737,713.6363636363637,1.0,7.774749104292657,10.0,1000.0,1.9594227025847721,380.02809258583306,0.06411507041430345,0.7136363636363637,0.15,356,14,344.5216866042999,POINT (525589.5229396995 6081013.648760929),525589.5229396995,6081013.648760929,9.996080303686714,0.0,79.6738177149563,0.0 -2022-09-26 02:05:07,54.87554687689462,15.398953908445554,704.5454545454546,1.0,7.8318717102264985,10.0,1000.0,1.961439022485807,380.03117569956066,0.06753582031804371,0.7045454545454546,0.15,351,14,344.986473822473,POINT (525599.3571119088 6081015.440597868),525599.3571119088,6081015.440597868,9.996080364771823,0.0,79.67369218708659,0.0 -2022-09-26 02:05:08,54.87556247582806,15.399107324280614,695.4545454545455,1.0,7.824551759948635,10.0,1000.0,1.963379696058008,380.03472314503676,0.07026245555463835,0.6954545454545455,0.15,347,14,344.958673668091,POINT (525609.1912802529 6081017.232456368),525609.1912802529,6081017.232456368,9.996080427135642,0.0,79.67356662794735,0.0 -2022-09-26 02:05:09,54.87557807476148,15.399260740174917,686.3636363636364,1.0,7.752531125566815,10.0,1000.0,1.966333087944998,380.04140905579425,0.07371347531142886,0.6863636363636364,0.15,342,14,344.4407587521475,POINT (525619.0254447313 6081019.0243364265),525619.0254447313,6081019.0243364265,9.99608048848367,0.0,79.67344109482902,0.0 -2022-09-26 02:05:10,54.875593673694844,15.399414156128461,677.2727272727274,1.0,7.623897603482833,10.0,1000.0,1.9700330346234376,380.0521447237884,0.0772904500200789,0.6772727272727274,0.15,337,14,343.4823625547505,POINT (525628.8596053442 6081020.816238043),525628.8596053442,6081020.816238043,9.996080550046633,0.0,79.67331555646051,0.0 -2022-09-26 02:05:11,54.875609272628175,15.399567572141251,668.1818181818182,1.0,7.495054247041993,10.0,1000.0,1.9736633903829182,380.06528163990384,0.08030876330220343,0.6681818181818182,0.15,333,14,342.5134020680774,POINT (525638.6937620917 6081022.608161221),525638.6937620917,6081022.608161221,9.996080612439917,0.0,79.67318999720634,0.0 -2022-09-26 02:05:12,54.87562487156146,15.399720988213286,659.0909090909091,1.0,7.324082794741684,10.0,1000.0,1.9792208114683845,380.09034023476335,0.08436829101837424,0.6590909090909092,0.15,328,14,341.23005008518953,POINT (525648.5279149736 6081024.400105957),525648.5279149736,6081024.400105957,9.996080673931912,0.0,79.67306446409265,0.0 -2022-09-26 02:05:13,54.87564047049471,15.399874404344564,650.0,1.0,7.19576054452777,10.0,1000.0,1.984619471265232,380.1203070549488,0.08791421993890497,0.65,0.15,324,14,340.2810554364765,POINT (525658.3620639896 6081026.192072253),525658.3620639896,6081026.192072253,9.996080735743698,0.0,79.67293891498615,0.0 -2022-09-26 02:05:14,54.87565606942792,15.400027820535085,640.909090909091,1.0,7.06195550182469,10.0,1000.0,1.9927306823464124,380.17554840125314,0.09280775153295415,0.640909090909091,0.15,319,14,339.33038286222813,POINT (525668.1962091404 6081027.984060108),525668.1962091404,6081027.984060108,9.99608079789464,0.0,79.67281337161138,0.0 -2022-09-26 02:05:15,54.87567166836109,15.400181236784851,631.8181818181819,1.0,6.978681313806957,10.0,1000.0,2.0004146440441124,380.23908607112355,0.09714812532809389,0.6318181818181818,0.15,315,14,338.7879978145428,POINT (525678.0303504255 6081029.776069522),525678.0303504255,6081029.776069522,9.996080859864517,0.0,79.67268782799894,0.0 -2022-09-26 02:05:16,54.87568726729422,15.400334653093859,622.7272727272727,1.0,6.887785709970533,10.0,1000.0,2.011601782276059,380.35116592458024,0.10316179291332331,0.6227272727272728,0.15,310,14,338.2633762698997,POINT (525687.8644878445 6081031.568100497),525687.8644878445,6081031.568100497,9.99608092164366,0.0,79.67256227328654,0.0 -2022-09-26 02:05:17,54.87570286622731,15.400488069462114,613.6363636363637,1.0,6.810779980669574,10.0,1000.0,2.0218285963101787,380.4743665601527,0.10846470299469771,0.6136363636363638,0.15,306,14,337.84451015617935,POINT (525697.6986213983 6081033.36015303),525697.6986213983,6081033.36015303,9.996080983719187,0.0,79.67243674053948,0.0 -2022-09-26 02:05:18,54.875718465160354,15.400641485889611,604.5454545454546,1.0,6.7044966645895725,10.0,1000.0,2.036131276907119,380.6814246446832,0.11570288732192736,0.6045454545454546,0.15,301,14,337.26709160992004,POINT (525707.5327510863 6081035.152227122),525707.5327510863,6081035.152227122,9.996081045770948,0.0,79.67231119144077,0.0 -2022-09-26 02:05:19,54.875734064093365,15.400794902376354,595.4545454545455,1.0,6.611327152257871,10.0,1000.0,2.0486524490248526,380.8981925739886,0.12194793880263376,0.5954545454545455,0.15,297,14,336.749868988157,POINT (525717.3668769085 6081036.944322774),525717.3668769085,6081036.944322774,9.996081107703738,0.0,79.6721856475953,0.0 -2022-09-26 02:05:20,54.875749663026326,15.400948318922342,586.3636363636364,1.0,6.48747157956838,10.0,1000.0,2.0653561581082083,381.2442836322758,0.13023577175417922,0.5863636363636364,0.15,292,14,336.0432584776731,POINT (525727.200998865 6081038.736439986),525727.200998865,6081038.736439986,9.996081169966018,0.0,79.67206009861934,0.0 -2022-09-26 02:05:21,54.87576526195925,15.401101735527575,577.2727272727274,1.0,6.386190809455789,10.0,1000.0,2.079258719964482,381.5883256177741,0.1371556852961098,0.5772727272727274,0.15,288,14,335.45046002352456,POINT (525737.0351169556 6081040.528578757),525737.0351169556,6081040.528578757,9.996081231994797,0.0,79.67193455477698,0.0 -2022-09-26 02:05:22,54.87578086089213,15.401255152192052,568.1818181818182,1.0,6.263286872480179,10.0,1000.0,2.0968082250722966,382.1085382731364,0.14599996745883187,0.5681818181818182,0.15,283,14,334.7146283337619,POINT (525746.8692311805 6081042.320739087),525746.8692311805,6081042.320739087,9.996081293904593,0.0,79.67180901618788,0.0 -2022-09-26 02:05:23,54.87579645982498,15.401408568915771,559.0909090909091,1.0,6.152375417137596,10.0,1000.0,2.113905562357561,382.7299288808495,0.1548353459277016,0.5590909090909091,0.15,278,14,334.03471335103626,POINT (525756.7033415395 6081044.112920976),525756.7033415395,6081044.112920976,9.9960813560818,0.0,79.67168346697733,0.0 -2022-09-26 02:05:24,54.87581205875779,15.401561985698736,550.0,1.0,6.077780779496875,10.0,1000.0,2.1267662499913427,383.29531012186214,0.16171596463481488,0.55,0.15,274,14,333.56639225011116,POINT (525766.5374480325 6081045.905124426),525766.5374480325,6081045.905124426,9.996081418307005,0.0,79.67155791776834,0.0 -2022-09-26 02:05:25,54.87582765769056,15.401715402540946,540.909090909091,1.0,6.007929769098305,10.0,1000.0,2.1412119641901395,384.0733717191651,0.1698413255394779,0.540909090909091,0.15,269,14,333.11233213257043,POINT (525776.3715506598 6081047.697349434),525776.3715506598,6081047.697349434,9.996081480360777,0.0,79.67143237918391,0.0 -2022-09-26 02:05:26,54.87584325662328,15.4018688194424,531.8181818181819,1.0,5.9735384979538,10.0,1000.0,2.1510495059510726,384.7362447613152,0.1757811354254409,0.5318181818181819,0.15,265,14,332.87207238274584,POINT (525786.2056494211 6081049.489596003),525786.2056494211,6081049.489596003,9.996081542848952,0.0,79.67130682472639,0.0 -2022-09-26 02:05:27,54.875858855555954,15.402022236403102,522.7272727272727,1.0,5.958236577910522,10.0,1000.0,2.160731829115765,385.58491520672817,0.18227291908444646,0.5227272727272727,0.15,260,14,332.7313793874193,POINT (525796.0397443165 6081051.28186413),525796.0397443165,6081051.28186413,9.996081604884177,0.0,79.67118128602543,0.0 -2022-09-26 02:05:28,54.87587445448859,15.402175653423043,513.6363636363637,1.0,5.965919111939815,10.0,1000.0,2.166134379366104,386.2523079007006,0.18656262869470008,0.5136363636363638,0.15,256,14,332.7336910319446,POINT (525805.8738353457 6081053.074153815),525805.8738353457,6081053.074153815,9.996081666738334,0.0,79.67105574708677,0.0 -2022-09-26 02:05:29,54.8758900534212,15.402329070502232,504.54545454545456,1.0,5.992632027289395,10.0,1000.0,2.1697719621161418,387.03066347674485,0.19061314039942148,0.5045454545454545,0.15,251,14,332.8347539905209,POINT (525815.7079225088 6081054.866465064),525815.7079225088,6081054.866465064,9.996081729475417,0.0,79.67093018189131,0.0 -2022-09-26 02:05:30,54.875905652353765,15.402482487640665,495.4545454545455,1.0,6.017097579771507,10.0,1000.0,2.1701723694237356,387.5769851827238,0.1926961911158135,0.4954545454545455,0.15,247,14,332.9496739020338,POINT (525825.542005806 6081056.65879787),525825.542005806,6081056.65879787,9.99608179165462,0.0,79.67080464319504,0.0 -2022-09-26 02:05:31,54.87592125128628,15.402635904838341,486.3636363636364,1.0,6.030632528455125,10.0,1000.0,2.167672833701517,388.12446537666665,0.1937488797178144,0.4863636363636364,0.15,242,14,333.2205200481752,POINT (525835.3760852371 6081058.451152235),525835.3760852371,6081058.451152235,9.996081853767283,0.0,79.6706791043807,0.0 -2022-09-26 02:05:32,54.87593685021875,15.402789322095263,477.2727272727273,1.0,6.022058765172846,10.0,1000.0,2.1634815585400915,388.4291357363217,0.19330452710162593,0.4772727272727273,0.15,238,14,333.629695888257,POINT (525845.2101608021 6081060.243528158),525845.2101608021,6081060.243528158,9.996081915813404,0.0,79.67055356544826,0.0 -2022-09-26 02:05:33,54.875952449151185,15.402942739411431,468.18181818181824,1.0,5.994576606561028,10.0,1000.0,2.1558976493698125,388.6194820559486,0.19112256990925708,0.46818181818181825,0.15,233,14,334.4406145151145,POINT (525855.0442325011 6081062.035925643),525855.0442325011,6081062.035925643,9.996081978523032,0.0,79.67042801088208,0.0 -2022-09-26 02:05:34,54.875968048083585,15.403096156786843,459.0909090909091,1.0,5.971007885065676,10.0,1000.0,2.1483060786747923,388.6106911411513,0.1880928658249383,0.4590909090909091,0.15,229,14,335.33432064111685,POINT (525864.8783003336 6081063.828344687),525864.8783003336,6081063.828344687,9.996082040770077,0.0,79.67030246121016,0.0 -2022-09-26 02:05:35,54.87598364701595,15.403249574221501,450.00000000000006,1.0,5.958041004908824,10.0,1000.0,2.1374211199075552,388.40008554224465,0.18276207416149123,0.45000000000000007,0.15,224,14,336.7252157512921,POINT (525874.7123643004 6081065.620785291),525874.7123643004,6081065.620785291,9.996082103637761,0.0,79.67017691213805,0.0 -2022-09-26 02:05:36,54.87599924594827,15.403402991715405,440.90909090909093,1.0,5.973235912066214,10.0,1000.0,2.127974343540929,388.0829661335646,0.17733432211209782,0.4409090909090909,0.15,220,14,338.01132491913063,POINT (525884.5464244006 6081067.413247457),525884.5464244006,6081067.413247457,9.996082166033272,0.0,79.67005135709796,0.0 -2022-09-26 02:05:37,54.87601484488055,15.403556409268553,431.81818181818187,1.0,6.035778636973719,10.0,1000.0,2.115713263927887,387.52717029494875,0.16922371051640542,0.4318181818181819,0.15,215,14,339.7563767003088,POINT (525894.3804806349 6081069.20573118),525894.3804806349,6081069.20573118,9.996082228266884,0.0,79.66992582354466,0.0 -2022-09-26 02:05:38,54.8760304438128,15.403709826880947,422.72727272727275,1.0,6.151411839845365,10.0,1000.0,2.10339666812384,386.8337370933896,0.1598140706700673,0.42272727272727273,0.15,210,14,341.5570952062151,POINT (525904.2145330027 6081070.998236464),525904.2145330027,6081070.998236464,9.996082291039926,0.0,79.66980026337572,0.0 -2022-09-26 02:05:39,54.876046042745,15.403863244552586,413.6363636363637,1.0,6.279483712330458,10.0,1000.0,2.0937598558349126,386.2123395274487,0.15149501007647986,0.4136363636363637,0.15,206,14,342.9696903489664,POINT (525914.0485815044 6081072.790763306),525914.0485815044,6081072.790763306,9.99608235325499,0.0,79.6696747297059,0.0 -2022-09-26 02:05:40,54.87606164167716,15.404016662283473,404.54545454545456,1.0,6.473536574829531,10.0,1000.0,2.0822110770595543,385.39408616082306,0.1403066666896132,0.40454545454545454,0.15,201,14,344.6273811539223,POINT (525923.8826261399 6081074.58331171),525923.8826261399,6081074.58331171,9.996082416186075,0.0,79.66954917503105,0.0 -2022-09-26 02:05:41,54.87607724060928,15.404170080073602,395.4545454545455,1.0,6.644652644125029,10.0,1000.0,2.0734739745656854,384.73554438536837,0.1308829311729505,0.3954545454545455,0.15,197,14,345.8278238750646,POINT (525933.7166669087 6081076.375881671),525933.7166669087,6081076.375881671,9.99608247809149,0.0,79.66942363551443,0.0 -2022-09-26 02:05:42,54.876092839541364,15.404323497922977,386.3636363636364,1.0,6.861900480442129,10.0,1000.0,2.0632438835703684,383.94153461166553,0.1187335757899512,0.38636363636363635,0.15,192,14,347.1465873279328,POINT (525943.5507038111 6081078.168473193),525943.5507038111,6081078.168473193,9.996082540889516,0.0,79.66929808060343,0.0 -2022-09-26 02:05:43,54.8761084384734,15.404476915831602,377.2727272727273,1.0,7.028551453879213,10.0,1000.0,2.055614433226947,383.3496551861885,0.10888465355899028,0.3772727272727273,0.15,188,14,348.06432196563844,POINT (525953.3847368477 6081079.961086275),525953.3847368477,6081079.961086275,9.996082603974154,0.0,79.66917253679559,0.0 -2022-09-26 02:05:44,54.8761240374054,15.404630333799467,368.1818181818182,1.0,7.223079712457625,10.0,1000.0,2.0467289525498877,382.6827831642871,0.09663103535132354,0.36818181818181817,0.15,183,14,349.0778204673748,POINT (525963.2187660174 6081081.753720916),525963.2187660174,6081081.753720916,9.996082665961504,0.0,79.66904699179268,0.0 -2022-09-26 02:05:45,54.876139636337356,15.404783751826582,359.0909090909091,1.0,7.365886227292228,10.0,1000.0,2.040090371131169,382.2156619658877,0.08702869947656304,0.3590909090909091,0.15,179,14,349.78330040749904,POINT (525973.0527913208 6081083.546377118),525973.0527913208,6081083.546377118,9.996082729132583,0.0,79.66892143712575,0.0 -2022-09-26 02:05:46,54.876155235269266,15.40493716991294,350.0,1.0,7.5186801194023785,10.0,1000.0,2.0322993796186335,381.71826661159906,0.07546626502583967,0.35,0.15,174,14,350.52618351100546,POINT (525982.8868127575 6081085.339054877),525982.8868127575,6081085.339054877,9.996082790996407,0.0,79.6687959027489,0.0 -2022-09-26 02:05:47,54.87617083420114,15.405090588058542,340.90909090909093,1.0,7.610649147235183,10.0,1000.0,2.0264140184972126,381.3877807781672,0.06669167307509229,0.34090909090909094,0.15,170,14,351.00878895188384,POINT (525992.7208303278 6081087.131754198),525992.7208303278,6081087.131754198,9.996082854315977,0.0,79.66867034271381,0.0 -2022-09-26 02:05:48,54.87618643313298,15.405244006263391,331.81818181818187,1.0,7.676165127443267,10.0,1000.0,2.019423876361477,381.052267936925,0.05645376023065196,0.33181818181818185,0.15,165,14,351.47727767816946,POINT (526002.5548440315 6081088.924475078),526002.5548440315,6081088.924475078,9.996082916557336,0.0,79.66854480320815,0.0 -2022-09-26 02:05:49,54.87620203206478,15.405397424527488,322.72727272727275,1.0,7.683902215769232,10.0,1000.0,2.014086710463719,380.8389270336978,0.048924437410097193,0.32272727272727275,0.15,161,14,351.7512066896267,POINT (526012.3888538688 6081090.717217519),526012.3888538688,6081090.717217519,9.996082979972908,0.0,79.66841924317623,0.0 -2022-09-26 02:05:50,54.876217630996535,15.405550842850829,313.6363636363637,1.0,7.637651349297342,10.0,1000.0,2.0077007227056027,380.6303867653524,0.04040782225039549,0.31363636363636366,0.15,156,14,351.9804209803525,POINT (526022.2228598393 6081092.509981518),526022.2228598393,6081092.509981518,9.996083042028697,0.0,79.66829370880565,0.0 -2022-09-26 02:05:51,54.87623322992825,15.405704261233415,304.54545454545456,1.0,7.537975390237097,10.0,1000.0,2.0016157018315615,380.47443757916545,0.032921999088771824,0.30454545454545456,0.15,151,14,352.10082666600425,POINT (526032.0568619432 6081094.302767078),526032.0568619432,6081094.302767078,9.996083105196686,0.0,79.66816814841789,0.0 -2022-09-26 02:05:52,54.87624882885993,15.405857679675249,295.4545454545455,1.0,7.431514084009169,10.0,1000.0,1.996964663652671,380.379493548473,0.02767604578025291,0.29545454545454547,0.15,147,14,352.1320249885729,POINT (526041.8908601807 6081096.095574198),526041.8908601807,6081096.095574198,9.996083168140633,0.0,79.66804260402591,0.0 -2022-09-26 02:05:53,54.876264427791575,15.40601109817633,286.3636363636364,1.0,7.284762894154472,10.0,1000.0,1.991434112148526,380.2893335703447,0.022017931282425348,0.2863636363636364,0.15,142,14,352.10612564524433,POINT (526051.7248545515 6081097.888402879),526051.7248545515,6081097.888402879,9.996083231123063,0.0,79.66791704877326,0.0 -2022-09-26 02:05:54,54.87628002672318,15.406164516736656,277.27272727272725,1.0,7.172093865184419,10.0,1000.0,1.9872501875615995,380.2346160651725,0.018172129685813308,0.2772727272727272,0.15,138,14,352.0448736377369,POINT (526061.5588450555 6081099.681253118),526061.5588450555,6081099.681253118,9.996083293652381,0.0,79.66779150927702,0.0 -2022-09-26 02:05:55,54.87629562565474,15.406317935356228,268.1818181818182,1.0,7.054828831132816,10.0,1000.0,1.9823421793223974,380.1821889191058,0.01414613569031942,0.2681818181818182,0.15,133,14,351.93054674237493,POINT (526071.3928316928 6081101.474124919),526071.3928316928,6081101.474124919,9.996083356730807,0.0,79.66766595402753,0.0 -2022-09-26 02:05:56,54.87631122458625,15.406471354035048,259.0909090909091,1.0,6.986055567951041,10.0,1000.0,1.9786883487131686,380.14973039233985,0.01148990155439595,0.25909090909090915,0.15,129,14,351.8157626607329,POINT (526081.2268144635 6081103.267018278),526081.2268144635,6081103.267018278,9.99608341963768,0.0,79.66754040940252,0.0 -2022-09-26 02:05:57,54.876326823517736,15.406624772773114,250.00000000000003,1.0,6.9230134188214505,10.0,1000.0,1.9744782056320873,380.11773558789366,0.008787805145178256,0.25000000000000006,0.15,124,14,351.6483265164794,POINT (526091.0607933672 6081105.059933197),526091.0607933672,6081105.059933197,9.996083482248963,0.0,79.66741486442004,0.0 -2022-09-26 02:05:58,54.87634242244917,15.406778191570428,240.90909090909093,1.0,6.8838359736192185,10.0,1000.0,1.9714037469543975,380.0972629156651,0.007054675366601816,0.24090909090909093,0.15,120,14,351.5784232531316,POINT (526100.8947684044 6081106.8528696755),526100.8947684044,6081106.8528696755,9.996083545533395,0.0,79.66728931466626,0.0 -2022-09-26 02:05:59,54.876358021380554,15.406931610426984,231.81818181818184,1.0,6.868643333516438,10.0,1000.0,1.9679315869226357,380.0764416112679,0.005337858122014147,0.23181818181818184,0.15,115,14,351.8389199241305,POINT (526110.7287395744 6081108.645827714),526110.7287395744,6081108.645827714,9.99608360817866,0.0,79.66716376419598,0.0 -2022-09-26 02:06:00,54.87637362031191,15.407085029342788,222.72727272727275,1.0,6.8876443090295565,10.0,1000.0,1.9654481269080502,380.0627690725287,0.004264407835371115,0.22272727272727275,0.15,111,14,352.3983129932673,POINT (526120.5627068777 6081110.438807312),526120.5627068777,6081110.438807312,9.996083671162983,0.0,79.6670382194576,0.0 -2022-09-26 02:06:01,54.87638921924323,15.407238448317841,213.63636363636365,1.0,6.9409074390188525,10.0,1000.0,1.9627014697556038,380.048641940638,0.0032251478525362693,0.21363636363636365,0.15,106,14,353.4822422809824,POINT (526130.3966703143 6081112.2318084715),526130.3966703143,6081112.2318084715,9.996083734529401,0.0,79.6669126642176,0.0 -2022-09-26 02:06:02,54.8764048181745,15.407391867352137,204.54545454545456,1.0,6.994123013583555,10.0,1000.0,1.9607781912248037,380.0393133897672,0.002588650465177464,0.20454545454545456,0.15,102,14,354.55116133021903,POINT (526140.2306298836 6081114.024831189),526140.2306298836,6081114.024831189,9.996083796984552,0.0,79.66678712425525,0.0 -2022-09-26 02:06:03,54.876420417105734,15.407545286445682,195.45454545454547,1.0,7.054201753283457,10.0,1000.0,1.9586953695982865,380.0297255930227,0.001982608075290667,0.19545454545454546,0.15,97,14,355.96287784511316,POINT (526150.0645855862 6081115.817875468),526150.0645855862,6081115.817875468,9.996083860614025,0.0,79.66666156376684,0.0 -2022-09-26 02:06:04,54.87643601603692,15.407698705598474,186.36363636363637,1.0,7.08791116821258,10.0,1000.0,1.9569414739107986,380.02210065712245,0.0015378460721576892,0.18636363636363637,0.15,92,14,357.2711450389461,POINT (526159.8985374217 6081117.610941307),526159.8985374217,6081117.610941307,9.996083923446747,0.0,79.66653601867571,0.0 -2022-09-26 02:06:05,54.876451614968076,15.407852124810512,177.27272727272728,1.0,7.086373261632306,10.0,1000.0,1.9557530223023634,380.01720613400715,0.0012693550230176813,0.17727272727272728,0.15,88,14,358.13839870116954,POINT (526169.7324853905 6081119.404028704),526169.7324853905,6081119.404028704,9.996083986671046,0.0,79.66641047394528,0.0 -2022-09-26 02:06:06,54.8764672138992,15.408005544081798,168.1818181818182,1.0,7.0444078664827,10.0,1000.0,1.9545067868728403,380.01236400555536,0.001014740483085659,0.16818181818181818,0.15,83,14,358.9249113061394,POINT (526179.5664294921 6081121.197137665),526179.5664294921,6081121.197137665,9.996084050153474,0.0,79.66628490773128,0.0 -2022-09-26 02:06:07,54.87648281283027,15.40815896341233,159.0909090909091,1.0,6.981048751485416,10.0,1000.0,1.95367961568363,380.0093540239856,0.0008596451813518397,0.1590909090909091,0.15,79,14,359.30619705355457,POINT (526189.4003697266 6081122.990268184),526189.4003697266,6081122.990268184,9.996084112963123,0.0,79.6661593678965,0.0 -2022-09-26 02:06:08,54.8764984117613,15.408312382802109,150.0,1.0,6.8740135113859475,10.0,1000.0,1.9528295601709706,380.0064772388319,0.0007099302663639006,0.15,0.15,74,14,359.5123226876512,POINT (526199.2343060941 6081124.783420263),526199.2343060941,6081124.783420263,9.99608417626942,0.0,79.66603381767985,0.0 -2022-09-26 02:06:09,54.87651401069229,15.408465802251133,140.90909090909093,1.0,6.776104800476911,10.0,1000.0,1.9522766595925476,380.0047541074898,0.0006162900270910831,0.14090909090909093,0.15,70,14,359.5155743025561,POINT (526209.0682385943 6081126.576593901),526209.0682385943,6081126.576593901,9.996084239113065,0.0,79.66590827235724,0.0 -2022-09-26 02:06:10,54.87652960962325,15.408619221759407,131.8181818181818,1.0,6.652079198691727,10.0,1000.0,1.9517195485677192,380.00316817686416,0.0005228163860153468,0.1318181818181818,0.15,65,14,359.3941290225787,POINT (526218.9021672276 6081128.3697891),526218.9021672276,6081128.3697891,9.996084302682425,0.0,79.66578271689218,0.0 -2022-09-26 02:06:11,54.87654520855417,15.408772641326928,122.72727272727273,1.0,6.558293785617113,10.0,1000.0,1.9513642782675735,380.00225488987695,0.00046202427465725945,0.12272727272727274,0.15,61,14,359.2268115276776,POINT (526228.7360919937 6081130.1630058605),526228.7360919937,6081130.1630058605,9.99608436618526,0.0,79.665657161309,0.0 -2022-09-26 02:06:12,54.87656080748504,15.408926060953696,113.63636363636364,1.0,6.450901141722385,10.0,1000.0,1.9510130925428795,380.00144635905417,0.0003988307421389171,0.11363636363636365,0.15,56,14,359.03678069552734,POINT (526238.5700128927 6081131.95624418),526238.5700128927,6081131.95624418,9.99608442928742,0.0,79.66553161611088,0.0 -2022-09-26 02:06:13,54.87657640641588,15.409079480639713,104.54545454545455,1.0,6.378372845274693,10.0,1000.0,1.9507933936755313,380.00099897251033,0.0003560572245094825,0.10454545454545455,0.15,52,14,359.0383230218028,POINT (526248.4039299246 6081133.74950406),526248.4039299246,6081133.74950406,9.996084492719179,0.0,79.66540606578246,0.0 -2022-09-26 02:06:14,54.87659200534666,15.409232900384978,95.45454545454547,1.0,6.316572883904369,10.0,1000.0,1.9505801929009456,380.00061791987525,0.000309993442254785,0.09545454545454547,0.15,47,14,359.3040994160244,POINT (526258.2378430893 6081135.542785497),526258.2378430893,6081135.542785497,9.996084555750253,0.0,79.66528052583908,0.0 -2022-09-26 02:06:15,54.8766076042774,15.409386320189489,86.36363636363637,1.0,6.299033525947814,10.0,1000.0,1.9504492461346123,380.0004151811162,0.0002778567527310727,0.08636363636363638,0.15,43,14,359.70431740295965,POINT (526268.0717523864 6081137.336088495),526268.0717523864,6081137.336088495,9.996084618819895,0.0,79.66515497503501,0.0 -2022-09-26 02:06:16,54.87662320320811,15.409539740053246,77.27272727272728,1.0,6.324681347408649,10.0,1000.0,1.9503243774949282,380.0002488072332,0.00024243125083332098,0.07727272727272728,0.15,38,14,0.3293635749693635,POINT (526277.9056578164 6081139.129413056),526277.9056578164,6081139.129413056,9.996084682896887,0.0,79.66502940895667,0.0 -2022-09-26 02:06:17,54.87663880213877,15.409693159976248,68.18181818181819,1.0,6.384099477939856,10.0,1000.0,1.950248994165451,380.0001635086471,0.0002172795703621662,0.06818181818181819,0.15,34,14,0.8077974288596579,POINT (526287.7395593789 6081140.922759174),526287.7395593789,6081140.922759174,9.996084745561282,0.0,79.66490387391048,0.0 -2022-09-26 02:06:18,54.8766544010694,15.409846579958499,59.09090909090909,1.0,6.500463173256583,10.0,1000.0,1.9501782553988565,380.00009584773966,0.0001892285686690211,0.0590909090909091,0.15,29,14,1.1873222307845026,POINT (526297.573457074 6081142.716126854),526297.573457074,6081142.716126854,9.99608480905653,0.0,79.66477831797933,0.0 -2022-09-26 02:06:19,54.87667,15.41,50.0,1.0,6.647739212614421,10.0,1000.0,1.950127331875292,380.0000558960885,0.00016445118284986793,0.05,0.15,24,14,1.1086737376193128,POINT (526307.4073509022 6081144.509516094),526307.4073509022,6081144.509516094,9.996084873172414,0.0,79.66465276264836,0.0 -2022-09-26 02:06:20,54.87667,15.41,50.0,12.0,6.491923067307956,10.0,1000.0,1.9506307521391397,380.00021369984705,0.0025186418526769025,0.05,0.22857142857142856,24,22,359.39439007421504,POINT (526307.4073509022 6081144.509516094),526307.4073509022,6081144.509516094,0.0,11.0,0.0,90.0 -2022-09-26 02:06:21,54.8766544010694,15.409846579958499,59.09090909090909,12.0,6.256753976577355,10.0,1000.0,1.9508279769857955,380.0003421290442,0.0028592022879619715,0.0590909090909091,0.22857142857142856,29,22,359.10735595928884,POINT (526297.573457074 6081142.716126854),526297.573457074,6081142.716126854,9.996084873172414,0.0,259.66465276264836,0.0 -2022-09-26 02:06:22,54.87663880213877,15.409693159976248,68.18181818181819,12.0,6.095585900597107,10.0,1000.0,1.9510948069729244,380.00055568487295,0.0032321798415401335,0.06818181818181819,0.22857142857142856,34,22,358.75467981081715,POINT (526287.7395593789 6081140.922759174),526287.7395593789,6081140.922759174,9.99608480905653,0.0,259.6647783179793,0.0 -2022-09-26 02:06:23,54.87662320320811,15.409539740053246,77.27272727272728,12.0,6.028285305829905,10.0,1000.0,1.951373889346128,380.00082201358657,0.003554914425521368,0.07727272727272728,0.22857142857142856,38,22,358.5457213513665,POINT (526277.9056578164 6081139.129413056),526277.9056578164,6081139.129413056,9.996084745561282,0.0,259.6649038739105,0.0 -2022-09-26 02:06:24,54.8766076042774,15.409386320189489,86.36363636363637,12.0,6.017037926711583,10.0,1000.0,1.9518292295580477,380.00133768001643,0.003990228750945919,0.08636363636363638,0.22857142857142856,43,22,358.4708225928364,POINT (526268.0717523864 6081137.336088495),526268.0717523864,6081137.336088495,9.996084682896887,0.0,259.6650294089567,0.0 -2022-09-26 02:06:25,54.87659200534666,15.409232900384978,95.45454545454547,12.0,6.054225933621126,10.0,1000.0,1.9523010512141983,380.00196311649563,0.004365362688604188,0.09545454545454547,0.22857142857142856,47,22,358.5840701134776,POINT (526258.2378430893 6081135.542785497),526258.2378430893,6081135.542785497,9.996084618819895,0.0,259.665154975035,0.0 -2022-09-26 02:06:26,54.87657640641588,15.409079480639713,104.54545454545455,12.0,6.134633742181943,10.0,1000.0,1.9530618212551363,380.0031352745143,0.004870419652717305,0.10454545454545455,0.22857142857142856,52,22,358.91385673790666,POINT (526248.4039299246 6081133.74950406),526248.4039299246,6081133.74950406,9.996084555750253,0.0,259.6652805258391,0.0 -2022-09-26 02:06:27,54.87656080748504,15.408926060953696,113.63636363636364,12.0,6.208164128033074,10.0,1000.0,1.9538397353584653,380.00450955218326,0.005306108948241291,0.11363636363636365,0.22857142857142856,56,22,359.2710242659449,POINT (526238.5700128927 6081131.95624418),526238.5700128927,6081131.95624418,9.996084492719179,0.0,259.66540606578246,0.0 -2022-09-26 02:06:28,54.87654520855417,15.408772641326928,122.72727272727273,12.0,6.2974586829911,10.0,1000.0,1.9550753721171192,380.00699284455754,0.005895753969785568,0.12272727272727274,0.22857142857142856,61,22,359.7314400222643,POINT (526228.7360919937 6081130.1630058605),526228.7360919937,6081130.1630058605,9.99608442928742,0.0,259.66553161611085,0.0 -2022-09-26 02:06:29,54.87652960962325,15.408619221759407,131.8181818181818,12.0,6.373356367020917,10.0,1000.0,1.9563190128658288,380.00980068979374,0.00640955019056599,0.1318181818181818,0.22857142857142856,65,22,0.05260087336688457,POINT (526218.9021672276 6081128.3697891),526218.9021672276,6081128.3697891,9.99608436618526,0.0,259.665657161309,0.0 -2022-09-26 02:06:30,54.87651401069229,15.408465802251133,140.90909090909093,12.0,6.507619675193527,10.0,1000.0,1.9582609767526131,380.0146882436615,0.007116430364756273,0.14090909090909093,0.22857142857142856,70,22,0.565795182423642,POINT (526209.0682385943 6081126.576593901),526209.0682385943,6081126.576593901,9.996084302682425,0.0,259.6657827168922,0.0 -2022-09-26 02:06:31,54.8764984117613,15.408312382802109,150.0,12.0,6.656770110848569,10.0,1000.0,1.9601816082772814,380.0200191563558,0.007746587873097785,0.15,0.22857142857142856,74,22,1.1680551441124862,POINT (526199.2343060941 6081124.783420263),526199.2343060941,6081124.783420263,9.996084239113065,0.0,259.6659082723572,0.0 -2022-09-26 02:06:32,54.87648281283027,15.40815896341233,159.0909090909091,12.0,6.8808687576033165,10.0,1000.0,1.9631259338707372,380.02897403219765,0.008639893791750371,0.1590909090909091,0.22857142857142856,79,22,2.0781558663431383,POINT (526189.4003697266 6081122.990268184),526189.4003697266,6081122.990268184,9.99608417626942,0.0,259.6660338176798,0.0 -2022-09-26 02:06:33,54.8764672138992,15.408005544081798,168.1818181818182,12.0,7.0683986112901,10.0,1000.0,1.965984136425894,380.03842604438546,0.009464609243902926,0.16818181818181818,0.22857142857142856,83,22,2.7841271231733913,POINT (526179.5664294921 6081121.197137665),526179.5664294921,6081121.197137665,9.996084112963123,0.0,259.6661593678965,0.0 -2022-09-26 02:06:34,54.876451614968076,15.407852124810512,177.27272727272728,12.0,7.2801431979542786,10.0,1000.0,1.970281695592969,380.05383324083556,0.010679941192248249,0.17727272727272728,0.22857142857142856,88,22,3.413195150781803,POINT (526169.7324853905 6081119.404028704),526169.7324853905,6081119.404028704,9.996084050153474,0.0,259.66628490773127,0.0 -2022-09-26 02:06:35,54.87643601603692,15.407698705598474,186.36363636363637,12.0,7.41040613500648,10.0,1000.0,1.9743731598315826,380.0696958376011,0.011845942332499144,0.18636363636363637,0.22857142857142856,92,22,3.574158851792106,POINT (526159.8985374217 6081117.610941307),526159.8985374217,6081117.610941307,9.996083986671046,0.0,259.66641047394523,0.0 -2022-09-26 02:06:36,54.876420417105734,15.407545286445682,195.45454545454547,12.0,7.5066030508028305,10.0,1000.0,1.9804029251643684,380.0950813141378,0.013626256127660857,0.19545454545454546,0.22857142857142856,97,22,3.242355764900026,POINT (526150.0645855862 6081115.817875468),526150.0645855862,6081115.817875468,9.996083923446747,0.0,259.66653601867574,0.0 -2022-09-26 02:06:37,54.8764048181745,15.407391867352137,204.54545454545456,12.0,7.5249131344335325,10.0,1000.0,1.987554781620275,380.128369537463,0.015879981657123805,0.20454545454545456,0.22857142857142856,102,22,2.3234106501280394,POINT (526140.2306298836 6081114.024831189),526140.2306298836,6081114.024831189,9.996083860614025,0.0,259.6666615637668,0.0 -2022-09-26 02:06:38,54.87638921924323,15.407238448317841,213.63636363636365,12.0,7.491643298501463,10.0,1000.0,1.9941533101924627,380.1624602668662,0.01812546714757429,0.21363636363636365,0.22857142857142856,106,22,1.2513629016420964,POINT (526130.3966703143 6081112.2318084715),526130.3966703143,6081112.2318084715,9.996083796984552,0.0,259.6667871242552,0.0 -2022-09-26 02:06:39,54.87637362031191,15.407085029342788,222.72727272727275,12.0,7.411905963301126,10.0,1000.0,2.0035712914931842,380.2177536380468,0.02163897769431191,0.22272727272727275,0.22857142857142856,111,22,359.6795008935166,POINT (526120.5627068777 6081110.438807312),526120.5627068777,6081110.438807312,9.996083734529401,0.0,259.6669126642176,0.0 -2022-09-26 02:06:40,54.876358021380554,15.406931610426984,231.81818181818184,12.0,7.337791350093527,10.0,1000.0,2.012084070788867,380.27590666643425,0.02514750093423305,0.23181818181818184,0.22857142857142856,115,22,358.3997879519904,POINT (526110.7287395744 6081108.645827714),526110.7287395744,6081108.645827714,9.996083671162983,0.0,259.6670382194576,0.0 -2022-09-26 02:06:41,54.87634242244917,15.406778191570428,240.90909090909093,12.0,7.256466001878109,10.0,1000.0,2.023985653768837,380.37374440404056,0.030605536368067978,0.24090909090909093,0.22857142857142856,120,22,356.95128529502745,POINT (526100.8947684044 6081106.8528696755),526100.8947684044,6081106.8528696755,9.99608360817866,0.0,259.66716376419595,0.0 -2022-09-26 02:06:42,54.876326823517736,15.406624772773114,250.00000000000003,12.0,7.208316685821919,10.0,1000.0,2.0345271476266653,380.4807864561946,0.035991108757710805,0.25000000000000006,0.22857142857142856,124,22,355.94951901190666,POINT (526091.0607933672 6081105.059933197),526091.0607933672,6081105.059933197,9.996083545533395,0.0,259.6672893146663,0.0 -2022-09-26 02:06:43,54.87631122458625,15.406471354035048,259.0909090909091,12.0,7.155804060896772,10.0,1000.0,2.048972721882589,380.6677847570978,0.04422228553577038,0.25909090909090915,0.22857142857142856,129,22,354.69922050166565,POINT (526081.2268144635 6081103.267018278),526081.2268144635,6081103.267018278,9.996083482248963,0.0,259.66741486442004,0.0 -2022-09-26 02:06:44,54.87629562565474,15.406317935356228,268.1818181818182,12.0,7.107453720373841,10.0,1000.0,2.0615238179852984,380.87834742655525,0.05217163135636173,0.2681818181818182,0.22857142857142856,133,22,353.4496581016924,POINT (526071.3928316928 6081101.474124919),526071.3928316928,6081101.474124919,9.99608341963768,0.0,259.6675404094025,0.0 -2022-09-26 02:06:45,54.87628002672318,15.406164516736656,277.27272727272725,12.0,7.0374455450680005,10.0,1000.0,2.0784122114688683,381.25243033544575,0.06401793523435081,0.2772727272727272,0.22857142857142856,138,22,351.47896615415743,POINT (526061.5588450555 6081099.681253118),526061.5588450555,6081099.681253118,9.996083356730807,0.0,259.66766595402754,0.0 -2022-09-26 02:06:46,54.876264427791575,15.40601109817633,286.3636363636364,12.0,6.978994671156253,10.0,1000.0,2.092843093804351,381.6752415831069,0.07514854649029894,0.2863636363636364,0.22857142857142856,142,22,349.6671364650213,POINT (526051.7248545515 6081097.888402879),526051.7248545515,6081097.888402879,9.996083293652381,0.0,259.66779150927704,0.0 -2022-09-26 02:06:47,54.87624882885993,15.405857679675249,295.4545454545455,12.0,6.913268729820346,10.0,1000.0,2.1119798877713425,382.41949291761694,0.09124477969828602,0.29545454545454547,0.22857142857142856,147,22,347.343637266669,POINT (526041.8908601807 6081096.095574198),526041.8908601807,6081096.095574198,9.996083231123063,0.0,259.66791704877323,0.0 -2022-09-26 02:06:48,54.87623322992825,15.405704261233415,304.54545454545456,12.0,6.873880491201018,10.0,1000.0,2.1281393370836548,383.244734787818,0.10590135367420864,0.30454545454545456,0.22857142857142856,151,22,345.6335622537622,POINT (526032.0568619432 6081094.302767078),526032.0568619432,6081094.302767078,9.996083168140633,0.0,259.6680426040259,0.0 -2022-09-26 02:06:49,54.876217630996535,15.405550842850829,313.6363636363637,12.0,6.8475380294910755,10.0,1000.0,2.1493911903402014,384.65642249459063,0.12640317827209974,0.31363636363636366,0.22857142857142856,156,22,343.90699763290075,POINT (526022.2228598393 6081092.509981518),526022.2228598393,6081092.509981518,9.996083105196686,0.0,259.66816814841786,0.0 -2022-09-26 02:06:50,54.87620203206478,15.405397424527488,322.72727272727275,12.0,6.847688711835227,10.0,1000.0,2.1718525310371426,386.60949444525653,0.14916195139230004,0.32272727272727275,0.22857142857142856,161,22,342.7903935357781,POINT (526012.3888538688 6081090.717217519),526012.3888538688,6081090.717217519,9.996083042028697,0.0,259.66829370880566,0.0 -2022-09-26 02:06:51,54.87618643313298,15.405244006263391,331.81818181818187,12.0,6.8630847434199485,10.0,1000.0,2.190766701518573,388.65415659306154,0.1687877434633049,0.33181818181818185,0.22857142857142856,165,22,342.36218122001054,POINT (526002.5548440315 6081088.924475078),526002.5548440315,6081088.924475078,9.996082979972908,0.0,259.66841924317623,0.0 -2022-09-26 02:06:52,54.87617083420114,15.405090588058542,340.90909090909093,12.0,6.8913665809322495,10.0,1000.0,2.215752776985631,391.9279775551364,0.19472219618255657,0.34090909090909094,0.22857142857142856,170,22,342.32805817360986,POINT (525992.7208303278 6081087.131754198),525992.7208303278,6081087.131754198,9.996082916557336,0.0,259.66854480320814,0.0 -2022-09-26 02:06:53,54.876155235269266,15.40493716991294,350.0,12.0,6.911384225784865,10.0,1000.0,2.2369863221553414,395.1977838223017,0.21624224853164647,0.35,0.22857142857142856,174,22,342.5781244250101,POINT (525982.8868127575 6081085.339054877),525982.8868127575,6081085.339054877,9.996082854315977,0.0,259.6686703427138,0.0 -2022-09-26 02:06:54,54.876139636337356,15.404783751826582,359.0909090909091,12.0,6.919775879194571,10.0,1000.0,2.265370542511492,400.1734398764109,0.24355587783906393,0.3590909090909091,0.22857142857142856,179,22,343.0272374756757,POINT (525973.0527913208 6081083.546377118),525973.0527913208,6081083.546377118,9.996082790996407,0.0,259.6687959027489,0.0 -2022-09-26 02:06:55,54.8761240374054,15.404630333799467,368.1818181818182,12.0,6.906157818998664,10.0,1000.0,2.289791806123974,404.88745152244246,0.2652840795899285,0.36818181818181817,0.22857142857142856,183,22,343.3523417746417,POINT (525963.2187660174 6081081.753720916),525963.2187660174,6081081.753720916,9.996082729132583,0.0,259.66892143712573,0.0 -2022-09-26 02:06:56,54.8761084384734,15.404476915831602,377.2727272727273,12.0,6.8635688419860355,10.0,1000.0,2.3227849565236496,411.6660323922106,0.29165193313656285,0.3772727272727273,0.22857142857142856,188,22,343.6250660166544,POINT (525953.3847368477 6081079.961086275),525953.3847368477,6081079.961086275,9.996082665961504,0.0,259.6690469917927,0.0 -2022-09-26 02:06:57,54.876092839541364,15.404323497922977,386.3636363636364,12.0,6.8191235708745035,10.0,1000.0,2.3513594314093083,417.71892120714244,0.31164007247812203,0.38636363636363635,0.22857142857142856,192,22,343.76680736952403,POINT (525943.5507038111 6081078.168473193),525943.5507038111,6081078.168473193,9.996082603974154,0.0,259.6691725367956,0.0 -2022-09-26 02:06:58,54.87607724060928,15.404170080073602,395.4545454545455,12.0,6.768312601432514,10.0,1000.0,2.3899745286668064,425.8821160845626,0.33464377035225734,0.3954545454545455,0.22857142857142856,197,22,343.8038296572428,POINT (525933.7166669087 6081076.375881671),525933.7166669087,6081076.375881671,9.996082540889516,0.0,259.6692980806034,0.0 -2022-09-26 02:06:59,54.87606164167716,15.404016662283473,404.54545454545456,12.0,6.740771160080805,10.0,1000.0,2.423185790308572,432.6856044732255,0.35106612947339433,0.40454545454545454,0.22857142857142856,201,22,343.6474698739602,POINT (525923.8826261399 6081074.58331171),525923.8826261399,6081074.58331171,9.99608247809149,0.0,259.6694236355144,0.0 -2022-09-26 02:07:00,54.876046042745,15.403863244552586,413.6363636363637,12.0,6.729914577456834,10.0,1000.0,2.467365055062702,441.1796286018006,0.3686782140536178,0.4136363636363637,0.22857142857142856,206,22,343.1303989942261,POINT (525914.0485815044 6081072.790763306),525914.0485815044,6081072.790763306,9.996082416186075,0.0,259.6695491750311,0.0 -2022-09-26 02:07:01,54.8760304438128,15.403709826880947,422.72727272727275,12.0,6.74190603665531,10.0,1000.0,2.5044513876731216,447.6633492196056,0.3801898092200131,0.42272727272727273,0.22857142857142856,210,22,342.42174527040476,POINT (525904.2145330027 6081070.998236464),525904.2145330027,6081070.998236464,9.99608235325499,0.0,259.6696747297059,0.0 -2022-09-26 02:07:02,54.87601484488055,15.403556409268553,431.81818181818187,12.0,6.781210218837604,10.0,1000.0,2.5521361594552534,454.9436974795808,0.3911462134356768,0.4318181818181819,0.22857142857142856,215,22,341.17347383073206,POINT (525894.3804806349 6081069.20573118),525894.3804806349,6081069.20573118,9.996082291039926,0.0,259.6698002633757,0.0 -2022-09-26 02:07:03,54.87599924594827,15.403402991715405,440.90909090909093,12.0,6.842158589532674,10.0,1000.0,2.5999546241788973,460.83734281041484,0.3981961587391406,0.4409090909090909,0.22857142857142856,220,22,339.60445756217587,POINT (525884.5464244006 6081067.413247457),525884.5464244006,6081067.413247457,9.996082228266884,0.0,259.66992582354465,0.0 -2022-09-26 02:07:04,54.87598364701595,15.403249574221501,450.00000000000006,12.0,6.9009052664175865,10.0,1000.0,2.6370935238144253,464.255496898817,0.4010490143168148,0.45000000000000007,0.22857142857142856,224,22,338.2253817262633,POINT (525874.7123643004 6081065.620785291),525874.7123643004,6081065.620785291,9.996082166033272,0.0,259.6700513570979,0.0 -2022-09-26 02:07:05,54.875968048083585,15.403096156786843,459.0909090909091,12.0,6.978675417239875,10.0,1000.0,2.680353298838408,466.6277994959455,0.40127087811299567,0.4590909090909091,0.22857142857142856,229,22,336.52763010323514,POINT (525864.8783003336 6081063.828344687),525864.8783003336,6081063.828344687,9.996082103637761,0.0,259.67017691213806,0.0 -2022-09-26 02:07:06,54.875952449151185,15.402942739411431,468.18181818181824,12.0,7.038373663448817,10.0,1000.0,2.7110160965125556,466.88590018823356,0.39894030935457275,0.46818181818181825,0.22857142857142856,233,22,335.3381238775006,POINT (525855.0442325011 6081062.035925643),525855.0442325011,6081062.035925643,9.996082040770077,0.0,259.67030246121016,0.0 -2022-09-26 02:07:07,54.87593685021875,15.402789322095263,477.2727272727273,12.0,7.103158470843738,10.0,1000.0,2.742513806818923,465.1343568570786,0.3931844331107284,0.4772727272727273,0.22857142857142856,238,22,334.24109911432527,POINT (525845.2101608021 6081060.243528158),525845.2101608021,6081060.243528158,9.996081978523032,0.0,259.67042801088206,0.0 -2022-09-26 02:07:08,54.87592125128628,15.402635904838341,486.3636363636364,12.0,7.144148483422817,10.0,1000.0,2.7609506853103354,462.15885418486204,0.3865597587713764,0.4863636363636364,0.22857142857142856,242,22,333.7587679347688,POINT (525835.3760852371 6081058.451152235),525835.3760852371,6081058.451152235,9.996081915813404,0.0,259.67055356544824,0.0 -2022-09-26 02:07:09,54.875905652353765,15.402482487640665,495.4545454545455,12.0,7.182059083270783,10.0,1000.0,2.7741127772234435,456.7128096997497,0.3761289933886579,0.4954545454545455,0.22857142857142856,247,22,333.63562166815746,POINT (525825.542005806 6081056.65879787),525825.542005806,6081056.65879787,9.996081853767283,0.0,259.6706791043807,0.0 -2022-09-26 02:07:10,54.8758900534212,15.402329070502232,504.54545454545456,12.0,7.206199335135144,10.0,1000.0,2.776005517487219,451.2295810765256,0.3663570411478175,0.5045454545454545,0.22857142857142856,251,22,333.7657342314388,POINT (525815.7079225088 6081054.866465064),525815.7079225088,6081054.866465064,9.99608179165462,0.0,259.670804643195,0.0 -2022-09-26 02:07:11,54.87587445448859,15.402175653423043,513.6363636363637,12.0,7.25080062095689,10.0,1000.0,2.7671521324091675,443.37740546021064,0.3527581231843615,0.5136363636363638,0.22857142857142856,256,22,333.87111976233973,POINT (525805.8738353457 6081053.074153815),525805.8738353457,6081053.074153815,9.996081729475417,0.0,259.6709301818913,0.0 -2022-09-26 02:07:12,54.875858855555954,15.402022236403102,522.7272727272727,12.0,7.31915226521064,10.0,1000.0,2.7512380829149334,436.6226671153824,0.3410661700413279,0.5227272727272727,0.22857142857142856,260,22,333.7855040500606,POINT (525796.0397443165 6081051.28186413),525796.0397443165,6081051.28186413,9.996081666738334,0.0,259.67105574708677,0.0 -2022-09-26 02:07:13,54.87584325662328,15.4018688194424,531.8181818181819,12.0,7.452254543846709,10.0,1000.0,2.7211202178065506,428.015137676794,0.325817974470561,0.5318181818181819,0.22857142857142856,265,22,333.46569457933697,POINT (525786.2056494211 6081049.489596003),525786.2056494211,6081049.489596003,9.996081604884177,0.0,259.67118128602544,0.0 -2022-09-26 02:07:14,54.87582765769056,15.401715402540946,540.909090909091,12.0,7.589982220010457,10.0,1000.0,2.6898701589329153,421.2827287194656,0.3133807626518996,0.540909090909091,0.22857142857142856,269,22,333.11239301387076,POINT (525776.3715506598 6081047.697349434),525776.3715506598,6081047.697349434,9.996081542848952,0.0,259.67130682472634,0.0 -2022-09-26 02:07:15,54.87581205875779,15.401561985698736,550.0,12.0,7.783178888050196,10.0,1000.0,2.6436957262137613,413.37394667548756,0.29786580406107294,0.55,0.22857142857142856,274,22,332.6918987865881,POINT (525766.5374480325 6081045.905124426),525766.5374480325,6081045.905124426,9.996081480360777,0.0,259.6714323791839,0.0 -2022-09-26 02:07:16,54.87579645982498,15.401408568915771,559.0909090909091,12.0,7.938918952741589,10.0,1000.0,2.6026560817533078,407.6246337485085,0.28569518495495333,0.5590909090909091,0.22857142857142856,278,22,332.48180848841736,POINT (525756.7033415395 6081044.112920976),525756.7033415395,6081044.112920976,9.996081418307005,0.0,259.6715579177683,0.0 -2022-09-26 02:07:17,54.87578086089213,15.401255152192052,568.1818181818182,12.0,8.11555707605822,10.0,1000.0,2.548499353118834,401.3055323189756,0.2710276881698194,0.5681818181818182,0.22857142857142856,283,22,332.4969457935491,POINT (525746.8692311805 6081042.320739087),525746.8692311805,6081042.320739087,9.9960813560818,0.0,259.67168346697736,0.0 -2022-09-26 02:07:18,54.87576526195925,15.401101735527575,577.2727272727274,12.0,8.256006093705276,10.0,1000.0,2.4936240826512703,396.01708751888805,0.2571754236360599,0.5772727272727274,0.22857142857142856,288,22,332.8975429049456,POINT (525737.0351169556 6081040.528578757),525737.0351169556,6081040.528578757,9.996081293904593,0.0,259.67180901618786,0.0 -2022-09-26 02:07:19,54.875749663026326,15.400948318922342,586.3636363636364,12.0,8.335896863438702,10.0,1000.0,2.450797603034051,392.5217667610942,0.2467850569105093,0.5863636363636364,0.22857142857142856,292,22,333.5046180240256,POINT (525727.200998865 6081038.736439986),525727.200998865,6081038.736439986,9.996081231994797,0.0,259.67193455477695,0.0 -2022-09-26 02:07:20,54.875734064093365,15.400794902376354,595.4545454545455,12.0,8.394434087278261,10.0,1000.0,2.40022082036744,389.0089215930227,0.23473039928797443,0.5954545454545455,0.22857142857142856,297,22,334.57343352892946,POINT (525717.3668769085 6081036.944322774),525717.3668769085,6081036.944322774,9.996081169966018,0.0,259.67206009861934,0.0 -2022-09-26 02:07:21,54.875718465160354,15.400641485889611,604.5454545454546,12.0,8.412032500720372,10.0,1000.0,2.3629938952833043,386.8115092898243,0.22584298234213387,0.6045454545454546,0.22857142857142856,301,22,335.60766015324066,POINT (525707.5327510863 6081035.152227122),525707.5327510863,6081035.152227122,9.996081107703738,0.0,259.6721856475953,0.0 -2022-09-26 02:07:22,54.87570286622731,15.400488069462114,613.6363636363637,12.0,8.406120569540457,10.0,1000.0,2.321193479213585,384.71590025182076,0.21564199191631925,0.6136363636363638,0.22857142857142856,306,22,337.0106964706155,POINT (525697.6986213983 6081033.36015303),525697.6986213983,6081033.36015303,9.996081045770948,0.0,259.67231119144077,0.0 -2022-09-26 02:07:23,54.87568726729422,15.400334653093859,622.7272727272727,12.0,8.385358973616544,10.0,1000.0,2.291704920073915,383.47151511066266,0.20814919696385495,0.6227272727272728,0.22857142857142856,310,22,338.1454491911272,POINT (525687.8644878445 6081031.568100497),525687.8644878445,6081031.568100497,9.996080983719187,0.0,259.67243674053947,0.0 -2022-09-26 02:07:24,54.87567166836109,15.400181236784851,631.8181818181819,12.0,8.343930502937871,10.0,1000.0,2.2595948503994534,382.3421766438713,0.19950804592205235,0.6318181818181818,0.22857142857142856,315,22,339.5246753854027,POINT (525678.0303504255 6081029.776069522),525678.0303504255,6081029.776069522,9.99608092164366,0.0,259.67256227328653,0.0 -2022-09-26 02:07:25,54.87565606942792,15.400027820535085,640.909090909091,12.0,8.312872968210806,10.0,1000.0,2.2373244567203026,381.70382667837487,0.1930780568412119,0.640909090909091,0.22857142857142856,319,22,340.50664556024924,POINT (525668.1962091404 6081027.984060108),525668.1962091404,6081027.984060108,9.996080859864517,0.0,259.67268782799897,0.0 -2022-09-26 02:07:26,54.87564047049471,15.399874404344564,650.0,12.0,8.304173757687696,10.0,1000.0,2.213025346170236,381.1506894441099,0.1855044396667864,0.65,0.22857142857142856,324,22,341.4026577961132,POINT (525658.3620639896 6081026.192072253),525658.3620639896,6081026.192072253,9.99608079789464,0.0,259.67281337161137,0.0 -2022-09-26 02:07:27,54.87562487156146,15.399720988213286,659.0909090909091,12.0,8.329531279782785,10.0,1000.0,2.195791867473551,380.85181431148754,0.179712855094127,0.6590909090909092,0.22857142857142856,328,22,341.78463998870654,POINT (525648.5279149736 6081024.400105957),525648.5279149736,6081024.400105957,9.996080735743698,0.0,259.67293891498616,0.0 -2022-09-26 02:07:28,54.875609272628175,15.399567572141251,668.1818181818182,12.0,8.398745391243814,10.0,1000.0,2.1761640934673494,380.6029727379005,0.17267583331700465,0.6681818181818182,0.22857142857142856,333,22,341.8302548417697,POINT (525638.6937620917 6081022.608161221),525638.6937620917,6081022.608161221,9.996080673931912,0.0,259.67306446409265,0.0 -2022-09-26 02:07:29,54.875593673694844,15.399414156128461,677.2727272727274,12.0,8.474337929909122,10.0,1000.0,2.161429487384454,380.47314416611994,0.16712050205784135,0.6772727272727274,0.22857142857142856,337,22,341.56039478820514,POINT (525628.8596053442 6081020.816238043),525628.8596053442,6081020.816238043,9.996080612439917,0.0,259.67318999720635,0.0 -2022-09-26 02:07:30,54.87557807476148,15.399260740174917,686.3636363636364,12.0,8.574254773073772,10.0,1000.0,2.1436117715390823,380.3675445357472,0.16016868337553133,0.6863636363636364,0.22857142857142856,342,22,340.9425187729772,POINT (525619.0254447313 6081019.0243364265),525619.0254447313,6081019.0243364265,9.996080550046633,0.0,259.6733155564605,0.0 -2022-09-26 02:07:31,54.87556247582806,15.399107324280614,695.4545454545455,12.0,8.654388423480645,10.0,1000.0,2.126003360443459,380.302086866306,0.15311974638518025,0.6954545454545455,0.22857142857142856,347,22,340.16451940317256,POINT (525609.1912802529 6081017.232456368),525609.1912802529,6081017.232456368,9.99608048848367,0.0,259.673441094829,0.0 -2022-09-26 02:07:32,54.87554687689462,15.398953908445554,704.5454545454546,12.0,8.685733103253185,10.0,1000.0,2.111894314980717,380.26745406314865,0.14736332729883456,0.7045454545454546,0.22857142857142856,351,22,339.5469727004329,POINT (525599.3571119088 6081015.440597868),525599.3571119088,6081015.440597868,9.996080427135642,0.0,259.67356662794737,0.0 -2022-09-26 02:07:33,54.87553127796112,15.398800492669737,713.6363636363637,12.0,8.664184151944989,10.0,1000.0,2.0942047348855937,380.2373709457482,0.13998377160498707,0.7136363636363637,0.22857142857142856,356,22,338.92501579319384,POINT (525589.5229396995 6081013.648760929),525589.5229396995,6081013.648760929,9.996080364771823,0.0,259.67369218708654,0.0 -2022-09-26 02:07:34,54.875515679027586,15.398647076953164,722.7272727272727,12.0,8.58823107652929,10.0,1000.0,2.0801015056934937,380.2196455202446,0.13391997420289617,0.7227272727272728,0.22857142857142856,360,22,338.63448100349774,POINT (525579.6887636245 6081011.856945546),525579.6887636245,6081011.856945546,9.996080303686714,0.0,259.6738177149563,0.0 -2022-09-26 02:07:35,54.87550008009402,15.398493661295834,731.8181818181819,12.0,8.415163344982197,10.0,1000.0,2.0627593455406745,380.20190855247944,0.12614168680597665,0.7318181818181819,0.22857142857142856,365,22,338.59844388591193,POINT (525569.8545836844 6081010.065151726),525569.8545836844,6081010.065151726,9.996080241304362,0.0,259.67394327397903,0.0 -2022-09-26 02:07:36,54.875484481160406,15.398340245697748,740.909090909091,12.0,8.219150614289992,10.0,1000.0,2.0493262075680727,380.18971544205203,0.11977461669157996,0.740909090909091,0.22857142857142856,369,22,338.82956682846475,POINT (525560.0203998787 6081008.273379464),525560.0203998787,6081008.273379464,9.996080179866823,0.0,259.67406881223565,0.0 -2022-09-26 02:07:37,54.875468882226755,15.398186830158908,750.0000000000001,12.0,7.92264078726616,10.0,1000.0,2.033381891914816,380.17579286459255,0.11167049817139763,0.7500000000000001,0.22857142857142856,374,22,339.34598969132776,POINT (525550.1862122079 6081006.481628761),525550.1862122079,6081006.481628761,9.996080118081276,0.0,259.67419435550636,0.0 -2022-09-26 02:07:38,54.87545328329307,15.398033414679308,759.0909090909091,12.0,7.667850589575338,10.0,1000.0,2.0215059627163954,380.16524661901184,0.10510734383834938,0.7590909090909091,0.22857142857142856,378,22,339.7822162000865,POINT (525540.3520206716 6081004.689899617),525540.3520206716,6081004.689899617,9.996080056572783,0.0,259.6743198990178,0.0 -2022-09-26 02:07:39,54.87543768435933,15.39787999925895,768.1818181818182,12.0,7.3323547448774695,10.0,1000.0,2.007979036820385,380.15250276194047,0.09686341916832704,0.7681818181818183,0.22857142857142856,383,22,340.0932762899951,POINT (525530.51782527 6081002.898192033),525530.51782527,6081002.898192033,9.996079994830819,0.0,259.6744454476629,0.0 -2022-09-26 02:07:40,54.875422085425555,15.397726583897839,777.2727272727274,12.0,7.055017812715237,10.0,1000.0,1.9983225780308695,380.14257321410156,0.09028655984177558,0.7772727272727273,0.22857142857142856,387,22,340.0318193846265,POINT (525520.6836260032 6081001.106506007),525520.6836260032,6081001.106506007,9.99607993340858,0.0,259.6745709803152,0.0 -2022-09-26 02:07:41,54.87540648649174,15.397573168595969,786.3636363636364,12.0,6.721630288084201,10.0,1000.0,1.9877814659161597,380.13047647928727,0.08216035346037731,0.7863636363636364,0.22857142857142856,392,22,339.5124742193468,POINT (525510.8494228713 6080999.31484154),525510.8494228713,6080999.31484154,9.996079871815002,0.0,259.67469652359205,0.0 -2022-09-26 02:07:42,54.87539088755788,15.397419753353342,795.4545454545455,12.0,6.4887467259228115,10.0,1000.0,1.980572171865251,380.1210756711085,0.075789497407137,0.7954545454545455,0.22857142857142856,396,22,338.7691421378702,POINT (525501.0152158738 6080997.523198632),525501.0152158738,6080997.523198632,9.996079810498475,0.0,259.6748220671097,0.0 -2022-09-26 02:07:43,54.875375288624,15.397266338169958,804.5454545454546,12.0,6.268530549632241,10.0,1000.0,1.9730268727646587,380.10972344462454,0.06805912070587175,0.8045454545454546,0.22857142857142856,401,22,337.53294641187694,POINT (525491.1810050113 6080995.731577285),525491.1810050113,6080995.731577285,9.996079748552503,0.0,259.67494762077354,0.0 -2022-09-26 02:07:44,54.87535968969007,15.397112923045817,813.6363636363637,12.0,6.148050935588598,10.0,1000.0,1.966983202161693,380.0988781249499,0.06065986841170511,0.8136363636363637,0.22857142857142856,406,22,336.1233542853874,POINT (525481.3467902837 6080993.939977498),525481.3467902837,6080993.939977498,9.996079686821455,0.0,259.6750731691872,0.0 -2022-09-26 02:07:45,54.87534409075611,15.396959507980922,822.7272727272727,12.0,6.128100332338303,10.0,1000.0,1.9631111523854263,380.09060921571825,0.05502439855426735,0.8227272727272728,0.22857142857142856,410,22,335.0102328753778,POINT (525471.5125716911 6080992.148399268),525471.5125716911,6080992.148399268,9.99607962552463,0.0,259.6751987017276,0.0 -2022-09-26 02:07:46,54.87532849182209,15.396806092975268,831.8181818181819,12.0,6.189529662383957,10.0,1000.0,1.9593083934520508,380.0808260673761,0.04838160984796448,0.8318181818181819,0.22857142857142856,415,22,333.81271061176426,POINT (525461.6783492335 6080990.356842598),525461.6783492335,6080990.356842598,9.996079563941953,0.0,259.67532424477304,0.0 -2022-09-26 02:07:47,54.87531289288805,15.396652678028858,840.909090909091,12.0,6.291649510948802,10.0,1000.0,1.956969602564883,380.0734666731289,0.04341519603259013,0.8409090909090909,0.22857142857142856,419,22,333.1247592973928,POINT (525451.8441229106 6080988.565307487),525451.8441229106,6080988.565307487,9.996079502636329,0.0,259.67544978805915,0.0 -2022-09-26 02:07:48,54.87529729395396,15.396499263141687,850.0000000000001,12.0,6.455753642656127,10.0,1000.0,1.954761976364476,380.06487369136994,0.037666441920935934,0.8500000000000001,0.22857142857142856,424,22,332.71409278789645,POINT (525442.0098927225 6080986.773793937),525442.0098927225,6080986.773793937,9.996079441159402,0.0,259.67557534196993,0.0 -2022-09-26 02:07:49,54.87528169501982,15.39634584831376,859.0909090909091,12.0,6.593185143154457,10.0,1000.0,1.9534575571220838,380.05849303312,0.033444781601720104,0.8590909090909091,0.22857142857142856,428,22,332.7801711374278,POINT (525432.1756586696 6080984.982301941),525432.1756586696,6080984.982301941,9.9960793803262,0.0,259.6757008585221,0.0 -2022-09-26 02:07:50,54.875266096085646,15.396192433545078,868.1818181818182,12.0,6.750332551124849,10.0,1000.0,1.9522731803646312,380.0511362615429,0.028642312039364213,0.8681818181818183,0.22857142857142856,433,22,333.3170003052345,POINT (525422.3414207518 6080983.190831508),525422.3414207518,6080983.190831508,9.99607931832023,0.0,259.67582641720935,0.0 -2022-09-26 02:07:51,54.875250497151434,15.396039018835635,877.2727272727274,12.0,6.863128262407472,10.0,1000.0,1.9516004001476228,380.0457409106581,0.025175196016054904,0.8772727272727273,0.22857142857142856,437,22,334.00090947024046,POINT (525412.5071789687 6080981.399382633),525412.5071789687,6080981.399382633,9.996079257206574,0.0,259.6759519605016,0.0 -2022-09-26 02:07:52,54.87523489821719,15.395885604185438,886.3636363636365,12.0,7.013214987004232,10.0,1000.0,1.9510123819538647,380.0395946484088,0.021295292123668215,0.8863636363636365,0.22857142857142856,442,22,334.91939982014776,POINT (525402.6729333211 6080979.607955318),525402.6729333211,6080979.607955318,9.99607919556826,0.0,259.6760775031976,0.0 -2022-09-26 02:07:53,54.8752192992829,15.39573218959448,895.4545454545455,12.0,7.147600588405449,10.0,1000.0,1.9506910853331783,380.0351402513256,0.018538776885840446,0.8954545454545455,0.22857142857142856,446,22,335.54011511783733,POINT (525392.8386838082 6080977.816549562),525392.8386838082,6080977.816549562,9.99607913455059,0.0,259.67620304649296,0.0 -2022-09-26 02:07:54,54.875203700348564,15.395578775062766,904.5454545454546,12.0,7.316495944190902,10.0,1000.0,1.9504206115568288,380.03012406486545,0.01550101356713396,0.9045454545454547,0.22857142857142856,451,22,336.0595506826236,POINT (525383.0044304305 6080976.025165363),525383.0044304305,6080976.025165363,9.996079073571122,0.0,259.6763285789276,0.0 -2022-09-26 02:07:55,54.875188101414196,15.395425360590295,913.6363636363637,12.0,7.431496044135347,10.0,1000.0,1.9502783890496633,380.026529837231,0.01337476658515747,0.9136363636363637,0.22857142857142856,455,22,336.2484413740583,POINT (525373.1701731881 6080974.233802725),525373.1701731881,6080974.233802725,9.99607901190988,0.0,259.6764541268799,0.0 -2022-09-26 02:07:56,54.875172502479785,15.395271946177065,922.7272727272727,12.0,7.52098702224424,10.0,1000.0,1.9501630159705317,380.02252685635443,0.011064540093276853,0.9227272727272727,0.22857142857142856,460,22,336.2363481339438,POINT (525363.3359120806 6080972.442461645),525363.3359120806,6080972.442461645,9.996078950921653,0.0,259.67657967006033,0.0 -2022-09-26 02:07:57,54.87515690354533,15.395118531823078,931.8181818181819,12.0,7.532106209562357,10.0,1000.0,1.9501046129392454,380.019689865394,0.009469556191372984,0.9318181818181819,0.22857142857142856,464,22,336.08823961174625,POINT (525353.5016471087 6080970.651142125),525353.5016471087,6080970.651142125,9.996078889294234,0.0,259.6767052125248,0.0 -2022-09-26 02:07:58,54.87514130461083,15.394965117528333,940.909090909091,12.0,7.458587559933571,10.0,1000.0,1.950058938557719,380.0165636974722,0.007758810480543032,0.940909090909091,0.22857142857142856,469,22,335.83799809599657,POINT (525343.6673782716 6080968.859844163),525343.6673782716,6080968.859844163,9.996078828683414,0.0,259.6768307505761,0.0 -2022-09-26 02:07:59,54.87512570567629,15.394811703292833,950.0,12.0,7.290691191393994,10.0,1000.0,1.9500325020131766,380.0138632408926,0.006326233352123752,0.95,0.22857142857142856,474,22,335.647354761067,POINT (525333.8331055702 6080967.0685677575),525333.8331055702,6080967.0685677575,9.996078767538119,0.0,259.67695627716876,0.0 -2022-09-26 02:08:00,54.87512570567629,15.394811703292833,950.0,23.0,6.6521307309867925,10.0,1000.0,1.9501699047423262,380.0960534324802,0.010041732411203631,0.95,0.30714285714285716,474,30,316.1605631576716,POINT (525333.8331055702 6080967.0685677575),525333.8331055702,6080967.0685677575,0.0,11.0,0.0,90.0 -2022-09-26 02:08:01,54.87514130461083,15.394965117528333,940.909090909091,23.0,6.535130120340547,10.0,1000.0,1.9503073747825554,380.1162667428862,0.012111063485827252,0.940909090909091,0.30714285714285716,469,30,317.9542406489483,POINT (525343.6673782716 6080968.859844163),525343.6673782716,6080968.859844163,9.996078767538119,0.0,79.67695627716877,0.0 -2022-09-26 02:08:02,54.87515690354533,15.395118531823078,931.8181818181819,23.0,6.344838446028826,10.0,1000.0,1.9505447341334907,380.13989516992825,0.014539737012398718,0.9318181818181819,0.30714285714285716,464,30,319.918586873977,POINT (525353.5016471087 6080970.651142125),525353.5016471087,6080970.651142125,9.996078828683414,0.0,79.67683075057609,0.0 -2022-09-26 02:08:03,54.875172502479785,15.395271946177065,922.7272727272727,23.0,6.151587324400763,10.0,1000.0,1.9508481235787263,380.1615126465574,0.0167708063063406,0.9227272727272727,0.30714285714285716,460,30,321.44807272972906,POINT (525363.3359120806 6080972.442461645),525363.3359120806,6080972.442461645,9.996078889294234,0.0,79.6767052125248,0.0 -2022-09-26 02:08:04,54.875188101414196,15.395425360590295,913.6363636363637,23.0,5.883071269116636,10.0,1000.0,1.951447279989743,380.19224848353525,0.019956936262493678,0.9136363636363637,0.30714285714285716,455,30,323.12328627985755,POINT (525373.1701731881 6080974.233802725),525373.1701731881,6080974.233802725,9.996078950921653,0.0,79.67657967006032,0.0 -2022-09-26 02:08:05,54.875203700348564,15.395578775062766,904.5454545454546,23.0,5.668463755957041,10.0,1000.0,1.9521857003364345,380.22004187615863,0.02285080652732558,0.9045454545454547,0.30714285714285716,451,30,324.1724186758704,POINT (525383.0044304305 6080976.025165363),525383.0044304305,6080976.025165363,9.99607901190988,0.0,79.67645412687992,0.0 -2022-09-26 02:08:06,54.8752192992829,15.39573218959448,895.4545454545455,23.0,5.428397889100841,10.0,1000.0,1.9535897162945959,380.25908967850836,0.026934127859000116,0.8954545454545455,0.30714285714285716,446,30,325.0578744632317,POINT (525392.8386838082 6080977.816549562),525392.8386838082,6080977.816549562,9.996079073571122,0.0,79.67632857892761,0.0 -2022-09-26 02:08:07,54.87523489821719,15.395885604185438,886.3636363636365,23.0,5.272648338316778,10.0,1000.0,1.9552572421313614,380.2939788155262,0.030597192648953934,0.8863636363636365,0.30714285714285716,442,30,325.4537099189859,POINT (525402.6729333211 6080979.607955318),525402.6729333211,6080979.607955318,9.99607913455059,0.0,79.67620304649294,0.0 -2022-09-26 02:08:08,54.875250497151434,15.396039018835635,877.2727272727274,23.0,5.1218976738495625,10.0,1000.0,1.9583084564690574,380.3423986341481,0.03569896733811475,0.8772727272727273,0.30714285714285716,437,30,325.7232867822595,POINT (525412.5071789687 6080981.399382633),525412.5071789687,6080981.399382633,9.99607919556826,0.0,79.67607750319758,0.0 -2022-09-26 02:08:09,54.875266096085646,15.396192433545078,868.1818181818182,23.0,5.019406042715369,10.0,1000.0,1.9617987758353346,380.38513140006546,0.040214874323676486,0.8681818181818183,0.30714285714285716,433,30,325.9672233936475,POINT (525422.3414207518 6080983.190831508),525422.3414207518,6080983.190831508,9.996079257206574,0.0,79.67595196050164,0.0 -2022-09-26 02:08:10,54.87528169501982,15.39634584831376,859.0909090909091,23.0,4.908980962253283,10.0,1000.0,1.9679416772978835,380.4436922078624,0.04641751539067103,0.8590909090909091,0.30714285714285716,428,30,326.52205866725376,POINT (525432.1756586696 6080984.982301941),525432.1756586696,6080984.982301941,9.99607931832023,0.0,79.67582641720934,0.0 -2022-09-26 02:08:11,54.87529729395396,15.396499263141687,850.0000000000001,23.0,4.845109288868386,10.0,1000.0,1.974705203351579,380.4947196637612,0.05183063446140355,0.8500000000000001,0.30714285714285716,424,30,327.2403399385255,POINT (525442.0098927225 6080986.773793937),525442.0098927225,6080986.773793937,9.9960793803262,0.0,79.67570085852209,0.0 -2022-09-26 02:08:12,54.87531289288805,15.396652678028858,840.909090909091,23.0,4.816061967876755,10.0,1000.0,1.9861475764063197,380.56373742733416,0.05915822094170164,0.8409090909090909,0.30714285714285716,419,30,328.49290443231655,POINT (525451.8441229106 6080988.565307487),525451.8441229106,6080988.565307487,9.996079441159402,0.0,79.67557534196995,0.0 -2022-09-26 02:08:13,54.87532849182209,15.396806092975268,831.8181818181819,23.0,4.8475744234526985,10.0,1000.0,1.9982640486425833,380.62308300352225,0.06546035460914558,0.8318181818181819,0.30714285714285716,415,30,329.7353829240168,POINT (525461.6783492335 6080990.356842598),525461.6783492335,6080990.356842598,9.996079502636329,0.0,79.67544978805917,0.0 -2022-09-26 02:08:14,54.87534409075611,15.396959507980922,822.7272727272727,23.0,4.967499892987285,10.0,1000.0,2.017952301884073,380.70226108118686,0.07386699035772501,0.8227272727272728,0.30714285714285716,410,30,331.4798406512947,POINT (525471.5125716911 6080992.148399268),525471.5125716911,6080992.148399268,9.996079563941953,0.0,79.67532424477302,0.0 -2022-09-26 02:08:15,54.87535968969007,15.397112923045817,813.6363636363637,23.0,5.129207154894848,10.0,1000.0,2.0379829416301183,380.7694008388552,0.08099368158132503,0.8136363636363637,0.30714285714285716,406,30,332.9233805598354,POINT (525481.3467902837 6080993.939977498),525481.3467902837,6080993.939977498,9.99607962552463,0.0,79.6751987017276,0.0 -2022-09-26 02:08:16,54.875375288624,15.397266338169958,804.5454545454546,23.0,5.403672843357777,10.0,1000.0,2.0692126868992813,380.8576979417273,0.09036796408423584,0.8045454545454546,0.30714285714285716,401,30,334.6332281903098,POINT (525491.1810050113 6080995.731577285),525491.1810050113,6080995.731577285,9.996079686821455,0.0,79.6750731691872,0.0 -2022-09-26 02:08:17,54.87539088755788,15.397419753353342,795.4545454545455,23.0,5.73484776090651,10.0,1000.0,2.1081362503154537,380.9503120417262,0.10021549789521865,0.7954545454545455,0.30714285714285716,396,30,336.07371204206186,POINT (525501.0152158738 6080997.523198632),525501.0152158738,6080997.523198632,9.996079748552503,0.0,79.67494762077354,0.0 -2022-09-26 02:08:18,54.87540648649174,15.397573168595969,786.3636363636364,23.0,6.0173444391232,10.0,1000.0,2.1452498285682453,381.02703907116245,0.10840156040292957,0.7863636363636364,0.30714285714285716,392,30,336.9341566843079,POINT (525510.8494228713 6080999.31484154),525510.8494228713,6080999.31484154,9.996079810498475,0.0,79.67482206710969,0.0 -2022-09-26 02:08:19,54.875422085425555,15.397726583897839,777.2727272727274,23.0,6.360636455246116,10.0,1000.0,2.1993588774626174,381.12555416850256,0.1189808704285955,0.7772727272727273,0.30714285714285716,387,30,337.56958496291463,POINT (525520.6836260032 6081001.106506007),525520.6836260032,6081001.106506007,9.996079871815002,0.0,79.67469652359208,0.0 -2022-09-26 02:08:20,54.87543768435933,15.39787999925895,768.1818181818182,23.0,6.607431602216931,10.0,1000.0,2.2487338346461567,381.20588727287213,0.1276973670298003,0.7681818181818183,0.30714285714285716,383,30,337.7173494135209,POINT (525530.51782527 6081002.898192033),525530.51782527,6081002.898192033,9.99607993340858,0.0,79.6745709803152,0.0 -2022-09-26 02:08:21,54.87545328329307,15.398033414679308,759.0909090909091,23.0,6.868775451879396,10.0,1000.0,2.317517092250082,381.30741405044284,0.138884441073807,0.7590909090909091,0.30714285714285716,378,30,337.52304674346294,POINT (525540.3520206716 6081004.689899617),525540.3520206716,6081004.689899617,9.996079994830819,0.0,79.67444544766292,0.0 -2022-09-26 02:08:22,54.875468882226755,15.398186830158908,750.0000000000001,23.0,7.0500322173364225,10.0,1000.0,2.3774482532568357,381.3889595343937,0.14805544846882449,0.7500000000000001,0.30714285714285716,374,30,337.193323767666,POINT (525550.1862122079 6081006.481628761),525550.1862122079,6081006.481628761,9.996080056572783,0.0,79.6743198990178,0.0 -2022-09-26 02:08:23,54.875484481160406,15.398340245697748,740.909090909091,23.0,7.263967415563118,10.0,1000.0,2.4570386972702067,381.49067571406744,0.1597884068626191,0.740909090909091,0.30714285714285716,369,30,336.900370329947,POINT (525560.0203998787 6081008.273379464),525560.0203998787,6081008.273379464,9.996080118081276,0.0,79.67419435550636,0.0 -2022-09-26 02:08:24,54.87550008009402,15.398493661295834,731.8181818181819,23.0,7.422020057965936,10.0,1000.0,2.5230853992703626,381.57163981520847,0.16938921465086446,0.7318181818181819,0.30714285714285716,365,30,337.04377531047083,POINT (525569.8545836844 6081010.065151726),525569.8545836844,6081010.065151726,9.996080179866823,0.0,79.67406881223566,0.0 -2022-09-26 02:08:25,54.875515679027586,15.398647076953164,722.7272727272727,23.0,7.601935551803839,10.0,1000.0,2.6065082494325447,381.6725862279816,0.18165957830300314,0.7227272727272728,0.30714285714285716,360,30,337.8914763896214,POINT (525579.6887636245 6081011.856945546),525579.6887636245,6081011.856945546,9.996080241304362,0.0,79.67394327397903,0.0 -2022-09-26 02:08:26,54.87553127796112,15.398800492669737,713.6363636363637,23.0,7.733928744610184,10.0,1000.0,2.6723042239329717,381.75403720775284,0.19169103969688,0.7136363636363637,0.30714285714285716,356,30,339.125665800035,POINT (525589.5229396995 6081013.648760929),525589.5229396995,6081013.648760929,9.996080303686714,0.0,79.6738177149563,0.0 -2022-09-26 02:08:27,54.87554687689462,15.398953908445554,704.5454545454546,23.0,7.888882239660541,10.0,1000.0,2.751291271755479,381.8594958515969,0.204493087893276,0.7045454545454546,0.30714285714285716,351,30,341.2612037845323,POINT (525599.3571119088 6081015.440597868),525599.3571119088,6081015.440597868,9.996080364771823,0.0,79.67369218708659,0.0 -2022-09-26 02:08:28,54.87556247582806,15.399107324280614,695.4545454545455,23.0,8.008609602895936,10.0,1000.0,2.810585701257808,381.9506208935813,0.2149341887786428,0.6954545454545455,0.30714285714285716,347,30,343.29655098120304,POINT (525609.1912802529 6081017.232456368),525609.1912802529,6081017.232456368,9.996080427135642,0.0,79.67356662794735,0.0 -2022-09-26 02:08:29,54.87557807476148,15.399260740174917,686.3636363636364,23.0,8.156956609871074,10.0,1000.0,2.878673985217415,382.0817426609036,0.22821267894426872,0.6863636363636364,0.30714285714285716,342,30,345.9916798990634,POINT (525619.0254447313 6081019.0243364265),525619.0254447313,6081019.0243364265,9.99608048848367,0.0,79.67344109482902,0.0 -2022-09-26 02:08:30,54.875593673694844,15.399414156128461,677.2727272727274,23.0,8.30594222829449,10.0,1000.0,2.939669925279724,382.2478393286865,0.24171460920351492,0.6772727272727274,0.30714285714285716,337,30,348.54151628547817,POINT (525628.8596053442 6081020.816238043),525628.8596053442,6081020.816238043,9.996080550046633,0.0,79.67331555646051,0.0 -2022-09-26 02:08:31,54.875609272628175,15.399567572141251,668.1818181818182,23.0,8.425189876581817,10.0,1000.0,2.983787833895886,382.42309567405806,0.2526596535587083,0.6681818181818182,0.30714285714285716,333,30,350.26250602988097,POINT (525638.6937620917 6081022.608161221),525638.6937620917,6081022.608161221,9.996080612439917,0.0,79.67318999720634,0.0 -2022-09-26 02:08:32,54.87562487156146,15.399720988213286,659.0909090909091,23.0,8.571386758561397,10.0,1000.0,3.034586469799142,382.72682968528187,0.26651456743409174,0.6590909090909092,0.30714285714285716,328,30,351.80060137205857,POINT (525648.5279149736 6081024.400105957),525648.5279149736,6081024.400105957,9.996080673931912,0.0,79.67306446409265,0.0 -2022-09-26 02:08:33,54.87564047049471,15.399874404344564,650.0,23.0,8.682563239152792,10.0,1000.0,3.073478176807283,383.07023596808693,0.2777531003881176,0.65,0.30714285714285716,324,30,352.4460069196762,POINT (525658.3620639896 6081026.192072253),525658.3620639896,6081026.192072253,9.996080735743698,0.0,79.67293891498615,0.0 -2022-09-26 02:08:34,54.87565606942792,15.400027820535085,640.909090909091,23.0,8.808869135328944,10.0,1000.0,3.122871043702289,383.6839310530571,0.29205283610933086,0.640909090909091,0.30714285714285716,319,30,352.5180785028215,POINT (525668.1962091404 6081027.984060108),525668.1962091404,6081027.984060108,9.99608079789464,0.0,79.67281337161138,0.0 -2022-09-26 02:08:35,54.87567166836109,15.400181236784851,631.8181818181819,23.0,8.896250834759973,10.0,1000.0,3.165461657917612,384.3787515312644,0.30376910057136974,0.6318181818181818,0.30714285714285716,315,30,352.10367136782406,POINT (525678.0303504255 6081029.776069522),525678.0303504255,6081029.776069522,9.996080859864517,0.0,79.67268782799894,0.0 -2022-09-26 02:08:36,54.87568726729422,15.400334653093859,622.7272727272727,23.0,8.985990688953395,10.0,1000.0,3.2258085895225124,385.59572051108114,0.31890379142940517,0.6227272727272728,0.30714285714285716,310,30,351.33142084164075,POINT (525687.8644878445 6081031.568100497),525687.8644878445,6081031.568100497,9.99608092164366,0.0,79.67256227328654,0.0 -2022-09-26 02:08:37,54.87570286622731,15.400488069462114,613.6363636363637,23.0,9.038378852969613,10.0,1000.0,3.2818682332476943,386.93009897244684,0.3315355954708413,0.6136363636363638,0.30714285714285716,306,30,350.6867632375172,POINT (525697.6986213983 6081033.36015303),525697.6986213983,6081033.36015303,9.996080983719187,0.0,79.67243674053948,0.0 -2022-09-26 02:08:38,54.875718465160354,15.400641485889611,604.5454545454546,23.0,9.065734222727897,10.0,1000.0,3.3636329495523567,389.1726047034604,0.34817766192034527,0.6045454545454546,0.30714285714285716,301,30,349.8760650026965,POINT (525707.5327510863 6081035.152227122),525707.5327510863,6081035.152227122,9.996081045770948,0.0,79.67231119144077,0.0 -2022-09-26 02:08:39,54.875734064093365,15.400794902376354,595.4545454545455,23.0,9.045375865802,10.0,1000.0,3.4389619180386557,391.5225957148959,0.36231789609265924,0.5954545454545455,0.30714285714285716,297,30,349.25158215567325,POINT (525717.3668769085 6081036.944322774),525717.3668769085,6081036.944322774,9.996081107703738,0.0,79.6721856475953,0.0 -2022-09-26 02:08:40,54.875749663026326,15.400948318922342,586.3636363636364,23.0,8.954828096120862,10.0,1000.0,3.5448224766190655,395.2799038026554,0.3811930260928605,0.5863636363636364,0.30714285714285716,292,30,348.5440391696668,POINT (525727.200998865 6081038.736439986),525727.200998865,6081038.736439986,9.996081169966018,0.0,79.67206009861934,0.0 -2022-09-26 02:08:41,54.87576526195925,15.401101735527575,577.2727272727274,23.0,8.826392526973931,10.0,1000.0,3.6371886173011285,399.0201815967934,0.3973371973044729,0.5772727272727274,0.30714285714285716,288,30,348.0625031367906,POINT (525737.0351169556 6081040.528578757),525737.0351169556,6081040.528578757,9.996081231994797,0.0,79.67193455477698,0.0 -2022-09-26 02:08:42,54.87578086089213,15.401255152192052,568.1818181818182,23.0,8.599695870374614,10.0,1000.0,3.7584656237102942,404.6825199420629,0.4188593742838521,0.5681818181818182,0.30714285714285716,283,30,347.5840517564653,POINT (525746.8692311805 6081042.320739087),525746.8692311805,6081042.320739087,9.996081293904593,0.0,79.67180901618788,0.0 -2022-09-26 02:08:43,54.87579645982498,15.401408568915771,559.0909090909091,23.0,8.314973430976055,10.0,1000.0,3.8805069088365207,411.4525679156115,0.44180367553828076,0.5590909090909091,0.30714285714285716,278,30,347.23671356049033,POINT (525756.7033415395 6081044.112920976),525756.7033415395,6081044.112920976,9.9960813560818,0.0,79.67168346697733,0.0 -2022-09-26 02:08:44,54.87581205875779,15.401561985698736,550.0,23.0,8.063282826864093,10.0,1000.0,3.9738688809431757,417.61508253618985,0.4610505127531288,0.55,0.30714285714285716,274,30,347.0308178455469,POINT (525766.5374480325 6081045.905124426),525766.5374480325,6081045.905124426,9.996081418307005,0.0,79.67155791776834,0.0 -2022-09-26 02:08:45,54.87582765769056,15.401715402540946,540.909090909091,23.0,7.747028811061692,10.0,1000.0,4.078799167858677,426.0952925695661,0.48594626863756313,0.540909090909091,0.30714285714285716,269,30,346.8157950089931,POINT (525776.3715506598 6081047.697349434),525776.3715506598,6081047.697349434,9.996081480360777,0.0,79.67143237918391,0.0 -2022-09-26 02:08:46,54.87584325662328,15.4018688194424,531.8181818181819,23.0,7.514597479325074,10.0,1000.0,4.148686445989646,433.315710483522,0.5062522135407781,0.5318181818181819,0.30714285714285716,265,30,346.63476538485475,POINT (525786.2056494211 6081049.489596003),525786.2056494211,6081049.489596003,9.996081542848952,0.0,79.67130682472639,0.0 -2022-09-26 02:08:47,54.875858855555954,15.402022236403102,522.7272727272727,23.0,7.274408174212811,10.0,1000.0,4.212989364967056,442.54754074397215,0.5316540152134978,0.5227272727272727,0.30714285714285716,260,30,346.34227593643993,POINT (525796.0397443165 6081051.28186413),525796.0397443165,6081051.28186413,9.996081604884177,0.0,79.67118128602543,0.0 -2022-09-26 02:08:48,54.87587445448859,15.402175653423043,513.6363636363637,23.0,7.131826762447937,10.0,1000.0,4.242834396604445,449.7909396960561,0.5515872786139226,0.5136363636363638,0.30714285714285716,256,30,346.02884285948363,POINT (525805.8738353457 6081053.074153815),525805.8738353457,6081053.074153815,9.996081666738334,0.0,79.67105574708677,0.0 -2022-09-26 02:08:49,54.8758900534212,15.402329070502232,504.54545454545456,23.0,7.006716220560276,10.0,1000.0,4.250517608097499,458.20695171200583,0.5754156705018628,0.5045454545454545,0.30714285714285716,251,30,345.5431027883297,POINT (525815.7079225088 6081054.866465064),525815.7079225088,6081054.866465064,9.996081729475417,0.0,79.67093018189131,0.0 -2022-09-26 02:08:50,54.875905652353765,15.402482487640665,495.4545454545455,23.0,6.923672589213513,10.0,1000.0,4.232363083147989,464.0780027386856,0.593128438045582,0.4954545454545455,0.30714285714285716,247,30,345.14912375101414,POINT (525825.542005806 6081056.65879787),525825.542005806,6081056.65879787,9.99608179165462,0.0,79.67080464319504,0.0 -2022-09-26 02:08:51,54.87592125128628,15.402635904838341,486.3636363636364,23.0,6.839180010572793,10.0,1000.0,4.180316350706267,469.8973562009994,0.6129135161429446,0.4863636363636364,0.30714285714285716,242,30,344.98332090907013,POINT (525835.3760852371 6081058.451152235),525835.3760852371,6081058.451152235,9.996081853767283,0.0,79.6706791043807,0.0 -2022-09-26 02:08:52,54.87593685021875,15.402789322095263,477.2727272727273,23.0,6.802131682011654,10.0,1000.0,4.11720162803474,473.0621148191848,0.6263580820734809,0.4772727272727273,0.30714285714285716,238,30,345.30490516194334,POINT (525845.2101608021 6081060.243528158),525845.2101608021,6081060.243528158,9.996081915813404,0.0,79.67055356544826,0.0 -2022-09-26 02:08:53,54.875952449151185,15.402942739411431,468.18181818181824,23.0,6.806483107446426,10.0,1000.0,4.015519984762877,474.8943169258994,0.6395334275955997,0.46818181818181825,0.30714285714285716,233,30,346.3269855056133,POINT (525855.0442325011 6081062.035925643),525855.0442325011,6081062.035925643,9.996081978523032,0.0,79.67042801088208,0.0 -2022-09-26 02:08:54,54.875968048083585,15.403096156786843,459.0909090909091,23.0,6.853806415264096,10.0,1000.0,3.9196651282374697,474.5692285814805,0.6467197513525962,0.4590909090909091,0.30714285714285716,229,30,347.57174058896896,POINT (525864.8783003336 6081063.828344687),525864.8783003336,6081063.828344687,9.996082040770077,0.0,79.67030246121016,0.0 -2022-09-26 02:08:55,54.87598364701595,15.403249574221501,450.00000000000006,23.0,6.964642714543928,10.0,1000.0,3.7871919749000207,471.95072208657746,0.6509796906468673,0.45000000000000007,0.30714285714285716,224,30,349.4804797022096,POINT (525874.7123643004 6081065.620785291),525874.7123643004,6081065.620785291,9.996082103637761,0.0,79.67017691213805,0.0 -2022-09-26 02:08:56,54.87599924594827,15.403402991715405,440.90909090909093,23.0,7.0873695668927,10.0,1000.0,3.675178899819466,468.215137726604,0.6502926423282989,0.4409090909090909,0.30714285714285716,220,30,351.1242110476455,POINT (525884.5464244006 6081067.413247457),525884.5464244006,6081067.413247457,9.996082166033272,0.0,79.67005135709796,0.0 -2022-09-26 02:08:57,54.87601484488055,15.403556409268553,431.81818181818187,23.0,7.268231541711647,10.0,1000.0,3.5327319363380782,461.7964231330843,0.6440236865872347,0.4318181818181819,0.30714285714285716,215,30,353.10077757944197,POINT (525894.3804806349 6081069.20573118),525894.3804806349,6081069.20573118,9.996082228266884,0.0,79.66992582354466,0.0 -2022-09-26 02:08:58,54.8760304438128,15.403709826880947,422.72727272727275,23.0,7.458753528210691,10.0,1000.0,3.392434351755702,453.8816074740387,0.6316097805767741,0.42272727272727273,0.30714285714285716,210,30,354.7773602669953,POINT (525904.2145330027 6081070.998236464),525904.2145330027,6081070.998236464,9.996082291039926,0.0,79.66980026337572,0.0 -2022-09-26 02:08:59,54.876046042745,15.403863244552586,413.6363636363637,23.0,7.602212803808388,10.0,1000.0,3.2845082827210867,446.83870441587544,0.6173043393664026,0.4136363636363637,0.30714285714285716,206,30,355.7921034915295,POINT (525914.0485815044 6081072.790763306),525914.0485815044,6081072.790763306,9.99608235325499,0.0,79.6696747297059,0.0 -2022-09-26 02:09:00,54.87606164167716,15.404016662283473,404.54545454545456,23.0,7.752195307167408,10.0,1000.0,3.1574021999800586,437.61610442255244,0.5942216314623386,0.40454545454545454,0.30714285714285716,201,30,356.5861372432021,POINT (525923.8826261399 6081074.58331171),525923.8826261399,6081074.58331171,9.996082416186075,0.0,79.66954917503105,0.0 -2022-09-26 02:09:01,54.87607724060928,15.404170080073602,395.4545454545455,23.0,7.838877039075824,10.0,1000.0,3.0630342333963214,430.2304651907317,0.5719359602715707,0.3954545454545455,0.30714285714285716,197,30,356.84797480178,POINT (525933.7166669087 6081076.375881671),525933.7166669087,6081076.375881671,9.99608247809149,0.0,79.66942363551443,0.0 -2022-09-26 02:09:02,54.876092839541364,15.404323497922977,386.3636363636364,23.0,7.900996978385711,10.0,1000.0,2.9548161438045133,421.3687955213689,0.5399409360543344,0.38636363636363635,0.30714285714285716,192,30,356.7885680280784,POINT (525943.5507038111 6081078.168473193),525943.5507038111,6081078.168473193,9.996082540889516,0.0,79.66929808060343,0.0 -2022-09-26 02:09:03,54.8761084384734,15.404476915831602,377.2727272727273,23.0,7.919678753351319,10.0,1000.0,2.87596212425105,414.7970281083661,0.5116187108832575,0.3772727272727273,0.30714285714285716,188,30,356.53678326360927,POINT (525953.3847368477 6081079.961086275),525953.3847368477,6081079.961086275,9.996082603974154,0.0,79.66917253679559,0.0 -2022-09-26 02:09:04,54.8761240374054,15.404630333799467,368.1818181818182,23.0,7.916730394299891,10.0,1000.0,2.78644375452021,407.43512162796515,0.4737045702790173,0.36818181818181817,0.30714285714285716,183,30,356.0728769794033,POINT (525963.2187660174 6081081.753720916),525963.2187660174,6081081.753720916,9.996082665961504,0.0,79.66904699179268,0.0 -2022-09-26 02:09:05,54.876139636337356,15.404783751826582,359.0909090909091,23.0,7.875395642042499,10.0,1000.0,2.721384228866538,402.3130325807984,0.44207761652968225,0.3590909090909091,0.30714285714285716,179,30,355.4720338916134,POINT (525973.0527913208 6081083.546377118),525973.0527913208,6081083.546377118,9.996082729132583,0.0,79.66892143712575,0.0 -2022-09-26 02:09:06,54.876155235269266,15.40493716991294,350.0,23.0,7.756278935120919,10.0,1000.0,2.6471862062035347,396.90293883460976,0.4018965752600951,0.35,0.30714285714285716,174,30,354.39367939387785,POINT (525982.8868127575 6081085.339054877),525982.8868127575,6081085.339054877,9.996082790996407,0.0,79.6687959027489,0.0 -2022-09-26 02:09:07,54.87617083420114,15.405090588058542,340.90909090909093,23.0,7.606315794625596,10.0,1000.0,2.5927274592191942,393.34416923851273,0.3699280435814472,0.34090909090909094,0.30714285714285716,170,30,353.35312803266015,POINT (525992.7208303278 6081087.131754198),525992.7208303278,6081087.131754198,9.996082854315977,0.0,79.66867034271381,0.0 -2022-09-26 02:09:08,54.87618643313298,15.405244006263391,331.81818181818187,23.0,7.362133261929702,10.0,1000.0,2.5297921419066505,389.7760976000695,0.3310376898615314,0.33181818181818185,0.30714285714285716,165,30,352.0169933460372,POINT (526002.5548440315 6081088.924475078),526002.5548440315,6081088.924475078,9.996082916557336,0.0,79.66854480320815,0.0 -2022-09-26 02:09:09,54.87620203206478,15.405397424527488,322.72727272727275,23.0,7.136034796800696,10.0,1000.0,2.4829365934298653,387.5432049899151,0.3013231320260761,0.32272727272727275,0.30714285714285716,161,30,351.0683148649862,POINT (526012.3888538688 6081090.717217519),526012.3888538688,6081090.717217519,9.996082979972908,0.0,79.66841924317623,0.0 -2022-09-26 02:09:10,54.876217630996535,15.405550842850829,313.6363636363637,23.0,6.8386077018054365,10.0,1000.0,2.4280868810998335,385.4041485841848,0.2665082008621818,0.31363636363636366,0.30714285714285716,156,30,350.1985096075063,POINT (526022.2228598393 6081092.509981518),526022.2228598393,6081092.509981518,9.996083042028697,0.0,79.66829370880565,0.0 -2022-09-26 02:09:11,54.87623322992825,15.405704261233415,304.54545454545456,23.0,6.55138617473853,10.0,1000.0,2.376871500966735,383.85049886839425,0.23473654623558507,0.30454545454545456,0.30714285714285716,151,30,349.78736619449063,POINT (526032.0568619432 6081094.302767078),526032.0568619432,6081094.302767078,9.996083105196686,0.0,79.66816814841789,0.0 -2022-09-26 02:09:12,54.87624882885993,15.405857679675249,295.4545454545455,23.0,6.345971415590845,10.0,1000.0,2.338291273881663,382.9362189937432,0.21170886564366767,0.29545454545454547,0.30714285714285716,147,30,349.8018758341708,POINT (526041.8908601807 6081096.095574198),526041.8908601807,6081096.095574198,9.996083168140633,0.0,79.66804260402591,0.0 -2022-09-26 02:09:13,54.876264427791575,15.40601109817633,286.3636363636364,23.0,6.135392769785872,10.0,1000.0,2.2929188193435985,382.1036352100235,0.18599882821456834,0.2863636363636364,0.30714285714285716,142,30,350.1825625695494,POINT (526051.7248545515 6081097.888402879),526051.7248545515,6081097.888402879,9.996083231123063,0.0,79.66791704877326,0.0 -2022-09-26 02:09:14,54.87628002672318,15.406164516736656,277.27272727272725,23.0,6.010211220646498,10.0,1000.0,2.258874095140822,381.6238561738761,0.16785673563101972,0.2772727272727272,0.30714285714285716,138,30,350.6820002414485,POINT (526061.5588450555 6081099.681253118),526061.5588450555,6081099.681253118,9.996083293652381,0.0,79.66779150927702,0.0 -2022-09-26 02:09:15,54.87629562565474,15.406317935356228,268.1818181818182,23.0,5.907714022688992,10.0,1000.0,2.2191558360387744,381.1908193550158,0.1480586682030286,0.2681818181818182,0.30714285714285716,133,30,351.39442958598806,POINT (526071.3928316928 6081101.474124919),526071.3928316928,6081101.474124919,9.996083356730807,0.0,79.66766595402753,0.0 -2022-09-26 02:09:16,54.87631122458625,15.406471354035048,259.0909090909091,23.0,5.861752816696159,10.0,1000.0,2.1896873393184424,380.9402568667798,0.13435055927152784,0.25909090909090915,0.30714285714285716,129,30,351.9345254737192,POINT (526081.2268144635 6081103.267018278),526081.2268144635,6081103.267018278,9.99608341963768,0.0,79.66754040940252,0.0 -2022-09-26 02:09:17,54.876326823517736,15.406624772773114,250.00000000000003,23.0,5.830049818439655,10.0,1000.0,2.155782000384408,380.70976779327316,0.11959310197324349,0.25000000000000006,0.30714285714285716,124,30,352.52405524774986,POINT (526091.0607933672 6081105.059933197),526091.0607933672,6081105.059933197,9.996083482248963,0.0,79.66741486442004,0.0 -2022-09-26 02:09:18,54.87634242244917,15.406778191570428,240.90909090909093,23.0,5.823539176539734,10.0,1000.0,2.1310218550060154,380.5719796529842,0.10945747301652596,0.24090909090909093,0.30714285714285716,120,30,353.05190742169816,POINT (526100.8947684044 6081106.8528696755),526100.8947684044,6081106.8528696755,9.996083545533395,0.0,79.66728931466626,0.0 -2022-09-26 02:09:19,54.876358021380554,15.406931610426984,231.81818181818184,23.0,5.87664310091427,10.0,1000.0,2.103019096455524,380.4398473220882,0.0985595718840071,0.23181818181818184,0.30714285714285716,115,30,354.0757129661556,POINT (526110.7287395744 6081108.645827714),526110.7287395744,6081108.645827714,9.99608360817866,0.0,79.66716376419598,0.0 -2022-09-26 02:09:20,54.87637362031191,15.407085029342788,222.72727272727275,23.0,5.9766767375201395,10.0,1000.0,2.082938460514269,380.3572071467902,0.09103314086323143,0.22272727272727275,0.30714285714285716,111,30,355.25666398552545,POINT (526120.5627068777 6081110.438807312),526120.5627068777,6081110.438807312,9.996083671162983,0.0,79.6670382194576,0.0 -2022-09-26 02:09:21,54.87638921924323,15.407238448317841,213.63636363636365,23.0,6.15990603420726,10.0,1000.0,2.060648021674964,380.2747539149057,0.08283718870235274,0.21363636363636365,0.30714285714285716,106,30,357.1148263044191,POINT (526130.3966703143 6081112.2318084715),526130.3966703143,6081112.2318084715,9.996083734529401,0.0,79.6669126642176,0.0 -2022-09-26 02:09:22,54.8764048181745,15.407391867352137,204.54545454545456,23.0,6.332286741928088,10.0,1000.0,2.0449662746556156,380.2216057449096,0.07706851724249522,0.20454545454545456,0.30714285714285716,102,30,358.782149269045,POINT (526140.2306298836 6081114.024831189),526140.2306298836,6081114.024831189,9.996083796984552,0.0,79.66678712425525,0.0 -2022-09-26 02:09:23,54.876420417105734,15.407545286445682,195.45454545454547,23.0,6.5473992589946475,10.0,1000.0,2.0278868565218446,380.1677347612192,0.07063550086026012,0.19545454545454546,0.30714285714285716,97,30,0.8858057459272572,POINT (526150.0645855862 6081115.817875468),526150.0645855862,6081115.817875468,9.996083860614025,0.0,79.66666156376684,0.0 -2022-09-26 02:09:24,54.87643601603692,15.407698705598474,186.36363636363637,23.0,6.728995695218978,10.0,1000.0,2.0133958390346285,380.12521344264746,0.06488030471351607,0.18636363636363637,0.30714285714285716,92,30,2.7902004941050222,POINT (526159.8985374217 6081117.610941307),526159.8985374217,6081117.610941307,9.996083923446747,0.0,79.66653601867571,0.0 -2022-09-26 02:09:25,54.876451614968076,15.407852124810512,177.27272727272728,23.0,6.832627844406586,10.0,1000.0,2.0034978920504978,380.0979660323968,0.06065812786398279,0.17727272727272728,0.30714285714285716,88,30,4.0439281897103,POINT (526169.7324853905 6081119.404028704),526169.7324853905,6081119.404028704,9.996083986671046,0.0,79.66641047394528,0.0 -2022-09-26 02:09:26,54.8764672138992,15.408005544081798,168.1818181818182,23.0,6.899818388265183,10.0,1000.0,1.993023184585309,380.07097039705684,0.055758402479143446,0.16818181818181818,0.30714285714285716,83,30,5.180835739276745,POINT (526179.5664294921 6081121.197137665),526179.5664294921,6081121.197137665,9.996084050153474,0.0,79.66628490773128,0.0 -2022-09-26 02:09:27,54.87648281283027,15.40815896341233,159.0909090909091,23.0,6.904939442150162,10.0,1000.0,1.9859963312112852,380.05413148366046,0.05208688676647896,0.1590909090909091,0.30714285714285716,79,30,5.728861531683606,POINT (526189.4003697266 6081122.990268184),526189.4003697266,6081122.990268184,9.996084112963123,0.0,79.6661593678965,0.0 -2022-09-26 02:09:28,54.8764984117613,15.408312382802109,150.0,23.0,6.863027283246458,10.0,1000.0,1.9786864528043437,380.0379614495694,0.047756570584241716,0.15,0.30714285714285716,74,30,6.003742447638956,POINT (526199.2343060941 6081124.783420263),526199.2343060941,6081124.783420263,9.99608417626942,0.0,79.66603381767985,0.0 -2022-09-26 02:09:29,54.87651401069229,15.408465802251133,140.90909090909093,23.0,6.8058064509964336,10.0,1000.0,1.973863514132247,380.02821967313474,0.04447415407569753,0.14090909090909093,0.30714285714285716,70,30,5.962635578133359,POINT (526209.0682385943 6081126.576593901),526209.0682385943,6081126.576593901,9.996084239113065,0.0,79.66590827235724,0.0 -2022-09-26 02:09:30,54.87652960962325,15.408619221759407,131.8181818181818,23.0,6.727105380523407,10.0,1000.0,1.9689229539717574,380.01919371242974,0.0405768947344711,0.1318181818181818,0.30714285714285716,65,30,5.694372275036926,POINT (526218.9021672276 6081128.3697891),526218.9021672276,6081128.3697891,9.996084302682425,0.0,79.66578271689218,0.0 -2022-09-26 02:09:31,54.87654520855417,15.408772641326928,122.72727272727273,23.0,6.671104333050051,10.0,1000.0,1.9657100501048632,380.0139544304948,0.03761448955965343,0.12272727272727274,0.30714285714285716,61,30,5.36995980902941,POINT (526228.7360919937 6081130.1630058605),526228.7360919937,6081130.1630058605,9.99608436618526,0.0,79.665657161309,0.0 -2022-09-26 02:09:32,54.87656080748504,15.408926060953696,113.63636363636364,23.0,6.593211569482009,10.0,1000.0,1.9624604575432731,380.009272020641,0.034099435220069786,0.11363636363636365,0.30714285714285716,56,30,4.7401713527002585,POINT (526238.5700128927 6081131.95624418),526238.5700128927,6081131.95624418,9.99608442928742,0.0,79.66553161611088,0.0 -2022-09-26 02:09:33,54.87657640641588,15.409079480639713,104.54545454545455,23.0,6.504635047106699,10.0,1000.0,1.9603707648458568,380.00664954403715,0.03143589342863173,0.10454545454545455,0.30714285714285716,52,30,3.9397040157356855,POINT (526248.4039299246 6081133.74950406),526248.4039299246,6081133.74950406,9.996084492719179,0.0,79.66540606578246,0.0 -2022-09-26 02:09:34,54.87659200534666,15.409232900384978,95.45454545454547,23.0,6.367075439423125,10.0,1000.0,1.9582757655791352,380.00438097962973,0.028291569462868475,0.09545454545454547,0.30714285714285716,47,30,2.558531464736973,POINT (526258.2378430893 6081135.542785497),526258.2378430893,6081135.542785497,9.996084555750253,0.0,79.66528052583908,0.0 -2022-09-26 02:09:35,54.8766076042774,15.409386320189489,86.36363636363637,23.0,6.254843365088311,10.0,1000.0,1.956937239866654,380.0031480569893,0.02592433949046604,0.08636363636363638,0.30714285714285716,43,30,1.2152086336753314,POINT (526268.0717523864 6081137.336088495),526268.0717523864,6081137.336088495,9.996084618819895,0.0,79.66515497503501,0.0 -2022-09-26 02:09:36,54.87662320320811,15.409539740053246,77.27272727272728,23.0,6.144321137508524,10.0,1000.0,1.9555997194509678,380.00210678372184,0.023150599791433923,0.07727272727272728,0.30714285714285716,38,30,359.3709360144783,POINT (526277.9056578164 6081139.129413056),526277.9056578164,6081139.129413056,9.996084682896887,0.0,79.66502940895667,0.0 -2022-09-26 02:09:37,54.87663880213877,15.409693159976248,68.18181818181819,23.0,6.101416964639614,10.0,1000.0,1.9547451872419073,380.001550692074,0.02107930192512034,0.06818181818181819,0.30714285714285716,34,30,357.8642788014686,POINT (526287.7395593789 6081140.922759174),526287.7395593789,6081140.922759174,9.996084745561282,0.0,79.66490387391048,0.0 -2022-09-26 02:09:38,54.8766544010694,15.409846579958499,59.09090909090909,23.0,6.123480917566867,10.0,1000.0,1.9538880361294513,380.00108421393196,0.018672982907573455,0.0590909090909091,0.30714285714285716,29,30,356.0495792739151,POINT (526297.573457074 6081142.716126854),526297.573457074,6081142.716126854,9.99608480905653,0.0,79.66477831797933,0.0 -2022-09-26 02:09:39,54.87667,15.41,50.0,23.0,6.233821164482384,10.0,1000.0,1.9532136872106378,380.0007833104085,0.01646631918160321,0.05,0.30714285714285716,24,30,354.37594079682214,POINT (526307.4073509022 6081144.509516094),526307.4073509022,6081144.509516094,9.996084873172414,0.0,79.66465276264836,0.0 -2022-09-26 02:09:40,54.87667,15.41,50.0,34.0,6.891155052001569,10.0,1000.0,1.9660032105590606,380.0030817973462,0.04421668405326238,0.05,0.38571428571428573,24,38,358.23295796871406,POINT (526307.4073509022 6081144.509516094),526307.4073509022,6081144.509516094,0.0,11.0,0.0,90.0 -2022-09-26 02:09:41,54.8766544010694,15.409846579958499,59.09090909090909,34.0,6.611688832865736,10.0,1000.0,1.968507197751137,380.00381690856534,0.05029991661571238,0.0590909090909091,0.38571428571428573,29,38,358.95191308528734,POINT (526297.573457074 6081142.716126854),526297.573457074,6081142.716126854,9.996084873172414,0.0,259.66465276264836,0.0 -2022-09-26 02:09:42,54.87663880213877,15.409693159976248,68.18181818181819,34.0,6.419753687506706,10.0,1000.0,1.971469491562117,380.00481431827694,0.05696661144979522,0.06818181818181819,0.38571428571428573,34,38,359.8588913347653,POINT (526287.7395593789 6081140.922759174),526287.7395593789,6081140.922759174,9.99608480905653,0.0,259.6647783179793,0.0 -2022-09-26 02:09:43,54.87662320320811,15.409539740053246,77.27272727272728,34.0,6.3336287316219435,10.0,1000.0,1.9742419523083328,380.00588769573176,0.06273100139342666,0.07727272727272728,0.38571428571428573,38,38,0.6515040615411749,POINT (526277.9056578164 6081139.129413056),526277.9056578164,6081139.129413056,9.996084745561282,0.0,259.6649038739105,0.0 -2022-09-26 02:09:44,54.8766076042774,15.409386320189489,86.36363636363637,34.0,6.299571446145378,10.0,1000.0,1.978321469163806,380.0077314071452,0.07048462179672986,0.08636363636363638,0.38571428571428573,43,38,1.5932215499748281,POINT (526268.0717523864 6081137.336088495),526268.0717523864,6081137.336088495,9.996084682896887,0.0,259.6650294089567,0.0 -2022-09-26 02:09:45,54.87659200534666,15.409232900384978,95.45454545454547,34.0,6.314014968687914,10.0,1000.0,1.9821739881338978,380.00977108503366,0.07712963189271949,0.09545454545454547,0.38571428571428573,47,38,2.1923193738214195,POINT (526258.2378430893 6081135.542785497),526258.2378430893,6081135.542785497,9.996084618819895,0.0,259.665154975035,0.0 -2022-09-26 02:09:46,54.87657640641588,15.409079480639713,104.54545454545455,34.0,6.354868967192367,10.0,1000.0,1.987880014750934,380.01332478988667,0.08598868350220963,0.10454545454545455,0.38571428571428573,52,38,2.6068204827956833,POINT (526248.4039299246 6081133.74950406),526248.4039299246,6081133.74950406,9.996084555750253,0.0,259.6652805258391,0.0 -2022-09-26 02:09:47,54.87656080748504,15.408926060953696,113.63636363636364,34.0,6.386237395404681,10.0,1000.0,1.993289361678949,380.01726298646037,0.09351475407802672,0.11363636363636365,0.38571428571428573,56,38,2.6093424445403457,POINT (526238.5700128927 6081131.95624418),526238.5700128927,6081131.95624418,9.996084492719179,0.0,259.66540606578246,0.0 -2022-09-26 02:09:48,54.87654520855417,15.408772641326928,122.72727272727273,34.0,6.413355876072538,10.0,1000.0,2.001308793893215,380.0240572585589,0.10346183627082403,0.12272727272727274,0.38571428571428573,61,38,2.2362812073357645,POINT (526228.7360919937 6081130.1630058605),526228.7360919937,6081130.1630058605,9.99608442928742,0.0,259.66553161611085,0.0 -2022-09-26 02:09:49,54.87652960962325,15.408619221759407,131.8181818181818,34.0,6.437897763310061,10.0,1000.0,2.008898118874885,380.0314512458766,0.1118415084452221,0.1318181818181818,0.38571428571428573,65,38,1.7807239632728056,POINT (526218.9021672276 6081128.3697891),526218.9021672276,6081128.3697891,9.99608436618526,0.0,259.665657161309,0.0 -2022-09-26 02:09:50,54.87651401069229,15.408465802251133,140.90909090909093,34.0,6.4646949957312,10.0,1000.0,2.0200993031573224,380.04388215382505,0.12282791073425925,0.14090909090909093,0.38571428571428573,70,38,1.005446725548893,POINT (526209.0682385943 6081126.576593901),526209.0682385943,6081126.576593901,9.996084302682425,0.0,259.6657827168922,0.0 -2022-09-26 02:09:51,54.8764984117613,15.408312382802109,150.0,34.0,6.461261509573038,10.0,1000.0,2.0306295375522936,380.0570075472241,0.13201390025967027,0.15,0.38571428571428573,74,38,0.1399314089391055,POINT (526199.2343060941 6081124.783420263),526199.2343060941,6081124.783420263,9.996084239113065,0.0,259.6659082723572,0.0 -2022-09-26 02:09:52,54.87648281283027,15.40815896341233,159.0909090909091,34.0,6.413351502565556,10.0,1000.0,2.046034384057529,380.07831841314317,0.1439765292038427,0.1590909090909091,0.38571428571428573,79,38,358.8035564256686,POINT (526189.4003697266 6081122.990268184),526189.4003697266,6081122.990268184,9.99608417626942,0.0,259.6660338176798,0.0 -2022-09-26 02:09:53,54.8764672138992,15.408005544081798,168.1818181818182,34.0,6.3413385951509325,10.0,1000.0,2.060366789109858,380.1000082064579,0.15392170711019,0.16818181818181818,0.38571428571428573,83,38,357.6431662206031,POINT (526179.5664294921 6081121.197137665),526179.5664294921,6081121.197137665,9.996084112963123,0.0,259.6661593678965,0.0 -2022-09-26 02:09:54,54.876451614968076,15.407852124810512,177.27272727272728,34.0,6.221470239441834,10.0,1000.0,2.081083990578113,380.13386657671015,0.16681721487585602,0.17727272727272728,0.38571428571428573,88,38,356.2700387644677,POINT (526169.7324853905 6081119.404028704),526169.7324853905,6081119.404028704,9.996084050153474,0.0,259.66628490773127,0.0 -2022-09-26 02:09:55,54.87643601603692,15.407698705598474,186.36363636363637,34.0,6.116227488900516,10.0,1000.0,2.1001108408854874,380.16698659282525,0.17750973266188322,0.18636363636363637,0.38571428571428573,92,38,355.37244361479475,POINT (526159.8985374217 6081117.610941307),526159.8985374217,6081117.610941307,9.996083986671046,0.0,259.66641047394523,0.0 -2022-09-26 02:09:56,54.876420417105734,15.407545286445682,195.45454545454547,34.0,5.996446508938836,10.0,1000.0,2.127230913947377,380.2166271367487,0.19136814814298006,0.19545454545454546,0.38571428571428573,97,38,354.6497350738107,POINT (526150.0645855862 6081115.817875468),526150.0645855862,6081115.817875468,9.996083923446747,0.0,259.66653601867574,0.0 -2022-09-26 02:09:57,54.8764048181745,15.407391867352137,204.54545454545456,34.0,5.916448836336891,10.0,1000.0,2.158330261813368,380.27595035999735,0.20582378440646695,0.20454545454545456,0.38571428571428573,102,38,354.4634724251743,POINT (526140.2306298836 6081114.024831189),526140.2306298836,6081114.024831189,9.996083860614025,0.0,259.6666615637668,0.0 -2022-09-26 02:09:58,54.87638921924323,15.407238448317841,213.63636363636365,34.0,5.8981205698149965,10.0,1000.0,2.186244602772995,380.3305701167867,0.21787458337239005,0.21363636363636365,0.38571428571428573,106,38,354.7104406485864,POINT (526130.3966703143 6081112.2318084715),526130.3966703143,6081112.2318084715,9.996083796984552,0.0,259.6667871242552,0.0 -2022-09-26 02:09:59,54.87637362031191,15.407085029342788,222.72727272727275,34.0,5.947263811399376,10.0,1000.0,2.2251013667433277,380.4078139958993,0.233647548733877,0.22272727272727275,0.38571428571428573,111,38,355.4532889082141,POINT (526120.5627068777 6081110.438807312),526120.5627068777,6081110.438807312,9.996083734529401,0.0,259.6669126642176,0.0 -2022-09-26 02:10:00,54.876358021380554,15.406931610426984,231.81818181818184,34.0,6.0485366761635255,10.0,1000.0,2.2594514163253576,380.4767159296568,0.24693291634984446,0.23181818181818184,0.38571428571428573,115,38,356.3090304700083,POINT (526110.7287395744 6081108.645827714),526110.7287395744,6081108.645827714,9.996083671162983,0.0,259.6670382194576,0.0 -2022-09-26 02:10:01,54.87634242244917,15.406778191570428,240.90909090909093,34.0,6.246109948501006,10.0,1000.0,2.30655112971355,380.57170796336686,0.26453999563173664,0.24090909090909093,0.38571428571428573,120,38,357.5618966029692,POINT (526100.8947684044 6081106.8528696755),526100.8947684044,6081106.8528696755,9.99608360817866,0.0,259.66716376419595,0.0 -2022-09-26 02:10:02,54.876326823517736,15.406624772773114,250.00000000000003,34.0,6.444868346838572,10.0,1000.0,2.3475918207816755,380.65502648233945,0.2795725809802067,0.25000000000000006,0.38571428571428573,124,38,358.6108034614376,POINT (526091.0607933672 6081105.059933197),526091.0607933672,6081105.059933197,9.996083545533395,0.0,259.6672893146663,0.0 -2022-09-26 02:10:03,54.87631122458625,15.406471354035048,259.0909090909091,34.0,6.710689361843603,10.0,1000.0,2.4031096027188332,380.76933146764685,0.2997697241110102,0.25909090909090915,0.38571428571428573,129,38,359.87000124963475,POINT (526081.2268144635 6081103.267018278),526081.2268144635,6081103.267018278,9.996083482248963,0.0,259.66741486442004,0.0 -2022-09-26 02:10:04,54.87629562565474,15.406317935356228,268.1818181818182,34.0,6.927584343600709,10.0,1000.0,2.4509055842377148,380.8704517719359,0.3172305075129864,0.2681818181818182,0.38571428571428573,133,38,0.6734748314149215,POINT (526071.3928316928 6081101.474124919),526071.3928316928,6081101.474124919,9.99608341963768,0.0,259.6675404094025,0.0 -2022-09-26 02:10:05,54.87628002672318,15.406164516736656,277.27272727272725,34.0,7.193647510090831,10.0,1000.0,2.5149175067160203,381.012571037977,0.3409289475826381,0.2772727272727272,0.38571428571428573,138,38,1.247882520638882,POINT (526061.5588450555 6081099.681253118),526061.5588450555,6081099.681253118,9.996083356730807,0.0,259.66766595402754,0.0 -2022-09-26 02:10:06,54.876264427791575,15.40601109817633,286.3636363636364,34.0,7.39033091534568,10.0,1000.0,2.5696234226739603,381.14298068474307,0.36155825720499424,0.2863636363636364,0.38571428571428573,142,38,1.3198368380977286,POINT (526051.7248545515 6081097.888402879),526051.7248545515,6081097.888402879,9.996083293652381,0.0,259.66779150927704,0.0 -2022-09-26 02:10:07,54.87624882885993,15.405857679675249,295.4545454545455,34.0,7.599821239073228,10.0,1000.0,2.642615741374811,381.33475507601383,0.3896353720703227,0.29545454545454547,0.38571428571428573,147,38,0.9605808969687928,POINT (526041.8908601807 6081096.095574198),526041.8908601807,6081096.095574198,9.996083231123063,0.0,259.66791704877323,0.0 -2022-09-26 02:10:08,54.87623322992825,15.405704261233415,304.54545454545456,34.0,7.729691050113955,10.0,1000.0,2.7050168823155296,381.51887379310165,0.41404294472405384,0.30454545454545456,0.38571428571428573,151,38,0.3933313727553127,POINT (526032.0568619432 6081094.302767078),526032.0568619432,6081094.302767078,9.996083168140633,0.0,259.6680426040259,0.0 -2022-09-26 02:10:09,54.876217630996535,15.405550842850829,313.6363636363637,34.0,7.840676246787687,10.0,1000.0,2.788717663976143,381.8001788293302,0.4470676344800039,0.31363636363636366,0.38571428571428573,156,38,359.48958444441547,POINT (526022.2228598393 6081092.509981518),526022.2228598393,6081092.509981518,9.996083105196686,0.0,259.66816814841786,0.0 -2022-09-26 02:10:10,54.87620203206478,15.405397424527488,322.72727272727275,34.0,7.899984777163113,10.0,1000.0,2.879902028762314,382.15492394176863,0.4828750998491289,0.32272727272727275,0.38571428571428573,161,38,358.57005081040677,POINT (526012.3888538688 6081090.717217519),526012.3888538688,6081090.717217519,9.996083042028697,0.0,259.66829370880566,0.0 -2022-09-26 02:10:11,54.87618643313298,15.405244006263391,331.81818181818187,34.0,7.92053761699935,10.0,1000.0,2.959371540518843,382.50455477884253,0.5134327945485698,0.33181818181818185,0.38571428571428573,165,38,357.9671206931921,POINT (526002.5548440315 6081088.924475078),526002.5548440315,6081088.924475078,9.996082979972908,0.0,259.66841924317623,0.0 -2022-09-26 02:10:12,54.87617083420114,15.405090588058542,340.90909090909093,34.0,7.93160101646173,10.0,1000.0,3.068709131734848,383.04010548420365,0.5537837990298442,0.34090909090909094,0.38571428571428573,170,38,357.5325799507422,POINT (525992.7208303278 6081087.131754198),525992.7208303278,6081087.131754198,9.996082916557336,0.0,259.66854480320814,0.0 -2022-09-26 02:10:13,54.876155235269266,15.40493716991294,350.0,34.0,7.94422440496155,10.0,1000.0,3.165845017868854,383.55818378081074,0.5875241396963558,0.35,0.38571428571428573,174,38,357.5165229689976,POINT (525982.8868127575 6081085.339054877),525982.8868127575,6081085.339054877,9.996082854315977,0.0,259.6686703427138,0.0 -2022-09-26 02:10:14,54.876139636337356,15.404783751826582,359.0909090909091,34.0,7.981722161621818,10.0,1000.0,3.30190833068138,384.3287439225876,0.6310524149595267,0.3590909090909091,0.38571428571428573,179,38,357.9372275134997,POINT (525973.0527913208 6081083.546377118),525973.0527913208,6081083.546377118,9.996082790996407,0.0,259.6687959027489,0.0 -2022-09-26 02:10:15,54.8761240374054,15.404630333799467,368.1818181818182,34.0,8.033647457072483,10.0,1000.0,3.4245105061839434,385.0473890907635,0.6665264778071041,0.36818181818181817,0.38571428571428573,183,38,358.57067899473304,POINT (525963.2187660174 6081081.753720916),525963.2187660174,6081081.753720916,9.996082729132583,0.0,259.66892143712573,0.0 -2022-09-26 02:10:16,54.8761084384734,15.404476915831602,377.2727272727273,34.0,8.112203948999339,10.0,1000.0,3.5976494410273046,386.07070258908516,0.7110095300838228,0.3772727272727273,0.38571428571428573,188,38,359.530809386746,POINT (525953.3847368477 6081079.961086275),525953.3847368477,6081079.961086275,9.996082665961504,0.0,259.6690469917927,0.0 -2022-09-26 02:10:17,54.876092839541364,15.404323497922977,386.3636363636364,34.0,8.156144668047155,10.0,1000.0,3.753821378319577,386.9802145251844,0.7461517463917536,0.38636363636363635,0.38571428571428573,192,38,0.1845500225420551,POINT (525943.5507038111 6081078.168473193),525943.5507038111,6081078.168473193,9.996082603974154,0.0,259.6691725367956,0.0 -2022-09-26 02:10:18,54.87607724060928,15.404170080073602,395.4545454545455,34.0,8.150246663508101,10.0,1000.0,3.9727541716941213,388.20775773758305,0.7887220715339669,0.3954545454545455,0.38571428571428573,197,38,0.5531521657181884,POINT (525933.7166669087 6081076.375881671),525933.7166669087,6081076.375881671,9.996082540889516,0.0,259.6692980806034,0.0 -2022-09-26 02:10:19,54.87606164167716,15.404016662283473,404.54545454545456,34.0,8.090562703741899,10.0,1000.0,4.167260670958483,389.23738366929774,0.8210745988729965,0.40454545454545454,0.38571428571428573,201,38,0.3728466600763909,POINT (525923.8826261399 6081074.58331171),525923.8826261399,6081074.58331171,9.99608247809149,0.0,259.6694236355144,0.0 -2022-09-26 02:10:20,54.876046042745,15.403863244552586,413.6363636363637,34.0,7.96008406277228,10.0,1000.0,4.433560528681983,390.5409171598112,0.8585497323555585,0.4136363636363637,0.38571428571428573,206,38,359.5295779240799,POINT (525914.0485815044 6081072.790763306),525914.0485815044,6081072.790763306,9.996082416186075,0.0,259.6695491750311,0.0 -2022-09-26 02:10:21,54.8760304438128,15.403709826880947,422.72727272727275,34.0,7.829789046167778,10.0,1000.0,4.6629389399052865,391.5597947016184,0.8855512076828941,0.42272727272727273,0.38571428571428573,210,38,358.4218417418192,POINT (525904.2145330027 6081070.998236464),525904.2145330027,6081070.998236464,9.99608235325499,0.0,259.6696747297059,0.0 -2022-09-26 02:10:22,54.87601484488055,15.403556409268553,431.81818181818187,34.0,7.664584822683368,10.0,1000.0,4.964935103590586,392.7501116586428,0.9148081590287247,0.4318181818181819,0.38571428571428573,215,38,356.6566779153157,POINT (525894.3804806349 6081069.20573118),525894.3804806349,6081069.20573118,9.996082291039926,0.0,259.6698002633757,0.0 -2022-09-26 02:10:23,54.87599924594827,15.403402991715405,440.90909090909093,34.0,7.528630047546096,10.0,1000.0,5.275496265781041,393.7900502672462,0.9382938317205887,0.4409090909090909,0.38571428571428573,220,38,354.7062292307571,POINT (525884.5464244006 6081067.413247457),525884.5464244006,6081067.413247457,9.996082228266884,0.0,259.66992582354465,0.0 -2022-09-26 02:10:24,54.87598364701595,15.403249574221501,450.00000000000006,34.0,7.459193418921018,10.0,1000.0,5.522341867132092,394.47693945168953,0.9524414179761194,0.45000000000000007,0.38571428571428573,224,38,353.2006132263499,POINT (525874.7123643004 6081065.620785291),525874.7123643004,6081065.620785291,9.996082166033272,0.0,259.6700513570979,0.0 -2022-09-26 02:10:25,54.875968048083585,15.403096156786843,459.0909090909091,34.0,7.435187711053946,10.0,1000.0,5.817352634571629,395.1194275047642,0.9638395932577704,0.4590909090909091,0.38571428571428573,229,38,351.6141264460094,POINT (525864.8783003336 6081063.828344687),525864.8783003336,6081063.828344687,9.996082103637761,0.0,259.67017691213806,0.0 -2022-09-26 02:10:26,54.875952449151185,15.402942739411431,468.18181818181824,34.0,7.468881082992653,10.0,1000.0,6.033168780526484,395.44520183770976,0.9676712679046653,0.46818181818181825,0.38571428571428573,233,38,350.7223920295256,POINT (525855.0442325011 6081062.035925643),525855.0442325011,6081062.035925643,9.996082040770077,0.0,259.67030246121016,0.0 -2022-09-26 02:10:27,54.87593685021875,15.402789322095263,477.2727272727273,34.0,7.570963770222428,10.0,1000.0,6.264968369013802,395.61275404398805,0.9656640410924353,0.4772727272727273,0.38571428571428573,238,38,350.202110886319,POINT (525845.2101608021 6081060.243528158),525845.2101608021,6081060.243528158,9.996081978523032,0.0,259.67042801088206,0.0 -2022-09-26 02:10:28,54.87592125128628,15.402635904838341,486.3636363636364,34.0,7.690107350871474,10.0,1000.0,6.411227467308108,395.56403318255167,0.9586113190549492,0.4863636363636364,0.38571428571428573,242,38,350.2810094482723,POINT (525835.3760852371 6081058.451152235),525835.3760852371,6081058.451152235,9.996081915813404,0.0,259.67055356544824,0.0 -2022-09-26 02:10:29,54.875905652353765,15.402482487640665,495.4545454545455,34.0,7.867232621683987,10.0,1000.0,6.535191639838726,395.3016508302486,0.9431612054811294,0.4954545454545455,0.38571428571428573,247,38,350.898133181637,POINT (525825.542005806 6081056.65879787),525825.542005806,6081056.65879787,9.996081853767283,0.0,259.6706791043807,0.0 -2022-09-26 02:10:30,54.8758900534212,15.402329070502232,504.54545454545456,34.0,8.017809572404428,10.0,1000.0,6.582096250831538,394.95940555730425,0.9257650275872243,0.5045454545454545,0.38571428571428573,251,38,351.6159859776963,POINT (525815.7079225088 6081054.866465064),525815.7079225088,6081054.866465064,9.99608179165462,0.0,259.670804643195,0.0 -2022-09-26 02:10:31,54.87587445448859,15.402175653423043,513.6363636363637,34.0,8.20399700139781,10.0,1000.0,6.5720869737439696,394.41255276323164,0.8982737677726,0.5136363636363638,0.38571428571428573,256,38,352.49128842455883,POINT (525805.8738353457 6081053.074153815),525805.8738353457,6081053.074153815,9.996081729475417,0.0,259.6709301818913,0.0 -2022-09-26 02:10:32,54.875858855555954,15.402022236403102,522.7272727272727,34.0,8.340669157536565,10.0,1000.0,6.509726549118471,393.9164469771962,0.8722149678040366,0.5227272727272727,0.38571428571428573,260,38,353.04448543771946,POINT (525796.0397443165 6081051.28186413),525796.0397443165,6081051.28186413,9.996081666738334,0.0,259.67105574708677,0.0 -2022-09-26 02:10:33,54.87584325662328,15.4018688194424,531.8181818181819,34.0,8.477022897195718,10.0,1000.0,6.36865164098914,393.2704984084408,0.8354084918797398,0.5318181818181819,0.38571428571428573,265,38,353.38424852402096,POINT (525786.2056494211 6081049.489596003),525786.2056494211,6081049.489596003,9.996081604884177,0.0,259.67118128602544,0.0 -2022-09-26 02:10:34,54.87582765769056,15.401715402540946,540.909090909091,34.0,8.544791489136026,10.0,1000.0,6.211596852864464,392.76410909816127,0.8032773751475437,0.540909090909091,0.38571428571428573,269,38,353.26892020045153,POINT (525776.3715506598 6081047.697349434),525776.3715506598,6081047.697349434,9.996081542848952,0.0,259.67130682472634,0.0 -2022-09-26 02:10:35,54.87581205875779,15.401561985698736,550.0,34.0,8.564714040541485,10.0,1000.0,5.971409885873062,392.17719231808576,0.7607417979581107,0.55,0.38571428571428573,274,38,352.5538672523752,POINT (525766.5374480325 6081045.905124426),525766.5374480325,6081045.905124426,9.996081480360777,0.0,259.6714323791839,0.0 -2022-09-26 02:10:36,54.87579645982498,15.401408568915771,559.0909090909091,34.0,8.525185088796485,10.0,1000.0,5.754009857000087,391.761515699877,0.7255413158511563,0.5590909090909091,0.38571428571428573,278,38,351.514628471238,POINT (525756.7033415395 6081044.112920976),525756.7033415395,6081044.112920976,9.996081418307005,0.0,259.6715579177683,0.0 -2022-09-26 02:10:37,54.87578086089213,15.401255152192052,568.1818181818182,34.0,8.411225970302649,10.0,1000.0,5.464625553784498,391.3215774213276,0.6809900685902911,0.5681818181818182,0.38571428571428573,283,38,349.69703004828295,POINT (525746.8692311805 6081042.320739087),525746.8692311805,6081042.320739087,9.9960813560818,0.0,259.67168346697736,0.0 -2022-09-26 02:10:38,54.87576526195925,15.401101735527575,577.2727272727274,34.0,8.241928458923184,10.0,1000.0,5.170513376882466,390.97247091028214,0.636717717403947,0.5772727272727274,0.38571428571428573,288,38,347.4629152645984,POINT (525737.0351169556 6081040.528578757),525737.0351169556,6081040.528578757,9.996081293904593,0.0,259.67180901618786,0.0 -2022-09-26 02:10:39,54.875749663026326,15.400948318922342,586.3636363636364,34.0,8.08449856886566,10.0,1000.0,4.941259245777439,390.7538259582251,0.6020307317157508,0.5863636363636364,0.38571428571428573,292,38,345.5364270615022,POINT (525727.200998865 6081038.736439986),525727.200998865,6081038.736439986,9.996081231994797,0.0,259.67193455477695,0.0 -2022-09-26 02:10:40,54.875734064093365,15.400794902376354,595.4545454545455,34.0,7.8867925181147465,10.0,1000.0,4.671520202013458,390.54415537529087,0.5600845997287723,0.5954545454545455,0.38571428571428573,297,38,343.18495509644475,POINT (525717.3668769085 6081036.944322774),525717.3668769085,6081036.944322774,9.996081169966018,0.0,259.67206009861934,0.0 -2022-09-26 02:10:41,54.875718465160354,15.400641485889611,604.5454545454546,34.0,7.746789889212514,10.0,1000.0,4.47395458092692,390.41560397145213,0.5279136597913516,0.6045454545454546,0.38571428571428573,301,38,341.51118701597755,POINT (525707.5327510863 6081035.152227122),525707.5327510863,6081035.152227122,9.996081107703738,0.0,259.6721856475953,0.0 -2022-09-26 02:10:42,54.87570286622731,15.400488069462114,613.6363636363637,34.0,7.611967632135219,10.0,1000.0,4.253176519179407,390.28660667456484,0.48963813380829724,0.6136363636363638,0.38571428571428573,306,38,339.83140829076694,POINT (525697.6986213983 6081033.36015303),525697.6986213983,6081033.36015303,9.996081045770948,0.0,259.67231119144077,0.0 -2022-09-26 02:10:43,54.87568726729422,15.400334653093859,622.7272727272727,34.0,7.5373142592098645,10.0,1000.0,4.097904652588147,390.19604929670277,0.46063678889496135,0.6227272727272728,0.38571428571428573,310,38,338.83738269600775,POINT (525687.8644878445 6081031.568100497),525687.8644878445,6081031.568100497,9.996080983719187,0.0,259.67243674053947,0.0 -2022-09-26 02:10:44,54.87567166836109,15.400181236784851,631.8181818181819,34.0,7.461265769021097,10.0,1000.0,3.9286358145051534,390.0830303534396,0.42641977912463847,0.6318181818181818,0.38571428571428573,315,38,337.8700046619217,POINT (525678.0303504255 6081029.776069522),525678.0303504255,6081029.776069522,9.99608092164366,0.0,259.67256227328653,0.0 -2022-09-26 02:10:45,54.87565606942792,15.400027820535085,640.909090909091,34.0,7.383321221966956,10.0,1000.0,3.810333710436561,389.98286879718046,0.4006441004611857,0.640909090909091,0.38571428571428573,319,38,337.21035853999194,POINT (525668.1962091404 6081027.984060108),525668.1962091404,6081027.984060108,9.996080859864517,0.0,259.67268782799897,0.0 -2022-09-26 02:10:46,54.87564047049471,15.399874404344564,650.0,34.0,7.244186089187178,10.0,1000.0,3.679037474938636,389.8349286601433,0.3703578206786372,0.65,0.38571428571428573,324,38,336.5492558790736,POINT (525658.3620639896 6081026.192072253),525658.3620639896,6081026.192072253,9.99608079789464,0.0,259.67281337161137,0.0 -2022-09-26 02:10:47,54.87562487156146,15.399720988213286,659.0909090909091,34.0,7.101930050142188,10.0,1000.0,3.583374263603842,389.69267183220256,0.3476234938986878,0.6590909090909092,0.38571428571428573,328,38,336.1617362554805,POINT (525648.5279149736 6081024.400105957),525648.5279149736,6081024.400105957,9.996080735743698,0.0,259.67293891498616,0.0 -2022-09-26 02:10:48,54.875609272628175,15.399567572141251,668.1818181818182,34.0,6.9027523890187705,10.0,1000.0,3.4704959904465014,389.4800120811154,0.32100789116885914,0.6681818181818182,0.38571428571428573,333,38,335.85270461980616,POINT (525638.6937620917 6081022.608161221),525638.6937620917,6081022.608161221,9.996080673931912,0.0,259.67306446409265,0.0 -2022-09-26 02:10:49,54.875593673694844,15.399414156128461,677.2727272727274,34.0,6.7439700902520805,10.0,1000.0,3.3823647819101215,389.2801609835894,0.30111201601047594,0.6772727272727274,0.38571428571428573,337,38,335.7349195974012,POINT (525628.8596053442 6081020.816238043),525628.8596053442,6081020.816238043,9.996080612439917,0.0,259.67318999720635,0.0 -2022-09-26 02:10:50,54.87557807476148,15.399260740174917,686.3636363636364,34.0,6.570007596527925,10.0,1000.0,3.2717060713716357,388.99280259092404,0.2779275807773856,0.6863636363636364,0.38571428571428573,342,38,335.7243207164771,POINT (525619.0254447313 6081019.0243364265),525619.0254447313,6081019.0243364265,9.996080550046633,0.0,259.6733155564605,0.0 -2022-09-26 02:10:51,54.87556247582806,15.399107324280614,695.4545454545455,34.0,6.444311527032287,10.0,1000.0,3.158411650471001,388.6653083145576,0.25654062241407444,0.6954545454545455,0.38571428571428573,347,38,335.82864451439775,POINT (525609.1912802529 6081017.232456368),525609.1912802529,6081017.232456368,9.99608048848367,0.0,259.673441094829,0.0 -2022-09-26 02:10:52,54.87554687689462,15.398953908445554,704.5454545454546,34.0,6.387486802518189,10.0,1000.0,3.065392295234492,388.37662785765474,0.24065986002567222,0.7045454545454546,0.38571428571428573,351,38,335.96484889748956,POINT (525599.3571119088 6081015.440597868),525599.3571119088,6081015.440597868,9.996080427135642,0.0,259.67356662794737,0.0 -2022-09-26 02:10:53,54.87553127796112,15.398800492669737,713.6363636363637,34.0,6.372759379590724,10.0,1000.0,2.946723735947856,387.9862467965939,0.22224392221794348,0.7136363636363637,0.38571428571428573,356,38,336.16276662536666,POINT (525589.5229396995 6081013.648760929),525589.5229396995,6081013.648760929,9.996080364771823,0.0,259.67369218708654,0.0 -2022-09-26 02:10:54,54.875515679027586,15.398647076953164,722.7272727272727,34.0,6.400661221433754,10.0,1000.0,2.8509668607465377,387.65368350515047,0.20857048688000898,0.7227272727272728,0.38571428571428573,360,38,336.3171394643924,POINT (525579.6887636245 6081011.856945546),525579.6887636245,6081011.856945546,9.996080303686714,0.0,259.6738177149563,0.0 -2022-09-26 02:10:55,54.87550008009402,15.398493661295834,731.8181818181819,34.0,6.470995677553455,10.0,1000.0,2.7322963721833124,387.2176374562762,0.19266909543034857,0.7318181818181819,0.38571428571428573,365,38,336.4771475134761,POINT (525569.8545836844 6081010.065151726),525569.8545836844,6081010.065151726,9.996080241304362,0.0,259.67394327397903,0.0 -2022-09-26 02:10:56,54.875484481160406,15.398340245697748,740.909090909091,34.0,6.542482537031068,10.0,1000.0,2.639909637969715,386.8564079532934,0.18079540902011848,0.740909090909091,0.38571428571428573,369,38,336.5665793763542,POINT (525560.0203998787 6081008.273379464),525560.0203998787,6081008.273379464,9.996080179866823,0.0,259.67406881223565,0.0 -2022-09-26 02:10:57,54.875468882226755,15.398186830158908,750.0000000000001,34.0,6.634782003781246,10.0,1000.0,2.5299186581217072,386.3946658195202,0.1668726737776776,0.7500000000000001,0.38571428571428573,374,38,336.62977416611454,POINT (525550.1862122079 6081006.481628761),525550.1862122079,6081006.481628761,9.996080118081276,0.0,259.67419435550636,0.0 -2022-09-26 02:10:58,54.87545328329307,15.398033414679308,759.0909090909091,34.0,6.70246855313553,10.0,1000.0,2.4478416454646608,386.02097204283183,0.15637319780342893,0.7590909090909091,0.38571428571428573,378,38,336.6533896535417,POINT (525540.3520206716 6081004.689899617),525540.3520206716,6081004.689899617,9.996080056572783,0.0,259.6743198990178,0.0 -2022-09-26 02:10:59,54.87543768435933,15.39787999925895,768.1818181818182,34.0,6.748450284060731,10.0,1000.0,2.3542566329586956,385.553472102261,0.1439338059773014,0.7681818181818183,0.38571428571428573,383,38,336.6384986409431,POINT (525530.51782527 6081002.898192033),525530.51782527,6081002.898192033,9.996079994830819,0.0,259.6744454476629,0.0 -2022-09-26 02:11:00,54.875422085425555,15.397726583897839,777.2727272727274,34.0,6.732939893259079,10.0,1000.0,2.2874068183195733,385.18264654315675,0.13446195208152917,0.7772727272727273,0.38571428571428573,387,38,336.56930150843493,POINT (525520.6836260032 6081001.106506007),525520.6836260032,6081001.106506007,9.99607993340858,0.0,259.6745709803152,0.0 -2022-09-26 02:11:01,54.87540648649174,15.397573168595969,786.3636363636364,34.0,6.639087878726148,10.0,1000.0,2.214401704545365,384.72738016973733,0.12315335942127345,0.7863636363636364,0.38571428571428573,392,38,336.3858357098387,POINT (525510.8494228713 6080999.31484154),525510.8494228713,6080999.31484154,9.996079871815002,0.0,259.67469652359205,0.0 -2022-09-26 02:11:02,54.87539088755788,15.397419753353342,795.4545454545455,34.0,6.509552137544336,10.0,1000.0,2.1644514979035385,384.37264050538823,0.11449786789896822,0.7954545454545455,0.38571428571428573,396,38,336.14621521366774,POINT (525501.0152158738 6080997.523198632),525501.0152158738,6080997.523198632,9.996079810498475,0.0,259.6748220671097,0.0 -2022-09-26 02:11:03,54.875375288624,15.397266338169958,804.5454545454546,34.0,6.298426531238271,10.0,1000.0,2.112145749846779,383.94441994613715,0.10414304602252006,0.8045454545454546,0.38571428571428573,401,38,335.7152586271648,POINT (525491.1810050113 6080995.731577285),525491.1810050113,6080995.731577285,9.996079748552503,0.0,259.67494762077354,0.0 -2022-09-26 02:11:04,54.87535968969007,15.397112923045817,813.6363636363637,34.0,6.06294583993178,10.0,1000.0,2.0702129356435033,383.5362254399116,0.09429634076950597,0.8136363636363637,0.38571428571428573,406,38,335.12793949004754,POINT (525481.3467902837 6080993.939977498),525481.3467902837,6080993.939977498,9.996079686821455,0.0,259.6750731691872,0.0 -2022-09-26 02:11:05,54.87534409075611,15.396959507980922,822.7272727272727,34.0,5.882056898915948,10.0,1000.0,2.043315396763852,383.2259251496945,0.08678852713475625,0.8227272727272728,0.38571428571428573,410,38,334.54267186826314,POINT (525471.5125716911 6080992.148399268),525471.5125716911,6080992.148399268,9.99607962552463,0.0,259.6751987017276,0.0 -2022-09-26 02:11:06,54.87532849182209,15.396806092975268,831.8181818181819,34.0,5.696659407090256,10.0,1000.0,2.016853509120491,382.86011721999455,0.07787792684584459,0.8318181818181819,0.38571428571428573,415,38,333.66966169460306,POINT (525461.6783492335 6080990.356842598),525461.6783492335,6080990.356842598,9.996079563941953,0.0,259.67532424477304,0.0 -2022-09-26 02:11:07,54.87531289288805,15.396652678028858,840.909090909091,34.0,5.601300467689138,10.0,1000.0,2.000538492334154,382.58605132785755,0.07114007307918613,0.8409090909090909,0.38571428571428573,419,38,332.86459136235464,POINT (525451.8441229106 6080988.565307487),525451.8441229106,6080988.565307487,9.996079502636329,0.0,259.67544978805915,0.0 -2022-09-26 02:11:08,54.87529729395396,15.396499263141687,850.0000000000001,34.0,5.567927022505831,10.0,1000.0,1.9850853748146349,382.26746909338254,0.06322075756310817,0.8500000000000001,0.38571428571428573,424,38,331.7392503374103,POINT (525442.0098927225 6080986.773793937),525442.0098927225,6080986.773793937,9.996079441159402,0.0,259.67557534196993,0.0 -2022-09-26 02:11:09,54.87528169501982,15.39634584831376,859.0909090909091,34.0,5.615888095713552,10.0,1000.0,1.9759104226812945,382.03205393353954,0.05729643489487664,0.8590909090909091,0.38571428571428573,428,38,330.7583160671136,POINT (525432.1756586696 6080984.982301941),525432.1756586696,6080984.982301941,9.9960793803262,0.0,259.6757008585221,0.0 -2022-09-26 02:11:10,54.875266096085646,15.396192433545078,868.1818181818182,34.0,5.7617931970540575,10.0,1000.0,1.9675246366096002,381.7620416055214,0.05041197858488578,0.8681818181818183,0.38571428571428573,433,38,329.45573481775546,POINT (525422.3414207518 6080983.190831508),525422.3414207518,6080983.190831508,9.99607931832023,0.0,259.67582641720935,0.0 -2022-09-26 02:11:11,54.875250497151434,15.396039018835635,877.2727272727274,34.0,5.927580512850728,10.0,1000.0,1.9627169301447214,381.56513640865563,0.04532219805032756,0.8772727272727273,0.38571428571428573,437,38,328.3737486582098,POINT (525412.5071789687 6080981.399382633),525412.5071789687,6080981.399382633,9.996079257206574,0.0,259.6759519605016,0.0 -2022-09-26 02:11:12,54.87523489821719,15.395885604185438,886.3636363636365,34.0,6.148848565026476,10.0,1000.0,1.9584616755026785,381.3421835942202,0.039477585921348125,0.8863636363636365,0.38571428571428573,442,38,327.00310027017565,POINT (525402.6729333211 6080979.607955318),525402.6729333211,6080979.607955318,9.99607919556826,0.0,259.6760775031976,0.0 -2022-09-26 02:11:13,54.8752192992829,15.39573218959448,895.4545454545455,34.0,6.301009857981514,10.0,1000.0,1.956095037004415,381.1816583119689,0.035208202720289156,0.8954545454545455,0.38571428571428573,446,38,325.9178375897386,POINT (525392.8386838082 6080977.816549562),525392.8386838082,6080977.816549562,9.99607913455059,0.0,259.67620304649296,0.0 -2022-09-26 02:11:14,54.875203700348564,15.395578775062766,904.5454545454546,34.0,6.431160894960455,10.0,1000.0,1.9540540000975495,381.0021501896252,0.030363509836066914,0.9045454545454547,0.38571428571428573,451,38,324.61117360348146,POINT (525383.0044304305 6080976.025165363),525383.0044304305,6080976.025165363,9.996079073571122,0.0,259.6763285789276,0.0 -2022-09-26 02:11:15,54.875188101414196,15.395425360590295,913.6363636363637,34.0,6.47919159817503,10.0,1000.0,1.952943498473374,380.8744979595906,0.026866138485496693,0.9136363636363637,0.38571428571428573,455,38,323.6324495088761,POINT (525373.1701731881 6080974.233802725),525373.1701731881,6080974.233802725,9.99607901190988,0.0,259.6764541268799,0.0 -2022-09-26 02:11:16,54.875172502479785,15.395271946177065,922.7272727272727,34.0,6.472784221660842,10.0,1000.0,1.9519998314870288,380.73347222346723,0.022943053473968206,0.9227272727272727,0.38571428571428573,460,38,322.52665507111897,POINT (525363.3359120806 6080972.442461645),525363.3359120806,6080972.442461645,9.996078950921653,0.0,259.67657967006033,0.0 -2022-09-26 02:11:17,54.87515690354533,15.395118531823078,931.8181818181819,34.0,6.4254236404010765,10.0,1000.0,1.9514899603254199,380.6343926479963,0.0201431974921208,0.9318181818181819,0.38571428571428573,464,38,321.759744399973,POINT (525353.5016471087 6080970.651142125),525353.5016471087,6080970.651142125,9.996078889294234,0.0,259.6767052125248,0.0 -2022-09-26 02:11:18,54.87514130461083,15.394965117528333,940.909090909091,34.0,6.335562891487001,10.0,1000.0,1.951054938224697,380.5262237460307,0.017037250564657082,0.940909090909091,0.38571428571428573,469,38,320.97535710585163,POINT (525343.6673782716 6080968.859844163),525343.6673782716,6080968.859844163,9.996078828683414,0.0,259.6768307505761,0.0 -2022-09-26 02:11:19,54.87512570567629,15.394811703292833,950.0,34.0,6.240720277622478,10.0,1000.0,1.9507673357167592,380.4338213259186,0.01433482548855187,0.95,0.38571428571428573,474,38,320.4076924818631,POINT (525333.8331055702 6080967.0685677575),525333.8331055702,6080967.0685677575,9.996078767538119,0.0,259.67695627716876,0.0 -2022-09-26 02:11:20,54.87512570567629,15.394811703292833,950.0,45.0,6.784203628525608,10.0,1000.0,1.968110916593365,380.97922701961954,0.02025965322887377,0.95,0.4642857142857143,474,45,336.53671525364604,POINT (525333.8331055702 6080967.0685677575),525333.8331055702,6080967.0685677575,0.0,11.0,0.0,90.0 -2022-09-26 02:11:21,54.87514130461083,15.394965117528333,940.909090909091,45.0,6.799206809974846,10.0,1000.0,1.9717003283233692,381.18818054941477,0.024028687729764974,0.940909090909091,0.4642857142857143,469,45,336.56267374869253,POINT (525343.6673782716 6080968.859844163),525343.6673782716,6080968.859844163,9.996078767538119,0.0,79.67695627716877,0.0 -2022-09-26 02:11:22,54.87515690354533,15.395118531823078,931.8181818181819,45.0,6.811831144540934,10.0,1000.0,1.9758550922174187,381.4328391061276,0.028326899067786387,0.9318181818181819,0.4642857142857143,464,45,336.2101562605793,POINT (525353.5016471087 6080970.651142125),525353.5016471087,6080970.651142125,9.996078828683414,0.0,79.67683075057609,0.0 -2022-09-26 02:11:23,54.875172502479785,15.395271946177065,922.7272727272727,45.0,6.803827393758522,10.0,1000.0,1.9796333034398654,381.65697777777615,0.0321716191338346,0.9227272727272727,0.4642857142857143,460,45,335.70833107314047,POINT (525363.3359120806 6080972.442461645),525363.3359120806,6080972.442461645,9.996078889294234,0.0,79.6767052125248,0.0 -2022-09-26 02:11:24,54.875188101414196,15.395425360590295,913.6363636363637,45.0,6.753701830133449,10.0,1000.0,1.9849938577773643,381.97605768138624,0.037512964226750635,0.9136363636363637,0.4642857142857143,455,45,334.93903496195367,POINT (525373.1701731881 6080974.233802725),525373.1701731881,6080974.233802725,9.996078950921653,0.0,79.67657967006032,0.0 -2022-09-26 02:11:25,54.875203700348564,15.395578775062766,904.5454545454546,45.0,6.672670703302967,10.0,1000.0,1.989854982922494,382.2649202149249,0.04223164943197173,0.9045454545454547,0.4642857142857143,451,45,334.3336958823775,POINT (525383.0044304305 6080976.025165363),525383.0044304305,6080976.025165363,9.99607901190988,0.0,79.67645412687992,0.0 -2022-09-26 02:11:26,54.8752192992829,15.39573218959448,895.4545454545455,45.0,6.516669706626736,10.0,1000.0,1.9967511916053469,382.6711792241756,0.048704679275284074,0.8954545454545455,0.4642857142857143,446,45,333.7443685847927,POINT (525392.8386838082 6080977.816549562),525392.8386838082,6080977.816549562,9.996079073571122,0.0,79.67632857892761,0.0 -2022-09-26 02:11:27,54.87523489821719,15.395885604185438,886.3636363636365,45.0,6.353615612089349,10.0,1000.0,2.0030209436666713,383.03451868603395,0.05435114624865952,0.8863636363636365,0.4642857142857143,442,45,333.4680800193778,POINT (525402.6729333211 6080979.607955318),525402.6729333211,6080979.607955318,9.99607913455059,0.0,79.67620304649294,0.0 -2022-09-26 02:11:28,54.875250497151434,15.396039018835635,877.2727272727274,45.0,6.123143074563398,10.0,1000.0,2.0119643428074405,383.5392115775217,0.06199815417123381,0.8772727272727273,0.4642857142857143,437,45,333.2984481126196,POINT (525412.5071789687 6080981.399382633),525412.5071789687,6080981.399382633,9.99607919556826,0.0,79.67607750319758,0.0 -2022-09-26 02:11:29,54.875266096085646,15.396192433545078,868.1818181818182,45.0,5.946879834689897,10.0,1000.0,2.0201589539540707,383.9849821149991,0.06858390641758265,0.8681818181818183,0.4642857142857143,433,45,333.18342119760916,POINT (525422.3414207518 6080983.190831508),525422.3414207518,6080983.190831508,9.996079257206574,0.0,79.67595196050164,0.0 -2022-09-26 02:11:30,54.87528169501982,15.39634584831376,859.0909090909091,45.0,5.788418326472156,10.0,1000.0,2.0319630450045674,384.59630845820845,0.07738902345402736,0.8590909090909091,0.4642857142857143,428,45,333.1766762874858,POINT (525432.1756586696 6080984.982301941),525432.1756586696,6080984.982301941,9.99607931832023,0.0,79.67582641720934,0.0 -2022-09-26 02:11:31,54.87529729395396,15.396499263141687,850.0000000000001,45.0,5.739507597381877,10.0,1000.0,2.0428935757821383,385.1293423349309,0.08487628311352288,0.8500000000000001,0.4642857142857143,424,45,333.35769115252106,POINT (525442.0098927225 6080986.773793937),525442.0098927225,6080986.773793937,9.9960793803262,0.0,79.67570085852209,0.0 -2022-09-26 02:11:32,54.87531289288805,15.396652678028858,840.909090909091,45.0,5.795460108961013,10.0,1000.0,2.05880313469157,385.85073003172846,0.09476124793277989,0.8409090909090909,0.4642857142857143,419,45,333.83653733885467,POINT (525451.8441229106 6080988.565307487),525451.8441229106,6080988.565307487,9.996079441159402,0.0,79.67557534196995,0.0 -2022-09-26 02:11:33,54.87532849182209,15.396806092975268,831.8181818181819,45.0,5.935147022142398,10.0,1000.0,2.0736662872300955,386.4713491772234,0.1030641900252876,0.8318181818181819,0.4642857142857143,415,45,334.3874024137232,POINT (525461.6783492335 6080990.356842598),525461.6783492335,6080990.356842598,9.996079502636329,0.0,79.67544978805917,0.0 -2022-09-26 02:11:34,54.87534409075611,15.396959507980922,822.7272727272727,45.0,6.2135022710204835,10.0,1000.0,2.095435197184767,387.29975431380336,0.11389708809177977,0.8227272727272728,0.4642857142857143,410,45,335.1924570644245,POINT (525471.5125716911 6080992.148399268),525471.5125716911,6080992.148399268,9.996079563941953,0.0,79.67532424477302,0.0 -2022-09-26 02:11:35,54.87535968969007,15.397112923045817,813.6363636363637,45.0,6.497642132195418,10.0,1000.0,2.115830490080301,388.0024837231553,0.1228955783016072,0.8136363636363637,0.4642857142857143,406,45,335.83848975861906,POINT (525481.3467902837 6080993.939977498),525481.3467902837,6080993.939977498,9.99607962552463,0.0,79.6751987017276,0.0 -2022-09-26 02:11:36,54.875375288624,15.397266338169958,804.5454545454546,45.0,6.89030635507661,10.0,1000.0,2.1456652163980774,388.9269396254897,0.13451749085161596,0.8045454545454546,0.4642857142857143,401,45,336.51441978350374,POINT (525491.1810050113 6080995.731577285),525491.1810050113,6080995.731577285,9.996079686821455,0.0,79.6750731691872,0.0 -2022-09-26 02:11:37,54.87539088755788,15.397419753353342,795.4545454545455,45.0,7.274621255705391,10.0,1000.0,2.181024411068645,389.8967733399324,0.1465137598695488,0.7954545454545455,0.4642857142857143,396,45,336.9029891483059,POINT (525501.0152158738 6080997.523198632),525501.0152158738,6080997.523198632,9.996079748552503,0.0,79.67494762077354,0.0 -2022-09-26 02:11:38,54.87540648649174,15.397573168595969,786.3636363636364,45.0,7.54061326415077,10.0,1000.0,2.2137836068895558,390.70019770482446,0.15635751874438422,0.7863636363636364,0.4642857142857143,392,45,336.9245992425973,POINT (525510.8494228713 6080999.31484154),525510.8494228713,6080999.31484154,9.996079810498475,0.0,79.67482206710969,0.0 -2022-09-26 02:11:39,54.875422085425555,15.397726583897839,777.2727272727274,45.0,7.785372493752013,10.0,1000.0,2.260893727114889,391.73129631227584,0.16895541109506487,0.7772727272727273,0.4642857142857143,387,45,336.5311483044401,POINT (525520.6836260032 6081001.106506007),525520.6836260032,6081001.106506007,9.996079871815002,0.0,79.67469652359208,0.0 -2022-09-26 02:11:40,54.87543768435933,15.39787999925895,768.1818181818182,45.0,7.896477229122058,10.0,1000.0,2.3038825308976105,392.5711320830375,0.17926914229641286,0.7681818181818183,0.4642857142857143,383,45,335.87980879023195,POINT (525530.51782527 6081002.898192033),525530.51782527,6081002.898192033,9.99607993340858,0.0,79.6745709803152,0.0 -2022-09-26 02:11:41,54.87545328329307,15.398033414679308,759.0909090909091,45.0,7.935876191598874,10.0,1000.0,2.364657754540794,393.6298458511248,0.19247614167125718,0.7590909090909091,0.4642857142857143,378,45,334.7202847600305,POINT (525540.3520206716 6081004.689899617),525540.3520206716,6081004.689899617,9.996079994830819,0.0,79.67444544766292,0.0 -2022-09-26 02:11:42,54.875468882226755,15.398186830158908,750.0000000000001,45.0,7.9192795794225495,10.0,1000.0,2.4191522968949557,394.4760112386521,0.20332453380897259,0.7500000000000001,0.4642857142857143,374,45,333.6401029008406,POINT (525550.1862122079 6081006.481628761),525550.1862122079,6081006.481628761,9.996080056572783,0.0,79.6743198990178,0.0 -2022-09-26 02:11:43,54.875484481160406,15.398340245697748,740.909090909091,45.0,7.886117197541823,10.0,1000.0,2.4948796621911775,395.5212657917122,0.21730131449293957,0.740909090909091,0.4642857142857143,369,45,332.31839016407037,POINT (525560.0203998787 6081008.273379464),525560.0203998787,6081008.273379464,9.996080118081276,0.0,79.67419435550636,0.0 -2022-09-26 02:11:44,54.87550008009402,15.398493661295834,731.8181818181819,45.0,7.848852702236141,10.0,1000.0,2.561740617260054,396.33857860690773,0.22887695231839988,0.7318181818181819,0.4642857142857143,365,45,331.39468985076365,POINT (525569.8545836844 6081010.065151726),525569.8545836844,6081010.065151726,9.996080179866823,0.0,79.67406881223566,0.0 -2022-09-26 02:11:45,54.875515679027586,15.398647076953164,722.7272727272727,45.0,7.781220010755513,10.0,1000.0,2.653502903849977,397.32422868902785,0.2439378289864564,0.7227272727272728,0.4642857142857143,360,45,330.4883333285043,POINT (525579.6887636245 6081011.856945546),525579.6887636245,6081011.856945546,9.996080241304362,0.0,79.67394327397903,0.0 -2022-09-26 02:11:46,54.87553127796112,15.398800492669737,713.6363636363637,45.0,7.705348047100484,10.0,1000.0,2.733854574795301,398.0746670072945,0.256541578956093,0.7136363636363637,0.4642857142857143,356,45,329.98162933504216,POINT (525589.5229396995 6081013.648760929),525589.5229396995,6081013.648760929,9.996080303686714,0.0,79.6738177149563,0.0 -2022-09-26 02:11:47,54.87554687689462,15.398953908445554,704.5454545454546,45.0,7.579250411105175,10.0,1000.0,2.8438323529862735,398.95273992488904,0.27310710567244995,0.7045454545454546,0.4642857142857143,351,45,329.60418372176866,POINT (525599.3571119088 6081015.440597868),525599.3571119088,6081015.440597868,9.996080364771823,0.0,79.67369218708659,0.0 -2022-09-26 02:11:48,54.87556247582806,15.399107324280614,695.4545454545455,45.0,7.452964551974088,10.0,1000.0,2.9404368433077774,399.5983164241795,0.28709664289119907,0.6954545454545455,0.4642857142857143,347,45,329.46967663553494,POINT (525609.1912802529 6081017.232456368),525609.1912802529,6081017.232456368,9.996080427135642,0.0,79.67356662794735,0.0 -2022-09-26 02:11:49,54.87557807476148,15.399260740174917,686.3636363636364,45.0,7.266741295095925,10.0,1000.0,3.0739154609497508,400.3228639888354,0.3056222972793853,0.6863636363636364,0.4642857142857143,342,45,329.43937804172884,POINT (525619.0254447313 6081019.0243364265),525619.0254447313,6081019.0243364265,9.99608048848367,0.0,79.67344109482902,0.0 -2022-09-26 02:11:50,54.875593673694844,15.399414156128461,677.2727272727274,45.0,7.057156194787612,10.0,1000.0,3.224518858977661,400.94434298082376,0.3254279621825425,0.6772727272727274,0.4642857142857143,337,45,329.47218014840075,POINT (525628.8596053442 6081020.816238043),525628.8596053442,6081020.816238043,9.996080550046633,0.0,79.67331555646051,0.0 -2022-09-26 02:11:51,54.875609272628175,15.399567572141251,668.1818181818182,45.0,6.88092266231275,10.0,1000.0,3.360066105403103,401.3599939406034,0.34228116387876467,0.6681818181818182,0.4642857142857143,333,45,329.48191746668056,POINT (525638.6937620917 6081022.608161221),525638.6937620917,6081022.608161221,9.996080612439917,0.0,79.67318999720634,0.0 -2022-09-26 02:11:52,54.87562487156146,15.399720988213286,659.0909090909091,45.0,6.661954043517516,10.0,1000.0,3.552432467697761,401.7699847882155,0.3647129069047881,0.6590909090909092,0.4642857142857143,328,45,329.4138318791256,POINT (525648.5279149736 6081024.400105957),525648.5279149736,6081024.400105957,9.996080673931912,0.0,79.67306446409265,0.0 -2022-09-26 02:11:53,54.87564047049471,15.399874404344564,650.0,45.0,6.496535682762427,10.0,1000.0,3.7280424369945333,402.0058339154919,0.38382479304801087,0.65,0.4642857142857143,324,45,329.2736148648745,POINT (525658.3620639896 6081026.192072253),525658.3620639896,6081026.192072253,9.996080735743698,0.0,79.67293891498615,0.0 -2022-09-26 02:11:54,54.87565606942792,15.400027820535085,640.909090909091,45.0,6.310819063596524,10.0,1000.0,3.979312094443137,402.1812113538403,0.4092660400800419,0.640909090909091,0.4642857142857143,319,45,329.00700642621484,POINT (525668.1962091404 6081027.984060108),525668.1962091404,6081027.984060108,9.99608079789464,0.0,79.67281337161138,0.0 -2022-09-26 02:11:55,54.87567166836109,15.400181236784851,631.8181818181819,45.0,6.181342366466141,10.0,1000.0,4.2088498186932215,402.22421516900044,0.43092014931603745,0.6318181818181818,0.4642857142857143,315,45,328.7762275552534,POINT (525678.0303504255 6081029.776069522),525678.0303504255,6081029.776069522,9.996080859864517,0.0,79.67268782799894,0.0 -2022-09-26 02:11:56,54.87568726729422,15.400334653093859,622.7272727272727,45.0,6.037799303723938,10.0,1000.0,4.5345632376716045,402.15595679630434,0.4596717043996249,0.6227272727272728,0.4642857142857143,310,45,328.62212775963525,POINT (525687.8644878445 6081031.568100497),525687.8644878445,6081031.568100497,9.99608092164366,0.0,79.67256227328654,0.0 -2022-09-26 02:11:57,54.87570286622731,15.400488069462114,613.6363636363637,45.0,5.937964614504016,10.0,1000.0,4.827199123555868,402.00492063950634,0.48403451201285674,0.6136363636363638,0.4642857142857143,306,45,328.85460023767905,POINT (525697.6986213983 6081033.36015303),525697.6986213983,6081033.36015303,9.996080983719187,0.0,79.67243674053948,0.0 -2022-09-26 02:11:58,54.875718465160354,15.400641485889611,604.5454545454546,45.0,5.844398124263349,10.0,1000.0,5.231977676661076,401.6991154978252,0.5161520463876347,0.6045454545454546,0.4642857142857143,301,45,329.89333853532355,POINT (525707.5327510863 6081035.152227122),525707.5327510863,6081035.152227122,9.996081045770948,0.0,79.67231119144077,0.0 -2022-09-26 02:11:59,54.875734064093365,15.400794902376354,595.4545454545455,45.0,5.8018188309186565,10.0,1000.0,5.583855973137295,401.3648498113009,0.5430917792295625,0.5954545454545455,0.4642857142857143,297,45,331.38916625642304,POINT (525717.3668769085 6081036.944322774),525717.3668769085,6081036.944322774,9.996081107703738,0.0,79.6721856475953,0.0 -2022-09-26 02:12:00,54.875749663026326,15.400948318922342,586.3636363636364,45.0,5.793936219279109,10.0,1000.0,6.050968418854056,400.84203737732906,0.5781122356256722,0.5863636363636364,0.4642857142857143,292,45,334.00874655399423,POINT (525727.200998865 6081038.736439986),525727.200998865,6081038.736439986,9.996081169966018,0.0,79.67206009861934,0.0 -2022-09-26 02:12:01,54.87576526195925,15.401101735527575,577.2727272727274,45.0,5.823528827507078,10.0,1000.0,6.43787982476899,400.34613578433675,0.6069668745400842,0.5772727272727274,0.4642857142857143,288,45,336.553033287027,POINT (525737.0351169556 6081040.528578757),525737.0351169556,6081040.528578757,9.996081231994797,0.0,79.67193455477698,0.0 -2022-09-26 02:12:02,54.87578086089213,15.401255152192052,568.1818181818182,45.0,5.899310268183717,10.0,1000.0,6.922931428394333,399.63894109021686,0.643647099253758,0.5681818181818182,0.4642857142857143,283,45,340.01537866620095,POINT (525746.8692311805 6081042.320739087),525746.8692311805,6081042.320739087,9.996081293904593,0.0,79.67180901618788,0.0 -2022-09-26 02:12:03,54.87579645982498,15.401408568915771,559.0909090909091,45.0,6.005587671753374,10.0,1000.0,7.389370877797086,398.84665023146135,0.6803944290376635,0.5590909090909091,0.4642857142857143,278,45,343.4443735457778,POINT (525756.7033415395 6081044.112920976),525756.7033415395,6081044.112920976,9.9960813560818,0.0,79.67168346697733,0.0 -2022-09-26 02:12:04,54.87581205875779,15.401561985698736,550.0,45.0,6.1004850437541664,10.0,1000.0,7.733157045594111,398.1606332218218,0.7093253517383514,0.55,0.4642857142857143,274,45,345.9211226229588,POINT (525766.5374480325 6081045.905124426),525766.5374480325,6081045.905124426,9.996081418307005,0.0,79.67155791776834,0.0 -2022-09-26 02:12:05,54.87582765769056,15.401715402540946,540.909090909091,45.0,6.214384546763422,10.0,1000.0,8.105885931662435,397.2495719552002,0.7441931154065728,0.540909090909091,0.4642857142857143,269,45,348.4294536440838,POINT (525776.3715506598 6081047.697349434),525776.3715506598,6081047.697349434,9.996081480360777,0.0,79.67143237918391,0.0 -2022-09-26 02:12:06,54.87584325662328,15.4018688194424,531.8181818181819,45.0,6.289548944023802,10.0,1000.0,8.344402829503625,396.48659398819706,0.7705004493565176,0.5318181818181819,0.4642857142857143,265,45,349.83622655126754,POINT (525786.2056494211 6081049.489596003),525786.2056494211,6081049.489596003,9.996081542848952,0.0,79.67130682472639,0.0 -2022-09-26 02:12:07,54.875858855555954,15.402022236403102,522.7272727272727,45.0,6.351039134146596,10.0,1000.0,8.552117776943373,395.50169441717645,0.8006729129535888,0.5227272727272727,0.4642857142857143,260,45,350.7801547630937,POINT (525796.0397443165 6081051.28186413),525796.0397443165,6081051.28186413,9.996081604884177,0.0,79.67118128602543,0.0 -2022-09-26 02:12:08,54.87587445448859,15.402175653423043,513.6363636363637,45.0,6.370563065466201,10.0,1000.0,8.637545467382909,394.69704269479007,0.8221392378609584,0.5136363636363638,0.4642857142857143,256,45,350.93667196720065,POINT (525805.8738353457 6081053.074153815),525805.8738353457,6081053.074153815,9.996081666738334,0.0,79.67105574708677,0.0 -2022-09-26 02:12:09,54.8758900534212,15.402329070502232,504.54545454545456,45.0,6.364932665528964,10.0,1000.0,8.637760942797392,393.68077602764725,0.8450458594898352,0.5045454545454545,0.4642857142857143,251,45,350.6152084571952,POINT (525815.7079225088 6081054.866465064),525815.7079225088,6081054.866465064,9.996081729475417,0.0,79.67093018189131,0.0 -2022-09-26 02:12:10,54.875905652353765,15.402482487640665,495.4545454545455,45.0,6.354708871031204,10.0,1000.0,8.553106844925109,392.8666658867102,0.8598822246844126,0.4954545454545455,0.4642857142857143,247,45,350.22499372264303,POINT (525825.542005806 6081056.65879787),525825.542005806,6081056.65879787,9.99608179165462,0.0,79.67080464319504,0.0 -2022-09-26 02:12:11,54.87592125128628,15.402635904838341,486.3636363636364,45.0,6.376185382994652,10.0,1000.0,8.347986972260506,391.85670501210217,0.8737372595446825,0.4863636363636364,0.4642857142857143,242,45,349.7664385934128,POINT (525835.3760852371 6081058.451152235),525835.3760852371,6081058.451152235,9.996081853767283,0.0,79.6706791043807,0.0 -2022-09-26 02:12:12,54.87593685021875,15.402789322095263,477.2727272727273,45.0,6.4403796884597275,10.0,1000.0,8.11353182364997,391.0610502130662,0.880934757972575,0.4772727272727273,0.4642857142857143,238,45,349.477122698084,POINT (525845.2101608021 6081060.243528158),525845.2101608021,6081060.243528158,9.996081915813404,0.0,79.67055356544826,0.0 -2022-09-26 02:12:13,54.875952449151185,15.402942739411431,468.18181818181824,45.0,6.583973799695815,10.0,1000.0,7.749023928021026,390.08946318239623,0.8850408388309864,0.46818181818181825,0.4642857142857143,233,45,349.297328341693,POINT (525855.0442325011 6081062.035925643),525855.0442325011,6081062.035925643,9.996081978523032,0.0,79.67042801088208,0.0 -2022-09-26 02:12:14,54.875968048083585,15.403096156786843,459.0909090909091,45.0,6.7412135063423895,10.0,1000.0,7.41459821783928,389.3357019076476,0.8844916993742131,0.4590909090909091,0.4642857142857143,229,45,349.3529562084699,POINT (525864.8783003336 6081063.828344687),525864.8783003336,6081063.828344687,9.996082040770077,0.0,79.67030246121016,0.0 -2022-09-26 02:12:15,54.87598364701595,15.403249574221501,450.00000000000006,45.0,6.969379283989142,10.0,1000.0,6.963402916027533,388.4291128089929,0.8792397808394018,0.45000000000000007,0.4642857142857143,224,45,349.7126316309826,POINT (525874.7123643004 6081065.620785291),525874.7123643004,6081065.620785291,9.996082103637761,0.0,79.67017691213805,0.0 -2022-09-26 02:12:16,54.87599924594827,15.403402991715405,440.90909090909093,45.0,7.157353376505474,10.0,1000.0,6.590661474976731,387.7364635961161,0.8716286480999265,0.4409090909090909,0.4642857142857143,220,45,350.2306039690617,POINT (525884.5464244006 6081067.413247457),525884.5464244006,6081067.413247457,9.996082166033272,0.0,79.67005135709796,0.0 -2022-09-26 02:12:17,54.87601484488055,15.403556409268553,431.81818181818187,45.0,7.371310239096672,10.0,1000.0,6.127934753532194,386.916306939019,0.858254602276836,0.4318181818181819,0.4642857142857143,215,45,351.11583877344555,POINT (525894.3804806349 6081069.20573118),525894.3804806349,6081069.20573118,9.996082228266884,0.0,79.66992582354466,0.0 -2022-09-26 02:12:18,54.8760304438128,15.403709826880947,422.72727272727275,45.0,7.533957723812918,10.0,1000.0,5.685239084053471,386.15143623587943,0.8410965908852549,0.42272727272727273,0.4642857142857143,210,45,352.15823900059206,POINT (525904.2145330027 6081070.998236464),525904.2145330027,6081070.998236464,9.996082291039926,0.0,79.66980026337572,0.0 -2022-09-26 02:12:19,54.876046042745,15.403863244552586,413.6363636363637,45.0,7.6113279720788185,10.0,1000.0,5.354538810405617,385.5819823677,0.8250304067695641,0.4136363636363637,0.4642857142857143,206,45,353.0021369586643,POINT (525914.0485815044 6081072.790763306),525914.0485815044,6081072.790763306,9.99608235325499,0.0,79.6696747297059,0.0 -2022-09-26 02:12:20,54.87606164167716,15.404016662283473,404.54545454545456,45.0,7.63038790847491,10.0,1000.0,4.977873482115871,384.925570272307,0.8025095399445854,0.40454545454545454,0.4642857142857143,201,45,353.9260743400648,POINT (525923.8826261399 6081074.58331171),525923.8826261399,6081074.58331171,9.996082416186075,0.0,79.66954917503105,0.0 -2022-09-26 02:12:21,54.87607724060928,15.404170080073602,395.4545454545455,45.0,7.581600710920497,10.0,1000.0,4.708797076432128,384.4457801540144,0.7828948135133399,0.3954545454545455,0.4642857142857143,197,45,354.46371871770754,POINT (525933.7166669087 6081076.375881671),525933.7166669087,6081076.375881671,9.99608247809149,0.0,79.66942363551443,0.0 -2022-09-26 02:12:22,54.876092839541364,15.404323497922977,386.3636363636364,45.0,7.44796005377314,10.0,1000.0,4.4136245400605345,383.90302049117565,0.7568273988870688,0.38636363636363635,0.4642857142857143,192,45,354.8012202020677,POINT (525943.5507038111 6081078.168473193),525943.5507038111,6081078.168473193,9.996082540889516,0.0,79.66929808060343,0.0 -2022-09-26 02:12:23,54.8761084384734,15.404476915831602,377.2727272727273,45.0,7.295910158796129,10.0,1000.0,4.209249037939794,383.51379440236093,0.7350407623274999,0.3772727272727273,0.4642857142857143,188,45,354.8075458614182,POINT (525953.3847368477 6081079.961086275),525953.3847368477,6081079.961086275,9.996082603974154,0.0,79.66917253679559,0.0 -2022-09-26 02:12:24,54.8761240374054,15.404630333799467,368.1818181818182,45.0,7.081592115582968,10.0,1000.0,3.990147701758744,383.0815583358121,0.7070109240328754,0.36818181818181817,0.4642857142857143,183,45,354.58578756979153,POINT (525963.2187660174 6081081.753720916),525963.2187660174,6081081.753720916,9.996082665961504,0.0,79.66904699179268,0.0 -2022-09-26 02:12:25,54.876139636337356,15.404783751826582,359.0909090909091,45.0,6.929501002341758,10.0,1000.0,3.840653084832767,382.77697041149554,0.6841888163161307,0.3590909090909091,0.4642857142857143,179,45,354.263875618707,POINT (525973.0527913208 6081083.546377118),525973.0527913208,6081083.546377118,9.996082729132583,0.0,79.66892143712575,0.0 -2022-09-26 02:12:26,54.876155235269266,15.40493716991294,350.0,45.0,6.7967170077839,10.0,1000.0,3.6810317656046614,382.4437517686342,0.6554353752579646,0.35,0.4642857142857143,174,45,353.7543959914154,POINT (525982.8868127575 6081085.339054877),525982.8868127575,6081085.339054877,9.996082790996407,0.0,79.6687959027489,0.0 -2022-09-26 02:12:27,54.87617083420114,15.405090588058542,340.90909090909093,45.0,6.743427989360494,10.0,1000.0,3.5713694716133078,382.2116262273733,0.6324170940900672,0.34090909090909094,0.4642857142857143,170,45,353.3407292329891,POINT (525992.7208303278 6081087.131754198),525992.7208303278,6081087.131754198,9.996082854315977,0.0,79.66867034271381,0.0 -2022-09-26 02:12:28,54.87618643313298,15.405244006263391,331.81818181818187,45.0,6.735360840163573,10.0,1000.0,3.452042930421973,381.95915069822695,0.6037993114358333,0.33181818181818185,0.4642857142857143,165,45,352.92571570640354,POINT (526002.5548440315 6081088.924475078),526002.5548440315,6081088.924475078,9.996082916557336,0.0,79.66854480320815,0.0 -2022-09-26 02:12:29,54.87620203206478,15.405397424527488,322.72727272727275,45.0,6.761508111504433,10.0,1000.0,3.3675926194590895,381.78308209071224,0.5811258157927626,0.32272727272727275,0.4642857142857143,161,45,352.74202437026287,POINT (526012.3888538688 6081090.717217519),526012.3888538688,6081090.717217519,9.996082979972908,0.0,79.66841924317623,0.0 -2022-09-26 02:12:30,54.876217630996535,15.405550842850829,313.6363636363637,45.0,6.8095176035207645,10.0,1000.0,3.272128985066873,381.5896733418627,0.5531507147779675,0.31363636363636366,0.4642857142857143,156,45,352.7518942898597,POINT (526022.2228598393 6081092.509981518),526022.2228598393,6081092.509981518,9.996083042028697,0.0,79.66829370880565,0.0 -2022-09-26 02:12:31,54.87623322992825,15.405704261233415,304.54545454545456,45.0,6.844396786016268,10.0,1000.0,3.1846099181667,381.41989993644313,0.5256453305989116,0.30454545454545456,0.4642857142857143,151,45,353.0366126092628,POINT (526032.0568619432 6081094.302767078),526032.0568619432,6081094.302767078,9.996083105196686,0.0,79.66816814841789,0.0 -2022-09-26 02:12:32,54.87624882885993,15.405857679675249,295.4545454545455,45.0,6.843073437061131,10.0,1000.0,3.1184877445305723,381.29722939033064,0.504003181054947,0.29545454545454547,0.4642857142857143,147,45,353.43336612735294,POINT (526041.8908601807 6081096.095574198),526041.8908601807,6081096.095574198,9.996083168140633,0.0,79.66804260402591,0.0 -2022-09-26 02:12:33,54.876264427791575,15.40601109817633,286.3636363636364,45.0,6.786338645300541,10.0,1000.0,3.0390636039373815,381.1563209456455,0.4774134623176383,0.2863636363636364,0.4642857142857143,142,45,354.0657814734255,POINT (526051.7248545515 6081097.888402879),526051.7248545515,6081097.888402879,9.996083231123063,0.0,79.66791704877326,0.0 -2022-09-26 02:12:34,54.87628002672318,15.406164516736656,277.27272727272725,45.0,6.689546190912,10.0,1000.0,2.9772884403021895,381.0512511472938,0.4565112385256396,0.2772727272727272,0.4642857142857143,138,45,354.60941735509977,POINT (526061.5588450555 6081099.681253118),526061.5588450555,6081099.681253118,9.996083293652381,0.0,79.66779150927702,0.0 -2022-09-26 02:12:35,54.87629562565474,15.406317935356228,268.1818181818182,45.0,6.505286927038885,10.0,1000.0,2.9016212715319583,380.9273780206898,0.4308395923826841,0.2681818181818182,0.4642857142857143,133,45,355.24138508524817,POINT (526071.3928316928 6081101.474124919),526071.3928316928,6081101.474124919,9.996083356730807,0.0,79.66766595402753,0.0 -2022-09-26 02:12:36,54.87631122458625,15.406471354035048,259.0909090909091,45.0,6.317205136425496,10.0,1000.0,2.842114143724909,380.83337246757446,0.41066345007968635,0.25909090909090915,0.4642857142857143,129,45,355.6614051763433,POINT (526081.2268144635 6081103.267018278),526081.2268144635,6081103.267018278,9.99608341963768,0.0,79.66754040940252,0.0 -2022-09-26 02:12:37,54.876326823517736,15.406624772773114,250.00000000000003,45.0,6.057901676875447,10.0,1000.0,2.7690043186061564,380.7218435290373,0.38589497823501884,0.25000000000000006,0.4642857142857143,124,45,356.08366081033824,POINT (526091.0607933672 6081105.059933197),526091.0607933672,6081105.059933197,9.996083482248963,0.0,79.66741486442004,0.0 -2022-09-26 02:12:38,54.87634242244917,15.406778191570428,240.90909090909093,45.0,5.8456437204459775,10.0,1000.0,2.7116821175353927,380.6375686032449,0.36644783471157816,0.24090909090909093,0.4642857142857143,120,45,356.3254324457881,POINT (526100.8947684044 6081106.8528696755),526100.8947684044,6081106.8528696755,9.996083545533395,0.0,79.66728931466626,0.0 -2022-09-26 02:12:39,54.876358021380554,15.406931610426984,231.81818181818184,45.0,5.564972441165816,10.0,1000.0,2.641821120099449,380.53902139508966,0.34261672135502114,0.23181818181818184,0.4642857142857143,115,45,356.31667522419957,POINT (526110.7287395744 6081108.645827714),526110.7287395744,6081108.645827714,9.99608360817866,0.0,79.66716376419598,0.0 -2022-09-26 02:12:40,54.87637362031191,15.407085029342788,222.72727272727275,45.0,5.333887192394714,10.0,1000.0,2.587674152763029,380.4662020260949,0.32395516485530423,0.22272727272727275,0.4642857142857143,111,45,355.9955669524018,POINT (526120.5627068777 6081110.438807312),526120.5627068777,6081110.438807312,9.996083671162983,0.0,79.6670382194576,0.0 -2022-09-26 02:12:41,54.87638921924323,15.407238448317841,213.63636363636365,45.0,5.058854201482765,10.0,1000.0,2.522612646039274,380.38345227041606,0.3011699990748497,0.21363636363636365,0.4642857142857143,106,45,355.23033051701543,POINT (526130.3966703143 6081112.2318084715),526130.3966703143,6081112.2318084715,9.996083734529401,0.0,79.6669126642176,0.0 -2022-09-26 02:12:42,54.8764048181745,15.407391867352137,204.54545454545456,45.0,4.869753510088341,10.0,1000.0,2.472983926124714,380.3242949983116,0.2834088322616965,0.20454545454545456,0.4642857142857143,102,45,354.40836124231197,POINT (526140.2306298836 6081114.024831189),526140.2306298836,6081114.024831189,9.996083796984552,0.0,79.66678712425525,0.0 -2022-09-26 02:12:43,54.876420417105734,15.407545286445682,195.45454545454547,45.0,4.695840505370891,10.0,1000.0,2.41436414969222,380.2594367821508,0.26184140451534815,0.19545454545454546,0.4642857142857143,97,45,353.27514047058133,POINT (526150.0645855862 6081115.817875468),526150.0645855862,6081115.817875468,9.996083860614025,0.0,79.66666156376684,0.0 -2022-09-26 02:12:44,54.87643601603692,15.407698705598474,186.36363636363637,45.0,4.608223055951389,10.0,1000.0,2.3598934778224834,380.2046108406238,0.2410372878397812,0.18636363636363637,0.4642857142857143,92,45,352.21872192046067,POINT (526159.8985374217 6081117.610941307),526159.8985374217,6081117.610941307,9.996083923446747,0.0,79.66653601867571,0.0 -2022-09-26 02:12:45,54.876451614968076,15.407852124810512,177.27272727272728,45.0,4.603596555844483,10.0,1000.0,2.319490604121217,380.1676720244436,0.22498575328303738,0.17727272727272728,0.4642857142857143,88,45,351.562398556925,POINT (526169.7324853905 6081119.404028704),526169.7324853905,6081119.404028704,9.996083986671046,0.0,79.66641047394528,0.0 -2022-09-26 02:12:46,54.8764672138992,15.408005544081798,168.1818181818182,45.0,4.671705268872896,10.0,1000.0,2.273088055024998,380.12949168920244,0.20571083981820104,0.16818181818181818,0.4642857142857143,83,45,351.1139214160538,POINT (526179.5664294921 6081121.197137665),526179.5664294921,6081121.197137665,9.996084050153474,0.0,79.66628490773128,0.0 -2022-09-26 02:12:47,54.87648281283027,15.40815896341233,159.0909090909091,45.0,4.772295437006743,10.0,1000.0,2.239275657719969,380.1047079596965,0.19095583829535798,0.1590909090909091,0.4642857142857143,79,45,351.1190187259865,POINT (526189.4003697266 6081122.990268184),526189.4003697266,6081122.990268184,9.996084112963123,0.0,79.6661593678965,0.0 -2022-09-26 02:12:48,54.8764984117613,15.408312382802109,150.0,45.0,4.932917599400081,10.0,1000.0,2.201095679853942,380.0799640581489,0.17338143397593223,0.15,0.4642857142857143,74,45,351.6097847329729,POINT (526199.2343060941 6081124.783420263),526199.2343060941,6081124.783420263,9.99608417626942,0.0,79.66603381767985,0.0 -2022-09-26 02:12:49,54.87651401069229,15.408465802251133,140.90909090909093,45.0,5.07329222858014,10.0,1000.0,2.173721695324034,380.0644142047238,0.16003990987059405,0.14090909090909093,0.4642857142857143,70,45,352.36100405609284,POINT (526209.0682385943 6081126.576593901),526209.0682385943,6081126.576593901,9.996084239113065,0.0,79.66590827235724,0.0 -2022-09-26 02:12:50,54.87652960962325,15.408619221759407,131.8181818181818,45.0,5.252226413590269,10.0,1000.0,2.1432666091150265,380.0493137002027,0.14428218217612018,0.1318181818181818,0.4642857142857143,65,45,353.63584118953855,POINT (526218.9021672276 6081128.3697891),526218.9021672276,6081128.3697891,9.996084302682425,0.0,79.66578271689218,0.0 -2022-09-26 02:12:51,54.87654520855417,15.408772641326928,122.72727272727273,45.0,5.405181409032626,10.0,1000.0,2.1217245815227486,380.04004038664135,0.13242079496573256,0.12272727272727274,0.4642857142857143,61,45,354.78706852829083,POINT (526228.7360919937 6081130.1630058605),526228.7360919937,6081130.1630058605,9.99608436618526,0.0,79.665657161309,0.0 -2022-09-26 02:12:52,54.87656080748504,15.408926060953696,113.63636363636364,45.0,5.631025765310644,10.0,1000.0,2.098035139794594,380.03117509997196,0.11852888016770957,0.11363636363636365,0.4642857142857143,56,45,356.2579358386919,POINT (526238.5700128927 6081131.95624418),526238.5700128927,6081131.95624418,9.99608442928742,0.0,79.66553161611088,0.0 -2022-09-26 02:12:53,54.87657640641588,15.409079480639713,104.54545454545455,45.0,5.842207726823423,10.0,1000.0,2.081443127515131,380.02577376859057,0.10815969478232876,0.10454545454545455,0.4642857142857143,52,45,357.43924292142435,POINT (526248.4039299246 6081133.74950406),526248.4039299246,6081133.74950406,9.996084492719179,0.0,79.66540606578246,0.0 -2022-09-26 02:12:54,54.87659200534666,15.409232900384978,95.45454545454547,45.0,6.134071913744266,10.0,1000.0,2.0633346602490965,380.0205990523786,0.09611597928733599,0.09545454545454547,0.4642857142857143,47,45,358.86317859003134,POINT (526258.2378430893 6081135.542785497),526258.2378430893,6081135.542785497,9.996084555750253,0.0,79.66528052583908,0.0 -2022-09-26 02:12:55,54.8766076042774,15.409386320189489,86.36363636363637,45.0,6.376805012781722,10.0,1000.0,2.0507205189499174,380.01740719163416,0.08720046149975572,0.08636363636363638,0.4642857142857143,43,45,359.90244913783187,POINT (526268.0717523864 6081137.336088495),526268.0717523864,6081137.336088495,9.996084618819895,0.0,79.66515497503501,0.0 -2022-09-26 02:12:56,54.87662320320811,15.409539740053246,77.27272727272728,45.0,6.6720409220104635,10.0,1000.0,2.0369950384214115,380.01427962156816,0.07692920016807828,0.07727272727272728,0.4642857142857143,38,45,0.9979527909425201,POINT (526277.9056578164 6081139.129413056),526277.9056578164,6081139.129413056,9.996084682896887,0.0,79.66502940895667,0.0 -2022-09-26 02:12:57,54.87663880213877,15.409693159976248,68.18181818181819,45.0,6.888315673957755,10.0,1000.0,2.027442450647065,380.0122893176782,0.06938722753281425,0.06818181818181819,0.4642857142857143,34,45,1.6622517201290634,POINT (526287.7395593789 6081140.922759174),526287.7395593789,6081140.922759174,9.996084745561282,0.0,79.66490387391048,0.0 -2022-09-26 02:12:58,54.8766544010694,15.409846579958499,59.09090909090909,45.0,7.12041611368426,10.0,1000.0,2.0170351159068143,380.0102669801212,0.06076749948672598,0.0590909090909091,0.4642857142857143,29,45,2.1837065147101953,POINT (526297.573457074 6081142.716126854),526297.573457074,6081142.716126854,9.99608480905653,0.0,79.66477831797933,0.0 -2022-09-26 02:12:59,54.87667,15.41,50.0,45.0,7.302661217041,10.0,1000.0,2.008085263822646,380.00862677315314,0.05300105754349645,0.05,0.4642857142857143,24,45,2.346419169439571,POINT (526307.4073509022 6081144.509516094),526307.4073509022,6081144.509516094,9.996084873172414,0.0,79.66465276264836,0.0 -2022-09-26 02:13:00,54.87667,15.41,50.0,56.0,6.987052217666759,10.0,1000.0,2.1469792481701866,380.01985269637584,0.03260732643759174,0.05,0.5428571428571428,24,53,351.6407862290648,POINT (526307.4073509022 6081144.509516094),526307.4073509022,6081144.509516094,0.0,11.0,0.0,90.0 -2022-09-26 02:13:01,54.8766544010694,15.409846579958499,59.09090909090909,56.0,6.897928504617965,10.0,1000.0,2.1809795636173357,380.0231607224859,0.03808881979017432,0.0590909090909091,0.5428571428571428,29,53,353.3886928589463,POINT (526297.573457074 6081142.716126854),526297.573457074,6081142.716126854,9.996084873172414,0.0,259.66465276264836,0.0 -2022-09-26 02:13:02,54.87663880213877,15.409693159976248,68.18181818181819,56.0,6.713226471734605,10.0,1000.0,2.2210838569855667,380.02698678425895,0.044337603450245774,0.06818181818181819,0.5428571428571428,34,53,354.79208662334975,POINT (526287.7395593789 6081140.922759174),526287.7395593789,6081140.922759174,9.99608480905653,0.0,259.6647783179793,0.0 -2022-09-26 02:13:03,54.87662320320811,15.409539740053246,77.27272727272728,56.0,6.501268761696096,10.0,1000.0,2.258254409203448,380.03050529734725,0.04994094371660292,0.07727272727272728,0.5428571428571428,38,53,355.56924979771856,POINT (526277.9056578164 6081139.129413056),526277.9056578164,6081139.129413056,9.996084745561282,0.0,259.6649038739105,0.0 -2022-09-26 02:13:04,54.8766076042774,15.409386320189489,86.36363636363637,56.0,6.177220011774064,10.0,1000.0,2.3120073144764857,380.0356237998328,0.05776654418783811,0.08636363636363638,0.5428571428571428,43,53,356.0453447949872,POINT (526268.0717523864 6081137.336088495),526268.0717523864,6081137.336088495,9.996084682896887,0.0,259.6650294089567,0.0 -2022-09-26 02:13:05,54.87659200534666,15.409232900384978,95.45454545454547,56.0,5.894733866855567,10.0,1000.0,2.3615597784869,380.0404447588233,0.06473323617477436,0.09545454545454547,0.5428571428571428,47,53,356.02966417037203,POINT (526258.2378430893 6081135.542785497),526258.2378430893,6081135.542785497,9.996084618819895,0.0,259.665154975035,0.0 -2022-09-26 02:13:06,54.87657640641588,15.409079480639713,104.54545454545455,56.0,5.549807794336577,10.0,1000.0,2.4326543613352296,380.0476487350812,0.07438907778887288,0.10454545454545455,0.5428571428571428,52,53,355.57614460498286,POINT (526248.4039299246 6081133.74950406),526248.4039299246,6081133.74950406,9.996084555750253,0.0,259.6652805258391,0.0 -2022-09-26 02:13:07,54.87656080748504,15.408926060953696,113.63636363636364,56.0,5.305182953384386,10.0,1000.0,2.4975364520491135,380.0546163691749,0.08291765374420594,0.11363636363636365,0.5428571428571428,56,53,354.9516823399901,POINT (526238.5700128927 6081131.95624418),526238.5700128927,6081131.95624418,9.996084492719179,0.0,259.66540606578246,0.0 -2022-09-26 02:13:08,54.87654520855417,15.408772641326928,122.72727272727273,56.0,5.055944902414933,10.0,1000.0,2.589461771250313,380.0652811687805,0.09464031331828221,0.12272727272727274,0.5428571428571428,61,53,353.99495092330227,POINT (526228.7360919937 6081130.1630058605),526228.7360919937,6081130.1630058605,9.99608442928742,0.0,259.66553161611085,0.0 -2022-09-26 02:13:09,54.87652960962325,15.408619221759407,131.8181818181818,56.0,4.892304769617217,10.0,1000.0,2.672139629710271,380.0757900936452,0.10490537012595685,0.1318181818181818,0.5428571428571428,65,53,353.21562277299535,POINT (526218.9021672276 6081128.3697891),526218.9021672276,6081128.3697891,9.99608436618526,0.0,259.665657161309,0.0 -2022-09-26 02:13:10,54.87651401069229,15.408465802251133,140.90909090909093,56.0,4.693707484678742,10.0,1000.0,2.787312345932106,380.09206248550583,0.11888666372828083,0.14090909090909093,0.5428571428571428,70,53,352.49459999832015,POINT (526209.0682385943 6081126.576593901),526209.0682385943,6081126.576593901,9.996084302682425,0.0,259.6657827168922,0.0 -2022-09-26 02:13:11,54.8764984117613,15.408312382802109,150.0,56.0,4.52856141184577,10.0,1000.0,2.8889781414842575,380.1081594716346,0.13101398326884894,0.15,0.5428571428571428,74,53,352.29650619895517,POINT (526199.2343060941 6081124.783420263),526199.2343060941,6081124.783420263,9.996084239113065,0.0,259.6659082723572,0.0 -2022-09-26 02:13:12,54.87648281283027,15.40815896341233,159.0909090909091,56.0,4.328449297965125,10.0,1000.0,3.027678126182918,380.1329804042823,0.14736730496994427,0.1590909090909091,0.5428571428571428,79,53,352.61347996168746,POINT (526189.4003697266 6081122.990268184),526189.4003697266,6081122.990268184,9.99608417626942,0.0,259.6660338176798,0.0 -2022-09-26 02:13:13,54.8764672138992,15.408005544081798,168.1818181818182,56.0,4.194619772876164,10.0,1000.0,3.1473895935638234,380.1572678874302,0.1614055405943628,0.16818181818181818,0.5428571428571428,83,53,353.2984213414675,POINT (526179.5664294921 6081121.197137665),526179.5664294921,6081121.197137665,9.996084112963123,0.0,259.6661593678965,0.0 -2022-09-26 02:13:14,54.876451614968076,15.407852124810512,177.27272727272728,56.0,4.0907973401397975,10.0,1000.0,3.306757434159657,380.1940764504772,0.18012990505642756,0.17727272727272728,0.5428571428571428,88,53,354.57815111759567,POINT (526169.7324853905 6081119.404028704),526169.7324853905,6081119.404028704,9.996084050153474,0.0,259.66628490773127,0.0 -2022-09-26 02:13:15,54.87643601603692,15.407698705598474,186.36363636363637,56.0,4.0763585712280666,10.0,1000.0,3.4407656834199845,380.2293268481322,0.19602241396848835,0.18636363636363637,0.5428571428571428,92,53,355.81010221777757,POINT (526159.8985374217 6081117.610941307),526159.8985374217,6081117.610941307,9.996083986671046,0.0,259.66641047394523,0.0 -2022-09-26 02:13:16,54.876420417105734,15.407545286445682,195.45454545454547,56.0,4.155558201136186,10.0,1000.0,3.614224825172036,380.28141255811926,0.21696961205158105,0.19545454545454546,0.5428571428571428,97,53,357.402615439714,POINT (526150.0645855862 6081115.817875468),526150.0645855862,6081115.817875468,9.996083923446747,0.0,259.66653601867574,0.0 -2022-09-26 02:13:17,54.8764048181745,15.407391867352137,204.54545454545456,56.0,4.337750278681512,10.0,1000.0,3.7913406428775343,380.34309497059803,0.239025503078288,0.20454545454545456,0.5428571428571428,102,53,358.81801481205713,POINT (526140.2306298836 6081114.024831189),526140.2306298836,6081114.024831189,9.996083860614025,0.0,259.6666615637668,0.0 -2022-09-26 02:13:18,54.87638921924323,15.407238448317841,213.63636363636365,56.0,4.542292517631075,10.0,1000.0,3.933252337669323,380.39970333182873,0.25738290066988057,0.21363636363636365,0.5428571428571428,106,53,359.6713981459068,POINT (526130.3966703143 6081112.2318084715),526130.3966703143,6081112.2318084715,9.996083796984552,0.0,259.6667871242552,0.0 -2022-09-26 02:13:19,54.87637362031191,15.407085029342788,222.72727272727275,56.0,4.840837733254147,10.0,1000.0,4.107640484083432,380.47980488123136,0.2810892726337977,0.22272727272727275,0.5428571428571428,111,53,0.2514797878342847,POINT (526120.5627068777 6081110.438807312),526120.5627068777,6081110.438807312,9.996083734529401,0.0,259.6669126642176,0.0 -2022-09-26 02:13:20,54.876358021380554,15.406931610426984,231.81818181818184,56.0,5.08838675924,10.0,1000.0,4.242242374443983,380.5514626523493,0.3005482360924545,0.23181818181818184,0.5428571428571428,115,53,0.27847510987459145,POINT (526110.7287395744 6081108.645827714),526110.7287395744,6081108.645827714,9.996083671162983,0.0,259.6670382194576,0.0 -2022-09-26 02:13:21,54.87634242244917,15.406778191570428,240.90909090909093,56.0,5.380784300706281,10.0,1000.0,4.4010517419193285,380.65061317668966,0.3253157878964761,0.24090909090909093,0.5428571428571428,120,53,359.7994877896175,POINT (526100.8947684044 6081106.8528696755),526100.8947684044,6081106.8528696755,9.99608360817866,0.0,259.66716376419595,0.0 -2022-09-26 02:13:22,54.876326823517736,15.406624772773114,250.00000000000003,56.0,5.594722910283723,10.0,1000.0,4.518269023945168,380.7377482019963,0.3453427647958751,0.25000000000000006,0.5428571428571428,124,53,359.1203596515767,POINT (526091.0607933672 6081105.059933197),526091.0607933672,6081105.059933197,9.996083545533395,0.0,259.6672893146663,0.0 -2022-09-26 02:13:23,54.87631122458625,15.406471354035048,259.0909090909091,56.0,5.855094516166286,10.0,1000.0,4.649872202154608,380.8569048200238,0.3704366182715127,0.25909090909090915,0.5428571428571428,129,53,358.1717284457778,POINT (526081.2268144635 6081103.267018278),526081.2268144635,6081103.267018278,9.996083482248963,0.0,259.66741486442004,0.0 -2022-09-26 02:13:24,54.87629562565474,15.406317935356228,268.1818181818182,56.0,6.055568819836046,10.0,1000.0,4.741719807612864,380.96109785313547,0.39039850512289226,0.2681818181818182,0.5428571428571428,133,53,357.50002367538156,POINT (526071.3928316928 6081101.474124919),526071.3928316928,6081101.474124919,9.99608341963768,0.0,259.6675404094025,0.0 -2022-09-26 02:13:25,54.87628002672318,15.406164516736656,277.27272727272725,56.0,6.281685696229305,10.0,1000.0,4.838502082867921,381.10395910155694,0.4149853481061636,0.2772727272727272,0.5428571428571428,138,53,356.9359358277884,POINT (526061.5588450555 6081099.681253118),526061.5588450555,6081099.681253118,9.996083356730807,0.0,259.66766595402754,0.0 -2022-09-26 02:13:26,54.876264427791575,15.40601109817633,286.3636363636364,56.0,6.436610720145335,10.0,1000.0,4.901284509292826,381.2300563454503,0.4341941057191621,0.2863636363636364,0.5428571428571428,142,53,356.80006490818255,POINT (526051.7248545515 6081097.888402879),526051.7248545515,6081097.888402879,9.996083293652381,0.0,259.66779150927704,0.0 -2022-09-26 02:13:27,54.87624882885993,15.405857679675249,295.4545454545455,56.0,6.595291572572343,10.0,1000.0,4.962226588251229,381.40561565157594,0.45740475144077325,0.29545454545454547,0.5428571428571428,147,53,357.0929182607336,POINT (526041.8908601807 6081096.095574198),526041.8908601807,6081096.095574198,9.996083231123063,0.0,259.66791704877323,0.0 -2022-09-26 02:13:28,54.87623322992825,15.405704261233415,304.54545454545456,56.0,6.6965349619367265,10.0,1000.0,4.9983868480349845,381.563447218119,0.47517127194613423,0.30454545454545456,0.5428571428571428,151,53,357.69566296671536,POINT (526032.0568619432 6081094.302767078),526032.0568619432,6081094.302767078,9.996083168140633,0.0,259.6680426040259,0.0 -2022-09-26 02:13:29,54.876217630996535,15.405550842850829,313.6363636363637,56.0,6.798691056302657,10.0,1000.0,5.031008800396127,381.7874174620814,0.4961703837314568,0.31363636363636366,0.5428571428571428,156,53,358.83394818631314,POINT (526022.2228598393 6081092.509981518),526022.2228598393,6081092.509981518,9.996083105196686,0.0,259.66816814841786,0.0 -2022-09-26 02:13:30,54.87620203206478,15.405397424527488,322.72727272727275,56.0,6.886228812570201,10.0,1000.0,5.054643337155109,382.04741161138566,0.5156147141480227,0.32272727272727275,0.5428571428571428,161,53,0.23748170097417187,POINT (526012.3888538688 6081090.717217519),526012.3888538688,6081090.717217519,9.996083042028697,0.0,259.66829370880566,0.0 -2022-09-26 02:13:31,54.87618643313298,15.405244006263391,331.81818181818187,56.0,6.9560182078090635,10.0,1000.0,5.071658423866479,382.28638922696217,0.5299138717356342,0.33181818181818185,0.5428571428571428,165,53,1.3938316015620558,POINT (526002.5548440315 6081088.924475078),526002.5548440315,6081088.924475078,9.996082979972908,0.0,259.66841924317623,0.0 -2022-09-26 02:13:32,54.87617083420114,15.405090588058542,340.90909090909093,56.0,7.055252637876128,10.0,1000.0,5.097496123028119,382.630497660205,0.5460699360545308,0.34090909090909094,0.5428571428571428,170,53,2.6575309162091116,POINT (525992.7208303278 6081087.131754198),525992.7208303278,6081087.131754198,9.996082916557336,0.0,259.66854480320814,0.0 -2022-09-26 02:13:33,54.876155235269266,15.40493716991294,350.0,56.0,7.1511174176613475,10.0,1000.0,5.1277058531584885,382.94709620302893,0.5575293366240822,0.35,0.5428571428571428,174,53,3.3638637710656667,POINT (525982.8868127575 6081085.339054877),525982.8868127575,6081085.339054877,9.996082854315977,0.0,259.6686703427138,0.0 -2022-09-26 02:13:34,54.876139636337356,15.404783751826582,359.0909090909091,56.0,7.294828459469681,10.0,1000.0,5.186043106989405,383.40103210569845,0.5699255469682046,0.3590909090909091,0.5428571428571428,179,53,3.704839640543355,POINT (525973.0527913208 6081083.546377118),525973.0527913208,6081083.546377118,9.996082790996407,0.0,259.6687959027489,0.0 -2022-09-26 02:13:35,54.8761240374054,15.404630333799467,368.1818181818182,56.0,7.424537416502136,10.0,1000.0,5.25587809758734,383.8152806033352,0.578248860947961,0.36818181818181817,0.5428571428571428,183,53,3.5017350103655076,POINT (525963.2187660174 6081081.753720916),525963.2187660174,6081081.753720916,9.996082729132583,0.0,259.66892143712573,0.0 -2022-09-26 02:13:36,54.8761084384734,15.404476915831602,377.2727272727273,56.0,7.586365986754357,10.0,1000.0,5.3810333733136035,384.40244596138524,0.586619271069237,0.3772727272727273,0.5428571428571428,188,53,2.762347299196165,POINT (525953.3847368477 6081079.961086275),525953.3847368477,6081079.961086275,9.996082665961504,0.0,259.6690469917927,0.0 -2022-09-26 02:13:37,54.876092839541364,15.404323497922977,386.3636363636364,56.0,7.695363156351368,10.0,1000.0,5.517525756520004,384.93112063931045,0.591677383834513,0.38636363636363635,0.5428571428571428,192,53,1.8984905367989313,POINT (525943.5507038111 6081078.168473193),525943.5507038111,6081078.168473193,9.996082603974154,0.0,259.6691725367956,0.0 -2022-09-26 02:13:38,54.87607724060928,15.404170080073602,395.4545454545455,56.0,7.7923367858144506,10.0,1000.0,5.740315047006597,385.66931865480353,0.5959622220202898,0.3954545454545455,0.5428571428571428,197,53,0.28491192372041496,POINT (525933.7166669087 6081076.375881671),525933.7166669087,6081076.375881671,9.996082540889516,0.0,259.6692980806034,0.0 -2022-09-26 02:13:39,54.87606164167716,15.404016662283473,404.54545454545456,56.0,7.829260509106881,10.0,1000.0,5.963589501975488,386.32367490095606,0.597784460968113,0.40454545454545454,0.5428571428571428,201,53,358.5112007316257,POINT (525923.8826261399 6081074.58331171),525923.8826261399,6081074.58331171,9.99608247809149,0.0,259.6694236355144,0.0 -2022-09-26 02:13:40,54.876046042745,15.403863244552586,413.6363636363637,56.0,7.813387508431327,10.0,1000.0,6.300315182004712,387.22273932962963,0.5981091684978588,0.4136363636363637,0.5428571428571428,206,53,355.79321503648276,POINT (525914.0485815044 6081072.790763306),525914.0485815044,6081072.790763306,9.996082416186075,0.0,259.6695491750311,0.0 -2022-09-26 02:13:41,54.8760304438128,15.403709826880947,422.72727272727275,56.0,7.74649466964606,10.0,1000.0,6.613916364868128,388.00694605008096,0.5968602615552422,0.42272727272727273,0.5428571428571428,210,53,353.3747388187845,POINT (525904.2145330027 6081070.998236464),525904.2145330027,6081070.998236464,9.99608235325499,0.0,259.6696747297059,0.0 -2022-09-26 02:13:42,54.87601484488055,15.403556409268553,431.81818181818187,56.0,7.5965774834131246,10.0,1000.0,7.054194652213643,389.06710654644496,0.5935018761993233,0.4318181818181819,0.5428571428571428,215,53,350.3040768022116,POINT (525894.3804806349 6081069.20573118),525894.3804806349,6081069.20573118,9.996082291039926,0.0,259.6698002633757,0.0 -2022-09-26 02:13:43,54.87599924594827,15.403402991715405,440.90909090909093,56.0,7.384697136715559,10.0,1000.0,7.534792283545181,390.21291472985257,0.5882616750905612,0.4409090909090909,0.5428571428571428,220,53,347.46312904098255,POINT (525884.5464244006 6081067.413247457),525884.5464244006,6081067.413247457,9.996082228266884,0.0,259.66992582354465,0.0 -2022-09-26 02:13:44,54.87598364701595,15.403249574221501,450.00000000000006,56.0,7.185545882992146,10.0,1000.0,7.935057808903495,391.18776123065663,0.5828077672417545,0.45000000000000007,0.5428571428571428,224,53,345.52617132972557,POINT (525874.7123643004 6081065.620785291),525874.7123643004,6081065.620785291,9.996082166033272,0.0,259.6700513570979,0.0 -2022-09-26 02:13:45,54.875968048083585,15.403096156786843,459.0909090909091,56.0,6.924813434752718,10.0,1000.0,8.434482637458482,392.4730806708029,0.5745423538775019,0.4590909090909091,0.5428571428571428,229,53,343.6661387557341,POINT (525864.8783003336 6081063.828344687),525864.8783003336,6081063.828344687,9.996082103637761,0.0,259.67017691213806,0.0 -2022-09-26 02:13:46,54.875952449151185,15.402942739411431,468.18181818181824,56.0,6.727626932110949,10.0,1000.0,8.815987144576056,393.549104298326,0.5668762811247231,0.46818181818181825,0.5428571428571428,233,53,342.67042601100013,POINT (525855.0442325011 6081062.035925643),525855.0442325011,6081062.035925643,9.996082040770077,0.0,259.67030246121016,0.0 -2022-09-26 02:13:47,54.87593685021875,15.402789322095263,477.2727272727273,56.0,6.5212707259675655,10.0,1000.0,9.246045653606048,394.94463578959915,0.5561292513008959,0.4772727272727273,0.5428571428571428,238,53,342.01305924805763,POINT (525845.2101608021 6081060.243528158),525845.2101608021,6081060.243528158,9.996081978523032,0.0,259.67042801088206,0.0 -2022-09-26 02:13:48,54.87592125128628,15.402635904838341,486.3636363636364,56.0,6.401343981970546,10.0,1000.0,9.535284960263343,396.0934401272834,0.5467223695056065,0.4863636363636364,0.5428571428571428,242,53,341.8776038894488,POINT (525835.3760852371 6081058.451152235),525835.3760852371,6081058.451152235,9.996081915813404,0.0,259.67055356544824,0.0 -2022-09-26 02:13:49,54.875905652353765,15.402482487640665,495.4545454545455,56.0,6.309298621206668,10.0,1000.0,9.807953108964922,397.557593745386,0.5341283797372699,0.4954545454545455,0.5428571428571428,247,53,342.030218550316,POINT (525825.542005806 6081056.65879787),525825.542005806,6081056.65879787,9.996081853767283,0.0,259.6706791043807,0.0 -2022-09-26 02:13:50,54.8758900534212,15.402329070502232,504.54545454545456,56.0,6.264342642821776,10.0,1000.0,9.943403360849619,398.7412236298747,0.5235235403675739,0.5045454545454545,0.5428571428571428,251,53,342.2634760281568,POINT (525815.7079225088 6081054.866465064),525815.7079225088,6081054.866465064,9.99608179165462,0.0,259.670804643195,0.0 -2022-09-26 02:13:51,54.87587445448859,15.402175653423043,513.6363636363637,56.0,6.193346279961493,10.0,1000.0,10.0,400.2211366527049,0.5098002578242665,0.5136363636363638,0.5428571428571428,256,53,342.4242026610733,POINT (525805.8738353457 6081053.074153815),525805.8738353457,6081053.074153815,9.996081729475417,0.0,259.6709301818913,0.0 -2022-09-26 02:13:52,54.875858855555954,15.402022236403102,522.7272727272727,56.0,6.096687311169595,10.0,1000.0,9.953347516860797,401.3934288762747,0.4985959895069218,0.5227272727272727,0.5428571428571428,260,53,342.2205584011878,POINT (525796.0397443165 6081051.28186413),525796.0397443165,6081051.28186413,9.996081666738334,0.0,259.67105574708677,0.0 -2022-09-26 02:13:53,54.87584325662328,15.4018688194424,531.8181818181819,56.0,5.921251466228925,10.0,1000.0,9.784800865603625,402.8273654321837,0.48450742773318745,0.5318181818181819,0.5428571428571428,265,53,341.4070716903884,POINT (525786.2056494211 6081049.489596003),525786.2056494211,6081049.489596003,9.996081604884177,0.0,259.67118128602544,0.0 -2022-09-26 02:13:54,54.87582765769056,15.401715402540946,540.909090909091,56.0,5.750542662382095,10.0,1000.0,9.569991546851053,403.9364398943511,0.47331264145084206,0.540909090909091,0.5428571428571428,269,53,340.31098136292894,POINT (525776.3715506598 6081047.697349434),525776.3715506598,6081047.697349434,9.996081542848952,0.0,259.67130682472634,0.0 -2022-09-26 02:13:55,54.87581205875779,15.401561985698736,550.0,56.0,5.529651998907422,10.0,1000.0,9.21760707843997,405.2575838354206,0.45959210033712383,0.55,0.5428571428571428,274,53,338.49656087466883,POINT (525766.5374480325 6081045.905124426),525766.5374480325,6081045.905124426,9.996081480360777,0.0,259.6714323791839,0.0 -2022-09-26 02:13:56,54.87579645982498,15.401408568915771,559.0909090909091,56.0,5.372807501779332,10.0,1000.0,8.883038190784601,406.249367214505,0.4489502280686868,0.5590909090909091,0.5428571428571428,278,53,336.82997033053493,POINT (525756.7033415395 6081044.112920976),525756.7033415395,6081044.112920976,9.996081418307005,0.0,259.6715579177683,0.0 -2022-09-26 02:13:57,54.87578086089213,15.401255152192052,568.1818181818182,56.0,5.234067054626671,10.0,1000.0,8.419833583825238,407.3907326829488,0.4361940023530964,0.5681818181818182,0.5428571428571428,283,53,334.71065629013617,POINT (525746.8692311805 6081042.320739087),525746.8692311805,6081042.320739087,9.9960813560818,0.0,259.67168346697736,0.0 -2022-09-26 02:13:58,54.87576526195925,15.401101735527575,577.2727272727274,56.0,5.186559296606669,10.0,1000.0,7.929257023078183,408.4050158499709,0.4241465072611246,0.5772727272727274,0.5428571428571428,288,53,332.8242953210764,POINT (525737.0351169556 6081040.528578757),525737.0351169556,6081040.528578757,9.996081293904593,0.0,259.67180901618786,0.0 -2022-09-26 02:13:59,54.875749663026326,15.400948318922342,586.3636363636364,56.0,5.225707634691732,10.0,1000.0,7.531787037901938,409.1131403765764,0.41506175049319405,0.5863636363636364,0.5428571428571428,292,53,331.66566329416946,POINT (525727.200998865 6081038.736439986),525727.200998865,6081038.736439986,9.996081231994797,0.0,259.67193455477695,0.0 -2022-09-26 02:14:00,54.875734064093365,15.400794902376354,595.4545454545455,56.0,5.372932875167871,10.0,1000.0,7.043846377944089,409.8561080287369,0.4044095203646864,0.5954545454545455,0.5428571428571428,297,53,330.8359784677019,POINT (525717.3668769085 6081036.944322774),525717.3668769085,6081036.944322774,9.996081169966018,0.0,259.67206009861934,0.0 -2022-09-26 02:14:01,54.875718465160354,15.400641485889611,604.5454545454546,56.0,5.562203706701494,10.0,1000.0,6.669199085464619,410.32845547447056,0.3964314612885244,0.6045454545454546,0.5428571428571428,301,53,330.7479238136331,POINT (525707.5327510863 6081035.152227122),525707.5327510863,6081035.152227122,9.996081107703738,0.0,259.6721856475953,0.0 -2022-09-26 02:14:02,54.87570286622731,15.400488069462114,613.6363636363637,56.0,5.869268873264938,10.0,1000.0,6.228432255420693,410.7574065665654,0.38707826818216984,0.6136363636363638,0.5428571428571428,306,53,331.3697691051549,POINT (525697.6986213983 6081033.36015303),525697.6986213983,6081033.36015303,9.996081045770948,0.0,259.67231119144077,0.0 -2022-09-26 02:14:03,54.87568726729422,15.400334653093859,622.7272727272727,56.0,6.153177972975799,10.0,1000.0,5.9012542530301335,410.9665169014606,0.3800248927478297,0.6227272727272728,0.5428571428571428,310,53,332.3738917713323,POINT (525687.8644878445 6081031.568100497),525687.8644878445,6081031.568100497,9.996080983719187,0.0,259.67243674053947,0.0 -2022-09-26 02:14:04,54.87567166836109,15.400181236784851,631.8181818181819,56.0,6.53176368256685,10.0,1000.0,5.525909272690955,411.05635789795247,0.3716331698363412,0.6318181818181818,0.5428571428571428,315,53,334.0209892300277,POINT (525678.0303504255 6081029.776069522),525678.0303504255,6081029.776069522,9.99608092164366,0.0,259.67256227328653,0.0 -2022-09-26 02:14:05,54.87565606942792,15.400027820535085,640.909090909091,56.0,6.840093428808829,10.0,1000.0,5.252357893846246,410.99000768254933,0.3651656877351606,0.640909090909091,0.5428571428571428,319,53,335.447818144067,POINT (525668.1962091404 6081027.984060108),525668.1962091404,6081027.984060108,9.996080859864517,0.0,259.67268782799897,0.0 -2022-09-26 02:14:06,54.87564047049471,15.399874404344564,650.0,56.0,7.211677496922831,10.0,1000.0,4.942215555574411,410.73565175237206,0.3572539676569618,0.65,0.5428571428571428,324,53,337.18947717641686,POINT (525658.3620639896 6081026.192072253),525658.3620639896,6081026.192072253,9.99608079789464,0.0,259.67281337161137,0.0 -2022-09-26 02:14:07,54.87562487156146,15.399720988213286,659.0909090909091,56.0,7.479406516148098,10.0,1000.0,4.717761856005112,410.39801226905877,0.3509612018490908,0.6590909090909092,0.5428571428571428,328,53,338.4639967585346,POINT (525648.5279149736 6081024.400105957),525648.5279149736,6081024.400105957,9.996080735743698,0.0,259.67293891498616,0.0 -2022-09-26 02:14:08,54.875609272628175,15.399567572141251,668.1818181818182,56.0,7.754113225723904,10.0,1000.0,4.464066699325028,409.81482642364364,0.34300796587008875,0.6681818181818182,0.5428571428571428,333,53,339.84927234019915,POINT (525638.6937620917 6081022.608161221),525638.6937620917,6081022.608161221,9.996080673931912,0.0,259.67306446409265,0.0 -2022-09-26 02:14:09,54.875593673694844,15.399414156128461,677.2727272727274,56.0,7.913524361555375,10.0,1000.0,4.280595572689535,409.22601110697815,0.33648254152275076,0.6772727272727274,0.5428571428571428,337,53,340.7838003005282,POINT (525628.8596053442 6081020.816238043),525628.8596053442,6081020.816238043,9.996080612439917,0.0,259.67318999720635,0.0 -2022-09-26 02:14:10,54.87557807476148,15.399260740174917,686.3636363636364,56.0,8.030045858183446,10.0,1000.0,4.073074955809973,408.3482604262948,0.3280083463281569,0.6863636363636364,0.5428571428571428,342,53,341.7661809629301,POINT (525619.0254447313 6081019.0243364265),525619.0254447313,6081019.0243364265,9.996080550046633,0.0,259.6733155564605,0.0 -2022-09-26 02:14:11,54.87556247582806,15.399107324280614,695.4545454545455,56.0,8.059049366411585,10.0,1000.0,3.8872520011949696,407.32757489158513,0.31907148147238007,0.6954545454545455,0.5428571428571428,347,53,342.61380086701354,POINT (525609.1912802529 6081017.232456368),525609.1912802529,6081017.232456368,9.99608048848367,0.0,259.673441094829,0.0 -2022-09-26 02:14:12,54.87554687689462,15.398953908445554,704.5454545454546,56.0,8.030668745018573,10.0,1000.0,3.7525645753614283,406.41983976296194,0.3115227669414728,0.7045454545454546,0.5428571428571428,351,53,343.2623933431545,POINT (525599.3571119088 6081015.440597868),525599.3571119088,6081015.440597868,9.996080427135642,0.0,259.67356662794737,0.0 -2022-09-26 02:14:13,54.87553127796112,15.398800492669737,713.6363636363637,56.0,7.953651010081808,10.0,1000.0,3.5997963325813735,405.18713489514613,0.30152451254915524,0.7136363636363637,0.5428571428571428,356,53,344.1275678167267,POINT (525589.5229396995 6081013.648760929),525589.5229396995,6081013.648760929,9.996080364771823,0.0,259.67369218708654,0.0 -2022-09-26 02:14:14,54.875515679027586,15.398647076953164,722.7272727272727,56.0,7.879131455998172,10.0,1000.0,3.4887607515671437,404.1350257061824,0.2930437677218705,0.7227272727272728,0.5428571428571428,360,53,344.92490530138707,POINT (525579.6887636245 6081011.856945546),525579.6887636245,6081011.856945546,9.996080303686714,0.0,259.6738177149563,0.0 -2022-09-26 02:14:15,54.87550008009402,15.398493661295834,731.8181818181819,56.0,7.796108932766476,10.0,1000.0,3.362292024859599,402.75474836503366,0.2818179626252678,0.7318181818181819,0.5428571428571428,365,53,346.1106562578229,POINT (525569.8545836844 6081010.065151726),525569.8545836844,6081010.065151726,9.996080241304362,0.0,259.67394327397903,0.0 -2022-09-26 02:14:16,54.875484481160406,15.398340245697748,740.909090909091,56.0,7.751380682869868,10.0,1000.0,3.269811589213471,401.6113590000444,0.27233729815820656,0.740909090909091,0.5428571428571428,369,53,347.22158478796507,POINT (525560.0203998787 6081008.273379464),525560.0203998787,6081008.273379464,9.996080179866823,0.0,259.67406881223565,0.0 -2022-09-26 02:14:17,54.875468882226755,15.398186830158908,750.0000000000001,56.0,7.724029516300536,10.0,1000.0,3.1635930008674933,400.1503731436059,0.25988355548834785,0.7500000000000001,0.5428571428571428,374,53,348.76486602352037,POINT (525550.1862122079 6081006.481628761),525550.1862122079,6081006.481628761,9.996080118081276,0.0,259.67419435550636,0.0 -2022-09-26 02:14:18,54.87545328329307,15.398033414679308,759.0909090909091,56.0,7.707567094861029,10.0,1000.0,3.0850964507045493,398.96857694261445,0.2494708480173479,0.7590909090909091,0.5428571428571428,378,53,350.02050525358993,POINT (525540.3520206716 6081004.689899617),525540.3520206716,6081004.689899617,9.996080056572783,0.0,259.6743198990178,0.0 -2022-09-26 02:14:19,54.87543768435933,15.39787999925895,768.1818181818182,56.0,7.668331924095755,10.0,1000.0,2.99382259064508,397.49092991699354,0.235957185746915,0.7681818181818183,0.5428571428571428,383,53,351.36881274111755,POINT (525530.51782527 6081002.898192033),525530.51782527,6081002.898192033,9.996079994830819,0.0,259.6744454476629,0.0 -2022-09-26 02:14:20,54.875422085425555,15.397726583897839,777.2727272727274,56.0,7.618627511538817,10.0,1000.0,2.925469266119294,396.3194771272193,0.22480950185948811,0.7772727272727273,0.5428571428571428,387,53,352.1302368309862,POINT (525520.6836260032 6081001.106506007),525520.6836260032,6081001.106506007,9.99607993340858,0.0,259.6745709803152,0.0 -2022-09-26 02:14:21,54.87540648649174,15.397573168595969,786.3636363636364,56.0,7.5419142216637995,10.0,1000.0,2.844946288750122,394.8820006557576,0.21055216135373947,0.7863636363636364,0.5428571428571428,392,53,352.6105774918156,POINT (525510.8494228713 6080999.31484154),525510.8494228713,6080999.31484154,9.996079871815002,0.0,259.67469652359205,0.0 -2022-09-26 02:14:22,54.87539088755788,15.397419753353342,795.4545454545455,56.0,7.479767860164353,10.0,1000.0,2.783924194671659,393.76245684891165,0.19897003640240774,0.7954545454545455,0.5428571428571428,396,53,352.62953256182334,POINT (525501.0152158738 6080997.523198632),525501.0152158738,6080997.523198632,9.996079810498475,0.0,259.6748220671097,0.0 -2022-09-26 02:14:23,54.875375288624,15.397266338169958,804.5454545454546,56.0,7.416721828515662,10.0,1000.0,2.7113524942247937,392.41158604754315,0.18439053248419873,0.8045454545454546,0.5428571428571428,401,53,352.27942265240563,POINT (525491.1810050113 6080995.731577285),525491.1810050113,6080995.731577285,9.996079748552503,0.0,259.67494762077354,0.0 -2022-09-26 02:14:24,54.87535968969007,15.397112923045817,813.6363636363637,56.0,7.383758461512102,10.0,1000.0,2.642499674814768,391.12444308963387,0.16983426565599227,0.8136363636363637,0.5428571428571428,406,53,351.65794264868595,POINT (525481.3467902837 6080993.939977498),525481.3467902837,6080993.939977498,9.996079686821455,0.0,259.6750731691872,0.0 -2022-09-26 02:14:25,54.87534409075611,15.396959507980922,822.7272727272727,56.0,7.3845395078718985,10.0,1000.0,2.5899257891090306,390.1463302054355,0.15830420152115124,0.8227272727272728,0.5428571428571428,410,53,351.08662756809196,POINT (525471.5125716911 6080992.148399268),525471.5125716911,6080992.148399268,9.99607962552463,0.0,259.6751987017276,0.0 -2022-09-26 02:14:26,54.87532849182209,15.396806092975268,831.8181818181819,56.0,7.419259230012166,10.0,1000.0,2.5272568112596505,388.9936178446631,0.14415408115103534,0.8318181818181819,0.5428571428571428,415,53,350.4325219471707,POINT (525461.6783492335 6080990.356842598),525461.6783492335,6080990.356842598,9.996079563941953,0.0,259.67532424477304,0.0 -2022-09-26 02:14:27,54.87531289288805,15.396652678028858,840.909090909091,56.0,7.4691092481711365,10.0,1000.0,2.4795596301543408,388.1302545164731,0.1331268454488602,0.8409090909090909,0.5428571428571428,419,53,350.0563449105189,POINT (525451.8441229106 6080988.565307487),525451.8441229106,6080988.565307487,9.996079502636329,0.0,259.67544978805915,0.0 -2022-09-26 02:14:28,54.87529729395396,15.396499263141687,850.0000000000001,56.0,7.547672939808047,10.0,1000.0,2.4230398248392513,387.12693175065016,0.11981041986945723,0.8500000000000001,0.5428571428571428,424,53,349.8645583216254,POINT (525442.0098927225 6080986.773793937),525442.0098927225,6080986.773793937,9.996079441159402,0.0,259.67557534196993,0.0 -2022-09-26 02:14:29,54.87528169501982,15.39634584831376,859.0909090909091,56.0,7.613798347518172,10.0,1000.0,2.380366579340154,386.3857238443877,0.10959773957491123,0.8590909090909091,0.5428571428571428,428,53,349.96209062600354,POINT (525432.1756586696 6080984.982301941),525432.1756586696,6080984.982301941,9.9960793803262,0.0,259.6757008585221,0.0 -2022-09-26 02:14:30,54.875266096085646,15.396192433545078,868.1818181818182,56.0,7.690195019835782,10.0,1000.0,2.330290448549519,385.5357965473182,0.09745796283136525,0.8681818181818183,0.5428571428571428,433,53,350.3614078176004,POINT (525422.3414207518 6080983.190831508),525422.3414207518,6080983.190831508,9.99607931832023,0.0,259.67582641720935,0.0 -2022-09-26 02:14:31,54.875250497151434,15.396039018835635,877.2727272727274,56.0,7.744825578367885,10.0,1000.0,2.292897032212566,384.9161404784969,0.08829208899839702,0.8772727272727273,0.5428571428571428,437,53,350.808662028412,POINT (525412.5071789687 6080981.399382633),525412.5071789687,6080981.399382633,9.996079257206574,0.0,259.6759519605016,0.0 -2022-09-26 02:14:32,54.87523489821719,15.395885604185438,886.3636363636365,56.0,7.805276115533294,10.0,1000.0,2.2495376975552235,384.2146774093036,0.07756266406570006,0.8863636363636365,0.5428571428571428,442,53,351.36845662010217,POINT (525402.6729333211 6080979.607955318),525402.6729333211,6080979.607955318,9.99607919556826,0.0,259.6760775031976,0.0 -2022-09-26 02:14:33,54.8752192992829,15.39573218959448,895.4545454545455,56.0,7.820094785712839,10.0,1000.0,2.2175665364415655,383.7097445357575,0.06958403857776362,0.8954545454545455,0.5428571428571428,446,53,351.8362675518731,POINT (525392.8386838082 6080977.816549562),525392.8386838082,6080977.816549562,9.99607913455059,0.0,259.67620304649296,0.0 -2022-09-26 02:14:34,54.875203700348564,15.395578775062766,904.5454545454546,56.0,7.769397535321892,10.0,1000.0,2.1809736966675497,383.14523269651386,0.06038281892464167,0.9045454545454547,0.5428571428571428,451,53,352.3847513376985,POINT (525383.0044304305 6080976.025165363),525383.0044304305,6080976.025165363,9.996079073571122,0.0,259.6763285789276,0.0 -2022-09-26 02:14:35,54.875188101414196,15.395425360590295,913.6363636363637,56.0,7.66992585767593,10.0,1000.0,2.1543494750973005,382.74389151736375,0.05364127801878075,0.9136363636363637,0.5428571428571428,455,53,352.6720482338434,POINT (525373.1701731881 6080974.233802725),525373.1701731881,6080974.233802725,9.99607901190988,0.0,259.6764541268799,0.0 -2022-09-26 02:14:36,54.875172502479785,15.395271946177065,922.7272727272727,56.0,7.4840729103528005,10.0,1000.0,2.124282011545029,382.30061142669337,0.04597884829099679,0.9227272727272727,0.5428571428571428,460,53,352.65861260717855,POINT (525363.3359120806 6080972.442461645),525363.3359120806,6080972.442461645,9.996078950921653,0.0,259.67657967006033,0.0 -2022-09-26 02:14:37,54.87515690354533,15.395118531823078,931.8181818181819,56.0,7.303941143784371,10.0,1000.0,2.1026997791065396,381.98925781059404,0.040445256435146563,0.9318181818181819,0.5428571428571428,464,53,352.2458318561611,POINT (525353.5016471087 6080970.651142125),525353.5016471087,6080970.651142125,9.996078889294234,0.0,259.6767052125248,0.0 -2022-09-26 02:14:38,54.87514130461083,15.394965117528333,940.909090909091,56.0,7.070138605041215,10.0,1000.0,2.0786514260721543,381.6494305031267,0.03424414116136867,0.940909090909091,0.5428571428571428,469,53,351.1720641532876,POINT (525343.6673782716 6080968.859844163),525343.6673782716,6080968.859844163,9.996078828683414,0.0,259.6768307505761,0.0 -2022-09-26 02:14:39,54.87512570567629,15.394811703292833,950.0,56.0,6.86324521704577,10.0,1000.0,2.0576545067633014,381.3592252701681,0.028797033140430105,0.95,0.5428571428571428,474,53,349.5400266873908,POINT (525333.8331055702 6080967.0685677575),525333.8331055702,6080967.0685677575,9.996078767538119,0.0,259.67695627716876,0.0 -2022-09-26 02:14:40,54.87512570567629,15.394811703292833,950.0,67.0,5.791995567729455,10.0,1000.0,2.010664233430382,380.9894479739405,0.034698269779826964,0.95,0.6214285714285714,474,61,344.8025066755929,POINT (525333.8331055702 6080967.0685677575),525333.8331055702,6080967.0685677575,0.0,11.0,0.0,90.0 -2022-09-26 02:14:41,54.87514130461083,15.394965117528333,940.909090909091,67.0,5.677951596707353,10.0,1000.0,2.0224977410645097,381.2011548393577,0.04134605748951551,0.940909090909091,0.6214285714285714,469,61,345.7407875991107,POINT (525343.6673782716 6080968.859844163),525343.6673782716,6080968.859844163,9.996078767538119,0.0,79.67695627716877,0.0 -2022-09-26 02:14:42,54.87515690354533,15.395118531823078,931.8181818181819,67.0,5.702653381566098,10.0,1000.0,2.036050760954627,381.44926871395757,0.048908254748672615,0.9318181818181819,0.6214285714285714,464,61,346.91428434896386,POINT (525353.5016471087 6080970.651142125),525353.5016471087,6080970.651142125,9.996078828683414,0.0,79.67683075057609,0.0 -2022-09-26 02:14:43,54.875172502479785,15.395271946177065,922.7272727272727,67.0,5.818653076040822,10.0,1000.0,2.0482134231825935,381.67679447299486,0.05564783346603837,0.9227272727272727,0.6214285714285714,460,61,347.961029229437,POINT (525363.3359120806 6080972.442461645),525363.3359120806,6080972.442461645,9.996078889294234,0.0,79.6767052125248,0.0 -2022-09-26 02:14:44,54.875188101414196,15.395425360590295,913.6363636363637,67.0,6.061470755034205,10.0,1000.0,2.0651565846018176,382.00106808772864,0.06496237522247787,0.9136363636363637,0.6214285714285714,455,61,349.3288190789921,POINT (525373.1701731881 6080974.233802725),525373.1701731881,6080974.233802725,9.996078950921653,0.0,79.67657967006032,0.0 -2022-09-26 02:14:45,54.875203700348564,15.395578775062766,904.5454545454546,67.0,6.308173651899839,10.0,1000.0,2.0801576507192348,382.29501736009365,0.07313681307578068,0.9045454545454547,0.6214285714285714,451,61,350.4210571364068,POINT (525383.0044304305 6080976.025165363),525383.0044304305,6080976.025165363,9.99607901190988,0.0,79.67645412687992,0.0 -2022-09-26 02:14:46,54.8752192992829,15.39573218959448,895.4545454545455,67.0,6.643388555535594,10.0,1000.0,2.100771830409402,382.7090667716379,0.08425719900024843,0.8954545454545455,0.6214285714285714,446,61,351.7347758874735,POINT (525392.8386838082 6080977.816549562),525392.8386838082,6080977.816549562,9.996079073571122,0.0,79.67632857892761,0.0 -2022-09-26 02:14:47,54.87523489821719,15.395885604185438,886.3636363636365,67.0,6.909648415826348,10.0,1000.0,2.118778445662287,383.0800229615684,0.09386139157692491,0.8863636363636365,0.6214285714285714,442,61,352.7260190453792,POINT (525402.6729333211 6080979.607955318),525402.6729333211,6080979.607955318,9.99607913455059,0.0,79.67620304649294,0.0 -2022-09-26 02:14:48,54.875250497151434,15.396039018835635,877.2727272727274,67.0,7.23103436680312,10.0,1000.0,2.1431924533577495,383.5963512368861,0.10671319562174336,0.8772727272727273,0.6214285714285714,437,61,353.89692280530386,POINT (525412.5071789687 6080981.399382633),525412.5071789687,6080981.399382633,9.99607919556826,0.0,79.67607750319758,0.0 -2022-09-26 02:14:49,54.875266096085646,15.396192433545078,868.1818181818182,67.0,7.491841858387684,10.0,1000.0,2.1642411302373086,384.0534591230637,0.11762801016382392,0.8681818181818183,0.6214285714285714,433,61,354.7389081911624,POINT (525422.3414207518 6080983.190831508),525422.3414207518,6080983.190831508,9.996079257206574,0.0,79.67595196050164,0.0 -2022-09-26 02:14:50,54.87528169501982,15.39634584831376,859.0909090909091,67.0,7.820491302965389,10.0,1000.0,2.1924211448985407,384.68202565181247,0.1319825613742651,0.8590909090909091,0.6214285714285714,428,61,355.4134148850405,POINT (525432.1756586696 6080984.982301941),525432.1756586696,6080984.982301941,9.99607931832023,0.0,79.67582641720934,0.0 -2022-09-26 02:14:51,54.87529729395396,15.396499263141687,850.0000000000001,67.0,8.072248405716541,10.0,1000.0,2.2164308204958183,385.23176423095987,0.14395889609264242,0.8500000000000001,0.6214285714285714,424,61,355.56519473413783,POINT (525442.0098927225 6080986.773793937),525442.0098927225,6080986.773793937,9.9960793803262,0.0,79.67570085852209,0.0 -2022-09-26 02:14:52,54.87531289288805,15.396652678028858,840.909090909091,67.0,8.351446770106136,10.0,1000.0,2.2482323133442192,385.9783780049679,0.15942140563607457,0.8409090909090909,0.6214285714285714,419,61,355.31540936691874,POINT (525451.8441229106 6080988.565307487),525451.8441229106,6080988.565307487,9.996079441159402,0.0,79.67557534196995,0.0 -2022-09-26 02:14:53,54.87532849182209,15.396806092975268,831.8181818181819,67.0,8.531943927821931,10.0,1000.0,2.2750807609586685,386.6232440189884,0.17207823847602113,0.8318181818181819,0.6214285714285714,415,61,354.86904012576656,POINT (525461.6783492335 6080990.356842598),525461.6783492335,6080990.356842598,9.996079502636329,0.0,79.67544978805917,0.0 -2022-09-26 02:14:54,54.87534409075611,15.396959507980922,822.7272727272727,67.0,8.690910438211032,10.0,1000.0,2.3103949529785397,387.4879209858518,0.18809600988241623,0.8227272727272728,0.6214285714285714,410,61,354.1848694479023,POINT (525471.5125716911 6080992.148399268),525471.5125716911,6080992.148399268,9.996079563941953,0.0,79.67532424477302,0.0 -2022-09-26 02:14:55,54.87535968969007,15.397112923045817,813.6363636363637,67.0,8.76166864285549,10.0,1000.0,2.3400801597814818,388.2251514633223,0.20093611920938872,0.8136363636363637,0.6214285714285714,406,61,353.6706825891611,POINT (525481.3467902837 6080993.939977498),525481.3467902837,6080993.939977498,9.99607962552463,0.0,79.6751987017276,0.0 -2022-09-26 02:14:56,54.875375288624,15.397266338169958,804.5454545454546,67.0,8.785302424866767,10.0,1000.0,2.379091203481101,389.2006128692328,0.2168300443019106,0.8045454545454546,0.6214285714285714,401,61,353.21609760101586,POINT (525491.1810050113 6080995.731577285),525491.1810050113,6080995.731577285,9.996079686821455,0.0,79.6750731691872,0.0 -2022-09-26 02:14:57,54.87539088755788,15.397419753353342,795.4545454545455,67.0,8.75392274176201,10.0,1000.0,2.4204549018880357,390.23139578551235,0.23233238858990432,0.7954545454545455,0.6214285714285714,396,61,353.0700797980188,POINT (525501.0152158738 6080997.523198632),525501.0152158738,6080997.523198632,9.996079748552503,0.0,79.67494762077354,0.0 -2022-09-26 02:14:58,54.87540648649174,15.397573168595969,786.3636363636364,67.0,8.7067385413327,10.0,1000.0,2.4555056086576372,391.09160580282594,0.24429348164279263,0.7863636363636364,0.6214285714285714,392,61,353.1965067365193,POINT (525510.8494228713 6080999.31484154),525510.8494228713,6080999.31484154,9.996079810498475,0.0,79.67482206710969,0.0 -2022-09-26 02:14:59,54.875422085425555,15.397726583897839,777.2727272727274,67.0,8.644607180858973,10.0,1000.0,2.5022492579977063,392.2047764505702,0.2584984372978718,0.7772727272727273,0.6214285714285714,387,61,353.62168190559913,POINT (525520.6836260032 6081001.106506007),525520.6836260032,6081001.106506007,9.996079871815002,0.0,79.67469652359208,0.0 -2022-09-26 02:15:00,54.87543768435933,15.39787999925895,768.1818181818182,67.0,8.60794468585242,10.0,1000.0,2.5424615010575278,393.11987382869614,0.2691263925614521,0.7681818181818183,0.6214285714285714,383,61,354.1143769734848,POINT (525530.51782527 6081002.898192033),525530.51782527,6081002.898192033,9.99607993340858,0.0,79.6745709803152,0.0 -2022-09-26 02:15:01,54.87545328329307,15.398033414679308,759.0909090909091,67.0,8.588233465892154,10.0,1000.0,2.5970502125763537,394.28552862497725,0.2813183831691466,0.7590909090909091,0.6214285714285714,378,61,354.81991537349404,POINT (525540.3520206716 6081004.689899617),525540.3520206716,6081004.689899617,9.996079994830819,0.0,79.67444544766292,0.0 -2022-09-26 02:15:02,54.875468882226755,15.398186830158908,750.0000000000001,67.0,8.585889254539946,10.0,1000.0,2.6448985747332294,395.2280391065353,0.2900833436956403,0.7500000000000001,0.6214285714285714,374,61,355.39466897919726,POINT (525550.1862122079 6081006.481628761),525550.1862122079,6081006.481628761,9.996080056572783,0.0,79.6743198990178,0.0 -2022-09-26 02:15:03,54.875484481160406,15.398340245697748,740.909090909091,67.0,8.589309601773108,10.0,1000.0,2.711057815231538,396.40764023824084,0.29967397549497626,0.740909090909091,0.6214285714285714,369,61,356.16346604821,POINT (525560.0203998787 6081008.273379464),525560.0203998787,6081008.273379464,9.996080118081276,0.0,79.67419435550636,0.0 -2022-09-26 02:15:04,54.87550008009402,15.398493661295834,731.8181818181819,67.0,8.6055101978285,10.0,1000.0,2.7700125884923104,397.3436453427571,0.3061785525206859,0.7318181818181819,0.6214285714285714,365,61,356.85925214022535,POINT (525569.8545836844 6081010.065151726),525569.8545836844,6081010.065151726,9.996080179866823,0.0,79.67406881223566,0.0 -2022-09-26 02:15:05,54.875515679027586,15.398647076953164,722.7272727272727,67.0,8.63639322368829,10.0,1000.0,2.8526558063871925,398.49141304314537,0.31277948737544825,0.7227272727272728,0.6214285714285714,360,61,357.6988804511943,POINT (525579.6887636245 6081011.856945546),525579.6887636245,6081011.856945546,9.996080241304362,0.0,79.67394327397903,0.0 -2022-09-26 02:15:06,54.87553127796112,15.398800492669737,713.6363636363637,67.0,8.655246001963953,10.0,1000.0,2.92708074457978,399.38202642758637,0.31680992701648036,0.7136363636363637,0.6214285714285714,356,61,358.1748864326223,POINT (525589.5229396995 6081013.648760929),525589.5229396995,6081013.648760929,9.996080303686714,0.0,79.6738177149563,0.0 -2022-09-26 02:15:07,54.87554687689462,15.398953908445554,704.5454545454546,67.0,8.647229406405897,10.0,1000.0,3.0321858601858924,400.4472343761863,0.3202852740365294,0.7045454545454546,0.6214285714285714,351,61,358.2852033488514,POINT (525599.3571119088 6081015.440597868),525599.3571119088,6081015.440597868,9.996080364771823,0.0,79.67369218708659,0.0 -2022-09-26 02:15:08,54.87556247582806,15.399107324280614,695.4545454545455,67.0,8.598422665795832,10.0,1000.0,3.127294918544534,401.25078692479633,0.32184250365094813,0.6954545454545455,0.6214285714285714,347,61,357.84840169629314,POINT (525609.1912802529 6081017.232456368),525609.1912802529,6081017.232456368,9.996080427135642,0.0,79.67356662794735,0.0 -2022-09-26 02:15:09,54.87557807476148,15.399260740174917,686.3636363636364,67.0,8.467289835910947,10.0,1000.0,3.261980513943781,402.18090138701564,0.3223324551607405,0.6863636363636364,0.6214285714285714,342,61,356.56113024908444,POINT (525619.0254447313 6081019.0243364265),525619.0254447313,6081019.0243364265,9.99608048848367,0.0,79.67344109482902,0.0 -2022-09-26 02:15:10,54.875593673694844,15.399414156128461,677.2727272727274,67.0,8.249545689181964,10.0,1000.0,3.416708372233452,403.0138340098284,0.3213241208543732,0.6772727272727274,0.6214285714285714,337,61,354.4968298431009,POINT (525628.8596053442 6081020.816238043),525628.8596053442,6081020.816238043,9.996080550046633,0.0,79.67331555646051,0.0 -2022-09-26 02:15:11,54.875609272628175,15.399567572141251,668.1818181818182,67.0,8.014710718107104,10.0,1000.0,3.5568926759866053,403.6002448231718,0.3195502195827822,0.6681818181818182,0.6214285714285714,333,61,352.413551306011,POINT (525638.6937620917 6081022.608161221),525638.6937620917,6081022.608161221,9.996080612439917,0.0,79.67318999720634,0.0 -2022-09-26 02:15:12,54.87562487156146,15.399720988213286,659.0909090909091,67.0,7.657375251115696,10.0,1000.0,3.75530633245247,404.2219057111583,0.3162923529981583,0.6590909090909092,0.6214285714285714,328,61,349.5251550461151,POINT (525648.5279149736 6081024.400105957),525648.5279149736,6081024.400105957,9.996080673931912,0.0,79.67306446409265,0.0 -2022-09-26 02:15:13,54.87564047049471,15.399874404344564,650.0,67.0,7.334555331964295,10.0,1000.0,3.9346641906678723,404.62258723524627,0.31299605472195713,0.65,0.6214285714285714,324,61,347.20739137359965,POINT (525658.3620639896 6081026.192072253),525658.3620639896,6081026.192072253,9.996080735743698,0.0,79.67293891498615,0.0 -2022-09-26 02:15:14,54.87565606942792,15.400027820535085,640.909090909091,67.0,6.906574603595032,10.0,1000.0,4.187383470249701,404.9939639891425,0.30822281622550346,0.640909090909091,0.6214285714285714,319,61,344.56558617284793,POINT (525668.1962091404 6081027.984060108),525668.1962091404,6081027.984060108,9.99608079789464,0.0,79.67281337161138,0.0 -2022-09-26 02:15:15,54.87567166836109,15.400181236784851,631.8181818181819,67.0,6.55861374542825,10.0,1000.0,4.41415326023631,405.1823492232958,0.30404700399169426,0.6318181818181818,0.6214285714285714,315,61,342.7597564050443,POINT (525678.0303504255 6081029.776069522),525678.0303504255,6081029.776069522,9.996080859864517,0.0,79.67268782799894,0.0 -2022-09-26 02:15:16,54.87568726729422,15.400334653093859,622.7272727272727,67.0,6.1254908769848395,10.0,1000.0,4.729984000036429,405.27698733015586,0.2986095536341651,0.6227272727272728,0.6214285714285714,310,61,340.7949618722585,POINT (525687.8644878445 6081031.568100497),525687.8644878445,6081031.568100497,9.99608092164366,0.0,79.67256227328654,0.0 -2022-09-26 02:15:17,54.87570286622731,15.400488069462114,613.6363636363637,67.0,5.78404254538316,10.0,1000.0,5.008807123539472,405.2379301929377,0.29425607003608106,0.6136363636363638,0.6214285714285714,306,61,339.36365080309207,POINT (525697.6986213983 6081033.36015303),525697.6986213983,6081033.36015303,9.996080983719187,0.0,79.67243674053948,0.0 -2022-09-26 02:15:18,54.875718465160354,15.400641485889611,604.5454545454546,67.0,5.380428016814318,10.0,1000.0,5.38852918837655,405.04508648574995,0.289034389634961,0.6045454545454546,0.6214285714285714,301,61,337.83004715757113,POINT (525707.5327510863 6081035.152227122),525707.5327510863,6081035.152227122,9.996081045770948,0.0,79.67231119144077,0.0 -2022-09-26 02:15:19,54.875734064093365,15.400794902376354,595.4545454545455,67.0,5.092638864702451,10.0,1000.0,5.714350403250374,404.77689864565815,0.28519219090832015,0.5954545454545455,0.6214285714285714,297,61,336.89665841551374,POINT (525717.3668769085 6081036.944322774),525717.3668769085,6081036.944322774,9.996081107703738,0.0,79.6721856475953,0.0 -2022-09-26 02:15:20,54.875749663026326,15.400948318922342,586.3636363636364,67.0,4.797552077192824,10.0,1000.0,6.142382122929999,404.3033554766132,0.2810066876784382,0.5863636363636364,0.6214285714285714,292,61,336.2031705925865,POINT (525727.200998865 6081038.736439986),525727.200998865,6081038.736439986,9.996081169966018,0.0,79.67206009861934,0.0 -2022-09-26 02:15:21,54.87576526195925,15.401101735527575,577.2727272727274,67.0,4.624013746254756,10.0,1000.0,6.494046821795056,403.8185941661765,0.27828444983329303,0.5772727272727274,0.6214285714285714,288,61,336.0734731290802,POINT (525737.0351169556 6081040.528578757),525737.0351169556,6081040.528578757,9.996081231994797,0.0,79.67193455477698,0.0 -2022-09-26 02:15:22,54.87578086089213,15.401255152192052,568.1818181818182,67.0,4.490433822144046,10.0,1000.0,6.9322320654470255,403.0887365552174,0.2758185510801227,0.5681818181818182,0.6214285714285714,283,61,336.4420706600366,POINT (525746.8692311805 6081042.320739087),525746.8692311805,6081042.320739087,9.996081293904593,0.0,79.67180901618788,0.0 -2022-09-26 02:15:23,54.87579645982498,15.401408568915771,559.0909090909091,67.0,4.4426302912146625,10.0,1000.0,7.351520837586072,402.2329537096131,0.2745332328611727,0.5590909090909091,0.6214285714285714,278,61,337.31719415277394,POINT (525756.7033415395 6081044.112920976),525756.7033415395,6081044.112920976,9.9960813560818,0.0,79.67168346697733,0.0 -2022-09-26 02:15:24,54.87581205875779,15.401561985698736,550.0,67.0,4.452976594215206,10.0,1000.0,7.659581944762852,401.46749388689443,0.27443200611096885,0.55,0.6214285714285714,274,61,338.26988226704134,POINT (525766.5374480325 6081045.905124426),525766.5374480325,6081045.905124426,9.996081418307005,0.0,79.67155791776834,0.0 -2022-09-26 02:15:25,54.87582765769056,15.401715402540946,540.909090909091,67.0,4.501643311098728,10.0,1000.0,7.992953932122378,400.42341901000196,0.2755278919287024,0.540909090909091,0.6214285714285714,269,61,339.58582788426963,POINT (525776.3715506598 6081047.697349434),525776.3715506598,6081047.697349434,9.996081480360777,0.0,79.67143237918391,0.0 -2022-09-26 02:15:26,54.87584325662328,15.4018688194424,531.8181818181819,67.0,4.547536934664134,10.0,1000.0,8.206263415214059,399.52941226476526,0.277406163673616,0.5318181818181819,0.6214285714285714,265,61,340.5834482430812,POINT (525786.2056494211 6081049.489596003),525786.2056494211,6081049.489596003,9.996081542848952,0.0,79.67130682472639,0.0 -2022-09-26 02:15:27,54.875858855555954,15.402022236403102,522.7272727272727,67.0,4.586178874470983,10.0,1000.0,8.392927818872165,398.3540748359233,0.2810055599086358,0.5227272727272727,0.6214285714285714,260,61,341.57626912604866,POINT (525796.0397443165 6081051.28186413),525796.0397443165,6081051.28186413,9.996081604884177,0.0,79.67118128602543,0.0 -2022-09-26 02:15:28,54.87587445448859,15.402175653423043,513.6363636363637,67.0,4.5883628650634884,10.0,1000.0,8.471696168592695,397.3794055269566,0.2848621317468431,0.5136363636363638,0.6214285714285714,256,61,342.08547570993267,POINT (525805.8738353457 6081053.074153815),525805.8738353457,6081053.074153815,9.996081666738334,0.0,79.67105574708677,0.0 -2022-09-26 02:15:29,54.8758900534212,15.402329070502232,504.54545454545456,67.0,4.554893534554678,10.0,1000.0,8.478572080500324,396.1340315787784,0.29083980347073995,0.5045454545454545,0.6214285714285714,251,61,342.39713354351744,POINT (525815.7079225088 6081054.866465064),525815.7079225088,6081054.866465064,9.996081729475417,0.0,79.67093018189131,0.0 -2022-09-26 02:15:30,54.875905652353765,15.402482487640665,495.4545454545455,67.0,4.5161626735817,10.0,1000.0,8.412770091436602,395.1276975707652,0.29647653961416864,0.4954545454545455,0.6214285714285714,247,61,342.5379879665343,POINT (525825.542005806 6081056.65879787),525825.542005806,6081056.65879787,9.99608179165462,0.0,79.67080464319504,0.0 -2022-09-26 02:15:31,54.87592125128628,15.402635904838341,486.3636363636364,67.0,4.4533626422047465,10.0,1000.0,8.249984350479103,393.8721588882412,0.3044649518541466,0.4863636363636364,0.6214285714285714,242,61,342.59335120720453,POINT (525835.3760852371 6081058.451152235),525835.3760852371,6081058.451152235,9.996081853767283,0.0,79.6706791043807,0.0 -2022-09-26 02:15:32,54.87593685021875,15.402789322095263,477.2727272727273,67.0,4.389067488171675,10.0,1000.0,8.065625525145588,392.87999676059866,0.311494720847256,0.4772727272727273,0.6214285714285714,238,61,342.51776153815985,POINT (525845.2101608021 6081060.243528158),525845.2101608021,6081060.243528158,9.996081915813404,0.0,79.67055356544826,0.0 -2022-09-26 02:15:33,54.875952449151185,15.402942739411431,468.18181818181824,67.0,4.304761005242653,10.0,1000.0,7.78538227892246,391.667867138583,0.3208987270006954,0.46818181818181825,0.6214285714285714,233,61,342.3651219713061,POINT (525855.0442325011 6081062.035925643),525855.0442325011,6081062.035925643,9.996081978523032,0.0,79.67042801088208,0.0 -2022-09-26 02:15:34,54.875968048083585,15.403096156786843,459.0909090909091,67.0,4.250892671241653,10.0,1000.0,7.536444732822403,390.7290403175528,0.328761547781193,0.4590909090909091,0.6214285714285714,229,61,342.31316070390375,POINT (525864.8783003336 6081063.828344687),525864.8783003336,6081063.828344687,9.996082040770077,0.0,79.67030246121016,0.0 -2022-09-26 02:15:35,54.87598364701595,15.403249574221501,450.00000000000006,67.0,4.224741715365997,10.0,1000.0,7.2153291187029085,389.60388974696735,0.3387854591098041,0.45000000000000007,0.6214285714285714,224,61,342.5073941906659,POINT (525874.7123643004 6081065.620785291),525874.7123643004,6081065.620785291,9.996082103637761,0.0,79.67017691213805,0.0 -2022-09-26 02:15:36,54.87599924594827,15.403402991715405,440.90909090909093,67.0,4.252111541860311,10.0,1000.0,6.965346145613658,388.7485361256365,0.34677698830074494,0.4409090909090909,0.6214285714285714,220,61,342.9803750171774,POINT (525884.5464244006 6081067.413247457),525884.5464244006,6081067.413247457,9.996082166033272,0.0,79.67005135709796,0.0 -2022-09-26 02:15:37,54.87601484488055,15.403556409268553,431.81818181818187,67.0,4.359934691118393,10.0,1000.0,6.679075018115607,387.7417970754369,0.3564705781290294,0.4318181818181819,0.6214285714285714,215,61,344.06661641063977,POINT (525894.3804806349 6081069.20573118),525894.3804806349,6081069.20573118,9.996082228266884,0.0,79.66992582354466,0.0 -2022-09-26 02:15:38,54.8760304438128,15.403709826880947,422.72727272727275,67.0,4.5530665841322735,10.0,1000.0,6.437333377736125,386.809728888503,0.3655355629939941,0.42272727272727273,0.6214285714285714,210,61,345.73468886097066,POINT (525904.2145330027 6081070.998236464),525904.2145330027,6081070.998236464,9.996082291039926,0.0,79.66980026337572,0.0 -2022-09-26 02:15:39,54.876046042745,15.403863244552586,413.6363636363637,67.0,4.763498252677381,10.0,1000.0,6.283788699857423,386.12035706544947,0.37211764186456886,0.4136363636363637,0.6214285714285714,206,61,347.45544416047966,POINT (525914.0485815044 6081072.790763306),525914.0485815044,6081072.790763306,9.99608235325499,0.0,79.6696747297059,0.0 -2022-09-26 02:15:40,54.87606164167716,15.404016662283473,404.54545454545456,67.0,5.080258761127804,10.0,1000.0,6.146845670254277,385.33054275956545,0.3792419219980141,0.40454545454545454,0.6214285714285714,201,61,349.984033722559,POINT (525923.8826261399 6081074.58331171),525923.8826261399,6081074.58331171,9.996082416186075,0.0,79.66954917503105,0.0 -2022-09-26 02:15:41,54.87607724060928,15.404170080073602,395.4545454545455,67.0,5.360197773766992,10.0,1000.0,6.082056964224257,384.7563125710619,0.38387078529017105,0.3954545454545455,0.6214285714285714,197,61,352.2004852036748,POINT (525933.7166669087 6081076.375881671),525933.7166669087,6081076.375881671,9.99608247809149,0.0,79.66942363551443,0.0 -2022-09-26 02:15:42,54.876092839541364,15.404323497922977,386.3636363636364,67.0,5.719765148473205,10.0,1000.0,6.054406911371379,384.1094017810144,0.3880864190687933,0.38636363636363635,0.6214285714285714,192,61,355.05809132244764,POINT (525943.5507038111 6081078.168473193),525943.5507038111,6081078.168473193,9.996082540889516,0.0,79.66929808060343,0.0 -2022-09-26 02:15:43,54.8761084384734,15.404476915831602,377.2727272727273,67.0,6.001072408446105,10.0,1000.0,6.070739846657975,383.64686534172887,0.39005077430174984,0.3772727272727273,0.6214285714285714,188,61,357.323431006617,POINT (525953.3847368477 6081079.961086275),525953.3847368477,6081079.961086275,9.996082603974154,0.0,79.66917253679559,0.0 -2022-09-26 02:15:44,54.8761240374054,15.404630333799467,368.1818181818182,67.0,6.342362823647569,10.0,1000.0,6.131211237258393,383.1341347420475,0.39057654988622575,0.36818181818181817,0.6214285714285714,183,61,0.08223161775708832,POINT (525963.2187660174 6081081.753720916),525963.2187660174,6081081.753720916,9.996082665961504,0.0,79.66904699179268,0.0 -2022-09-26 02:15:45,54.876139636337356,15.404783751826582,359.0909090909091,67.0,6.618984507477772,10.0,1000.0,6.204461007487124,382.7732246539348,0.38935772347224656,0.3590909090909091,0.6214285714285714,179,61,2.198254378161323,POINT (525973.0527913208 6081083.546377118),525973.0527913208,6081083.546377118,9.996082729132583,0.0,79.66892143712575,0.0 -2022-09-26 02:15:46,54.876155235269266,15.40493716991294,350.0,67.0,6.959455858431768,10.0,1000.0,6.316498776859142,382.37886982091027,0.38570145842373244,0.35,0.6214285714285714,174,61,4.6194418892239355,POINT (525982.8868127575 6081085.339054877),525982.8868127575,6081085.339054877,9.996082790996407,0.0,79.6687959027489,0.0 -2022-09-26 02:15:47,54.87617083420114,15.405090588058542,340.90909090909093,67.0,7.204457409410918,10.0,1000.0,6.414344597152948,382.1048754554244,0.38104435025686223,0.34090909090909094,0.6214285714285714,170,61,6.277217559022631,POINT (525992.7208303278 6081087.131754198),525992.7208303278,6081087.131754198,9.996082854315977,0.0,79.66867034271381,0.0 -2022-09-26 02:15:48,54.87618643313298,15.405244006263391,331.81818181818187,67.0,7.43905876757076,10.0,1000.0,6.53608649369537,381.80865064773946,0.3730730600935043,0.33181818181818185,0.6214285714285714,165,61,7.8824895643795685,POINT (526002.5548440315 6081088.924475078),526002.5548440315,6081088.924475078,9.996082916557336,0.0,79.66854480320815,0.0 -2022-09-26 02:15:49,54.87620203206478,15.405397424527488,322.72727272727275,67.0,7.54515606170707,10.0,1000.0,6.625416782916069,381.6044527835243,0.3650244304455092,0.32272727272727275,0.6214285714285714,161,61,8.73901566474865,POINT (526012.3888538688 6081090.717217519),526012.3888538688,6081090.717217519,9.996082979972908,0.0,79.66841924317623,0.0 -2022-09-26 02:15:50,54.876217630996535,15.405550842850829,313.6363636363637,67.0,7.555982976155264,10.0,1000.0,6.71772363700858,381.3845769148631,0.3529869500529586,0.31363636363636366,0.6214285714285714,156,61,9.265268090285929,POINT (526022.2228598393 6081092.509981518),526022.2228598393,6081092.509981518,9.996083042028697,0.0,79.66829370880565,0.0 -2022-09-26 02:15:51,54.87623322992825,15.405704261233415,304.54545454545456,67.0,7.429759880676666,10.0,1000.0,6.77971366896878,381.1980941424019,0.3389299269078218,0.30454545454545456,0.6214285714285714,151,61,9.256325918686457,POINT (526032.0568619432 6081094.302767078),526032.0568619432,6081094.302767078,9.996083105196686,0.0,79.66816814841789,0.0 -2022-09-26 02:15:52,54.87624882885993,15.405857679675249,295.4545454545455,67.0,7.2434874135218585,10.0,1000.0,6.8023502608974145,381.0690407551785,0.32638827113643704,0.29545454545454547,0.6214285714285714,147,61,8.96421006006915,POINT (526041.8908601807 6081096.095574198),526041.8908601807,6081096.095574198,9.996083168140633,0.0,79.66804260402591,0.0 -2022-09-26 02:15:53,54.876264427791575,15.40601109817633,286.3636363636364,67.0,6.937249084921147,10.0,1000.0,6.792331168192805,380.92858270916537,0.30932214354278453,0.2863636363636364,0.6214285714285714,142,61,8.415223081071986,POINT (526051.7248545515 6081097.888402879),526051.7248545515,6081097.888402879,9.996083231123063,0.0,79.66791704877326,0.0 -2022-09-26 02:15:54,54.87628002672318,15.406164516736656,277.27272727272725,67.0,6.6652639079316005,10.0,1000.0,6.751568157757338,380.8301684280346,0.2947474056089449,0.2772727272727272,0.6214285714285714,138,61,7.967708625762498,POINT (526061.5588450555 6081099.681253118),526061.5588450555,6081099.681253118,9.996083293652381,0.0,79.66779150927702,0.0 -2022-09-26 02:15:55,54.87629562565474,15.406317935356228,268.1818181818182,67.0,6.333975700638881,10.0,1000.0,6.6586849666533405,380.7215614120896,0.27564734789577455,0.2681818181818182,0.6214285714285714,133,61,7.556874231468214,POINT (526071.3928316928 6081101.474124919),526071.3928316928,6081101.474124919,9.996083356730807,0.0,79.66766595402753,0.0 -2022-09-26 02:15:56,54.87631122458625,15.406471354035048,259.0909090909091,67.0,6.097806708746236,10.0,1000.0,6.551416856561524,380.644423598516,0.2598686644300316,0.25909090909090915,0.6214285714285714,129,61,7.406126597144976,POINT (526081.2268144635 6081103.267018278),526081.2268144635,6081103.267018278,9.99608341963768,0.0,79.66754040940252,0.0 -2022-09-26 02:15:57,54.876326823517736,15.406624772773114,250.00000000000003,67.0,5.838684601969936,10.0,1000.0,6.378562665126712,380.55835888460683,0.2397994493823672,0.25000000000000006,0.6214285714285714,124,61,7.3754590257610175,POINT (526091.0607933672 6081105.059933197),526091.0607933672,6081105.059933197,9.996083482248963,0.0,79.66741486442004,0.0 -2022-09-26 02:15:58,54.87634242244917,15.406778191570428,240.90909090909093,67.0,5.650189080246154,10.0,1000.0,6.21215295263528,380.49679355355397,0.2236673555221947,0.24090909090909093,0.6214285714285714,120,61,7.3980054006562455,POINT (526100.8947684044 6081106.8528696755),526100.8947684044,6081106.8528696755,9.996083545533395,0.0,79.66728931466626,0.0 -2022-09-26 02:15:59,54.876358021380554,15.406931610426984,231.81818181818184,67.0,5.466477137718593,10.0,1000.0,5.974062344541604,380.4279709804841,0.20366026884093216,0.23181818181818184,0.6214285714285714,115,61,7.570858481669177,POINT (526110.7287395744 6081108.645827714),526110.7287395744,6081108.645827714,9.99608360817866,0.0,79.66716376419598,0.0 -2022-09-26 02:16:00,54.87637362031191,15.407085029342788,222.72727272727275,67.0,5.376102191852883,10.0,1000.0,5.763962238846839,380.37889200489894,0.18795409425003343,0.22272727272727275,0.6214285714285714,111,61,7.814276679560294,POINT (526120.5627068777 6081110.438807312),526120.5627068777,6081110.438807312,9.996083671162983,0.0,79.6670382194576,0.0 -2022-09-26 02:16:01,54.87638921924323,15.407238448317841,213.63636363636365,67.0,5.337757514420002,10.0,1000.0,5.483322586365492,380.32446429507854,0.16890302324996234,0.21363636363636365,0.6214285714285714,106,61,8.136504798306817,POINT (526130.3966703143 6081112.2318084715),526130.3966703143,6081112.2318084715,9.996083734529401,0.0,79.6669126642176,0.0 -2022-09-26 02:16:02,54.8764048181745,15.407391867352137,204.54545454545456,67.0,5.359847240023682,10.0,1000.0,5.249403873043338,380.286104296395,0.1542599265085777,0.20454545454545456,0.6214285714285714,102,61,8.290931139081408,POINT (526140.2306298836 6081114.024831189),526140.2306298836,6081114.024831189,9.996083796984552,0.0,79.66678712425525,0.0 -2022-09-26 02:16:03,54.876420417105734,15.407545286445682,195.45454545454547,67.0,5.434312074680061,10.0,1000.0,4.951869059405486,380.24416745720373,0.13685044152149922,0.19545454545454546,0.6214285714285714,97,61,8.1963898591938,POINT (526150.0645855862 6081115.817875468),526150.0645855862,6081115.817875468,9.996083860614025,0.0,79.66666156376684,0.0 -2022-09-26 02:16:04,54.87643601603692,15.407698705598474,186.36363636363637,67.0,5.532396322988554,10.0,1000.0,4.655506034777678,380.2083680618681,0.12056086727033717,0.18636363636363637,0.6214285714285714,92,61,7.645655771365398,POINT (526159.8985374217 6081117.610941307),526159.8985374217,6081117.610941307,9.996083923446747,0.0,79.66653601867571,0.0 -2022-09-26 02:16:05,54.876451614968076,15.407852124810512,177.27272727272728,67.0,5.6054358435262515,10.0,1000.0,4.423692338016399,380.18372623105495,0.10840118663655963,0.17727272727272728,0.6214285714285714,88,61,6.8224391218377605,POINT (526169.7324853905 6081119.404028704),526169.7324853905,6081119.404028704,9.996083986671046,0.0,79.66641047394528,0.0 -2022-09-26 02:16:06,54.8764672138992,15.408005544081798,168.1818181818182,67.0,5.6634152904046156,10.0,1000.0,4.145191611988931,380.1573606104,0.09434193427103173,0.16818181818181818,0.6214285714285714,83,61,5.316411938042279,POINT (526179.5664294921 6081121.197137665),526179.5664294921,6081121.197137665,9.996084050153474,0.0,79.66628490773128,0.0 -2022-09-26 02:16:07,54.87648281283027,15.40815896341233,159.0909090909091,67.0,5.667444259643757,10.0,1000.0,3.9341814088456744,380.13938975442665,0.08402365738788724,0.1590909090909091,0.6214285714285714,79,61,3.7783547331565046,POINT (526189.4003697266 6081122.990268184),526189.4003697266,6081122.990268184,9.996084112963123,0.0,79.6661593678965,0.0 -2022-09-26 02:16:08,54.8764984117613,15.408312382802109,150.0,67.0,5.607934582514723,10.0,1000.0,3.687925944952232,380.12025955941317,0.07228517950930208,0.15,0.6214285714285714,74,61,1.5548783225273723,POINT (526199.2343060941 6081124.783420263),526199.2343060941,6081124.783420263,9.99608417626942,0.0,79.66603381767985,0.0 -2022-09-26 02:16:09,54.87651401069229,15.408465802251133,140.90909090909093,67.0,5.510166980310006,10.0,1000.0,3.5062809042559087,380.10722083221526,0.06380444625729284,0.14090909090909093,0.6214285714285714,70,61,359.6412203922574,POINT (526209.0682385943 6081126.576593901),526209.0682385943,6081126.576593901,9.996084239113065,0.0,79.66590827235724,0.0 -2022-09-26 02:16:10,54.87652960962325,15.408619221759407,131.8181818181818,67.0,5.345217946038071,10.0,1000.0,3.29937131897706,380.09326117191455,0.05429981488364602,0.1318181818181818,0.6214285714285714,65,61,357.2136260467772,POINT (526218.9021672276 6081128.3697891),526218.9021672276,6081128.3697891,9.996084302682425,0.0,79.66578271689218,0.0 -2022-09-26 02:16:11,54.87654520855417,15.408772641326928,122.72727272727273,67.0,5.21002686799349,10.0,1000.0,3.150093515650404,380.08364227757795,0.04753189809069281,0.12272727272727274,0.6214285714285714,61,61,355.2993819033804,POINT (526228.7360919937 6081130.1630058605),526228.7360919937,6081130.1630058605,9.99608436618526,0.0,79.665657161309,0.0 -2022-09-26 02:16:12,54.87656080748504,15.408926060953696,113.63636363636364,67.0,5.071408122985607,10.0,1000.0,2.98335114450591,380.0731866615785,0.040050598880731966,0.11363636363636365,0.6214285714285714,56,61,352.8355163701634,POINT (526238.5700128927 6081131.95624418),526238.5700128927,6081131.95624418,9.99608442928742,0.0,79.66553161611088,0.0 -2022-09-26 02:16:13,54.87657640641588,15.409079480639713,104.54545454545455,67.0,4.991260873382084,10.0,1000.0,2.865131215255415,380.065852168106,0.03479382405506237,0.10454545454545455,0.6214285714285714,52,61,350.7324021750152,POINT (526248.4039299246 6081133.74950406),526248.4039299246,6081133.74950406,9.996084492719179,0.0,79.66540606578246,0.0 -2022-09-26 02:16:14,54.87659200534666,15.409232900384978,95.45454545454547,67.0,4.942568130791401,10.0,1000.0,2.735012405540758,380.0577310707948,0.02905536135005051,0.09545454545454547,0.6214285714285714,47,61,348.0515276681261,POINT (526258.2378430893 6081135.542785497),526258.2378430893,6081135.542785497,9.996084555750253,0.0,79.66528052583908,0.0 -2022-09-26 02:16:15,54.8766076042774,15.409386320189489,86.36363636363637,67.0,4.954801297561043,10.0,1000.0,2.64389790013745,380.051933577932,0.02507149204041651,0.08636363636363638,0.6214285714285714,43,61,346.0358322172523,POINT (526268.0717523864 6081137.336088495),526268.0717523864,6081137.336088495,9.996084618819895,0.0,79.66515497503501,0.0 -2022-09-26 02:16:16,54.87662320320811,15.409539740053246,77.27272727272728,67.0,5.0428655130624,10.0,1000.0,2.5445764365675876,380.04542011261356,0.020771245621476257,0.07727272727272728,0.6214285714285714,38,61,343.9291376712383,POINT (526277.9056578164 6081139.129413056),526277.9056578164,6081139.129413056,9.996084682896887,0.0,79.66502940895667,0.0 -2022-09-26 02:16:17,54.87663880213877,15.409693159976248,68.18181818181819,67.0,5.172239845556733,10.0,1000.0,2.4755311198092635,380.0407182970752,0.017817702615556878,0.06818181818181819,0.6214285714285714,34,61,342.72703731832746,POINT (526287.7395593789 6081140.922759174),526287.7395593789,6081140.922759174,9.996084745561282,0.0,79.66490387391048,0.0 -2022-09-26 02:16:18,54.8766544010694,15.409846579958499,59.09090909090909,67.0,5.399156766329296,10.0,1000.0,2.4006133835655583,380.03539976103883,0.014661030932983394,0.0590909090909091,0.6214285714285714,29,61,341.9410154535362,POINT (526297.573457074 6081142.716126854),526297.573457074,6081142.716126854,9.99608480905653,0.0,79.66477831797933,0.0 -2022-09-26 02:16:19,54.87667,15.41,50.0,67.0,5.678380885324935,10.0,1000.0,2.3366632228746314,380.03063883871187,0.012023426575988636,0.05,0.6214285714285714,24,61,341.93978768064585,POINT (526307.4073509022 6081144.509516094),526307.4073509022,6081144.509516094,9.996084873172414,0.0,79.66465276264836,0.0 -2022-09-26 02:16:20,54.87667,15.41,50.0,78.0,7.6622962979706655,10.0,1000.0,2.427648361618065,380.0314378884131,0.006058397404587089,0.05,0.7,24,69,354.8149120375382,POINT (526307.4073509022 6081144.509516094),526307.4073509022,6081144.509516094,0.0,11.0,0.0,90.0 -2022-09-26 02:16:21,54.8766544010694,15.409846579958499,59.09090909090909,78.0,7.374426672975305,10.0,1000.0,2.495617705899542,380.03615994006657,0.007824408833997399,0.0590909090909091,0.7,29,69,354.29277947726877,POINT (526297.573457074 6081142.716126854),526297.573457074,6081142.716126854,9.996084873172414,0.0,259.66465276264836,0.0 -2022-09-26 02:16:22,54.87663880213877,15.409693159976248,68.18181818181819,78.0,7.142299030835946,10.0,1000.0,2.5731804141367585,380.04134595152595,0.010028762199638764,0.06818181818181819,0.7,34,69,354.4014585942741,POINT (526287.7395593789 6081140.922759174),526287.7395593789,6081140.922759174,9.99608480905653,0.0,259.6647783179793,0.0 -2022-09-26 02:16:23,54.87662320320811,15.409539740053246,77.27272727272728,78.0,7.000805037039496,10.0,1000.0,2.6431221791126767,380.04583965363327,0.012163107510389893,0.07727272727272728,0.7,38,69,354.9979728832427,POINT (526277.9056578164 6081139.129413056),526277.9056578164,6081139.129413056,9.996084745561282,0.0,259.6649038739105,0.0 -2022-09-26 02:16:24,54.8766076042774,15.409386320189489,86.36363636363637,78.0,6.8752691258876615,10.0,1000.0,2.7417461467848425,380.051904617869,0.015369921399796897,0.08636363636363638,0.7,43,69,356.3507738258357,POINT (526268.0717523864 6081137.336088495),526268.0717523864,6081137.336088495,9.996084682896887,0.0,259.6650294089567,0.0 -2022-09-26 02:16:25,54.87659200534666,15.409232900384978,95.45454545454547,78.0,6.807793318634703,10.0,1000.0,2.830630183964311,380.0571317209801,0.01842606041997151,0.09545454545454547,0.7,47,69,357.8339553016759,POINT (526258.2378430893 6081135.542785497),526258.2378430893,6081135.542785497,9.996084618819895,0.0,259.665154975035,0.0 -2022-09-26 02:16:26,54.87657640641588,15.409079480639713,104.54545454545455,78.0,6.75020905865774,10.0,1000.0,2.9555820563096766,380.0641668876296,0.022943228116986677,0.10454545454545455,0.7,52,69,0.018491663625411547,POINT (526248.4039299246 6081133.74950406),526248.4039299246,6081133.74950406,9.996084555750253,0.0,259.6652805258391,0.0 -2022-09-26 02:16:27,54.87656080748504,15.408926060953696,113.63636363636364,78.0,6.716016091525815,10.0,1000.0,3.0675578549990363,380.0702302882624,0.02717783185251733,0.11363636363636365,0.7,56,69,1.894145825819578,POINT (526238.5700128927 6081131.95624418),526238.5700128927,6081131.95624418,9.996084492719179,0.0,259.66540606578246,0.0 -2022-09-26 02:16:28,54.87654520855417,15.408772641326928,122.72727272727273,78.0,6.684080595616612,10.0,1000.0,3.2235888362021896,380.07841788824595,0.033331410890788477,0.12272727272727274,0.7,61,69,4.265213267593367,POINT (526228.7360919937 6081130.1630058605),526228.7360919937,6081130.1630058605,9.99608442928742,0.0,259.66553161611085,0.0 -2022-09-26 02:16:29,54.87652960962325,15.408619221759407,131.8181818181818,78.0,6.675023785933628,10.0,1000.0,3.3617825488802744,380.08551893935896,0.03900228831462919,0.1318181818181818,0.7,65,69,6.169915189604694,POINT (526218.9021672276 6081128.3697891),526218.9021672276,6081128.3697891,9.99608436618526,0.0,259.665657161309,0.0 -2022-09-26 02:16:30,54.87651401069229,15.408465802251133,140.90909090909093,78.0,6.672268689322566,10.0,1000.0,3.551449728700093,380.09519641649126,0.047099087703636806,0.14090909090909093,0.7,70,69,8.504607899308951,POINT (526209.0682385943 6081126.576593901),526209.0682385943,6081126.576593901,9.996084302682425,0.0,259.6657827168922,0.0 -2022-09-26 02:16:31,54.8764984117613,15.408312382802109,150.0,78.0,6.656387135221646,10.0,1000.0,3.7164189986138605,380.1036838589672,0.05442932977137753,0.15,0.7,74,69,10.201650162943679,POINT (526199.2343060941 6081124.783420263),526199.2343060941,6081124.783420263,9.996084239113065,0.0,259.6659082723572,0.0 -2022-09-26 02:16:32,54.87648281283027,15.40815896341233,159.0909090909091,78.0,6.605551746979242,10.0,1000.0,3.9380087837551443,380.11539492060905,0.06470530897382401,0.1590909090909091,0.7,79,69,11.926059493528442,POINT (526189.4003697266 6081122.990268184),526189.4003697266,6081122.990268184,9.99608417626942,0.0,259.6660338176798,0.0 -2022-09-26 02:16:33,54.8764672138992,15.408005544081798,168.1818181818182,78.0,6.53839530918334,10.0,1000.0,4.126079220639354,380.125792674242,0.07383744241529487,0.16818181818181818,0.7,83,69,12.877977367102119,POINT (526179.5664294921 6081121.197137665),526179.5664294921,6081121.197137665,9.996084112963123,0.0,259.6661593678965,0.0 -2022-09-26 02:16:34,54.876451614968076,15.407852124810512,177.27272727272728,78.0,6.427847497781258,10.0,1000.0,4.371717132242374,380.1403013698923,0.08639641956957489,0.17727272727272728,0.7,88,69,13.447248888442232,POINT (526169.7324853905 6081119.404028704),526169.7324853905,6081119.404028704,9.996084050153474,0.0,259.66628490773127,0.0 -2022-09-26 02:16:35,54.87643601603692,15.407698705598474,186.36363636363637,78.0,6.327570735147918,10.0,1000.0,4.573783305089124,380.1533034420455,0.09734188643754733,0.18636363636363637,0.7,92,69,13.39911945318596,POINT (526159.8985374217 6081117.610941307),526159.8985374217,6081117.610941307,9.996083986671046,0.0,259.66641047394523,0.0 -2022-09-26 02:16:36,54.876420417105734,15.407545286445682,195.45454545454547,78.0,6.2036995700840105,10.0,1000.0,4.828549970931717,380.17157451827603,0.11209334221626774,0.19545454545454546,0.7,97,69,12.780192774305135,POINT (526150.0645855862 6081115.817875468),526150.0645855862,6081115.817875468,9.996083923446747,0.0,259.66653601867574,0.0 -2022-09-26 02:16:37,54.8764048181745,15.407391867352137,204.54545454545456,78.0,6.100747173495265,10.0,1000.0,5.079576070723453,380.192425799057,0.12793496593758988,0.20454545454545456,0.7,102,69,11.703088188114577,POINT (526140.2306298836 6081114.024831189),526140.2306298836,6081114.024831189,9.996083860614025,0.0,259.6666615637668,0.0 -2022-09-26 02:16:38,54.87638921924323,15.407238448317841,213.63636363636365,78.0,6.046156950399766,10.0,1000.0,5.27282697358973,380.21123719547126,0.14129431669883297,0.21363636363636365,0.7,106,69,10.669880864362199,POINT (526130.3966703143 6081112.2318084715),526130.3966703143,6081112.2318084715,9.996083796984552,0.0,259.6667871242552,0.0 -2022-09-26 02:16:39,54.87637362031191,15.407085029342788,222.72727272727275,78.0,6.0244758651185455,10.0,1000.0,5.498540872607583,380.23781396128277,0.1586899022597375,0.22272727272727275,0.7,111,69,9.38254023385764,POINT (526120.5627068777 6081110.438807312),526120.5627068777,6081110.438807312,9.996083734529401,0.0,259.6669126642176,0.0 -2022-09-26 02:16:40,54.876358021380554,15.406931610426984,231.81818181818184,78.0,6.048595231957124,10.0,1000.0,5.6617197137200455,380.2618853327571,0.17301798064066462,0.23181818181818184,0.7,115,69,8.50024473945075,POINT (526110.7287395744 6081108.645827714),526110.7287395744,6081108.645827714,9.996083671162983,0.0,259.6670382194576,0.0 -2022-09-26 02:16:41,54.87634242244917,15.406778191570428,240.90909090909093,78.0,6.127885983172981,10.0,1000.0,5.838002173696357,380.2960977398068,0.19121446695440178,0.24090909090909093,0.7,120,69,7.695940035676415,POINT (526100.8947684044 6081106.8528696755),526100.8947684044,6081106.8528696755,9.99608360817866,0.0,259.66716376419595,0.0 -2022-09-26 02:16:42,54.876326823517736,15.406624772773114,250.00000000000003,78.0,6.220891118877462,10.0,1000.0,5.952997537017296,380.32735058102946,0.20581020790156346,0.25000000000000006,0.7,124,69,7.268676914727848,POINT (526091.0607933672 6081105.059933197),526091.0607933672,6081105.059933197,9.996083545533395,0.0,259.6672893146663,0.0 -2022-09-26 02:16:43,54.87631122458625,15.406471354035048,259.0909090909091,78.0,6.35072550405005,10.0,1000.0,6.060043696995774,380.3722928435825,0.2238237214039064,0.25909090909090915,0.7,129,69,6.7817132216812865,POINT (526081.2268144635 6081103.267018278),526081.2268144635,6081103.267018278,9.996083482248963,0.0,259.66741486442004,0.0 -2022-09-26 02:16:44,54.87629562565474,15.406317935356228,268.1818181818182,78.0,6.45022662555714,10.0,1000.0,6.114219184693727,380.4139278433489,0.23783009454336626,0.2681818181818182,0.7,133,69,6.2630543546964645,POINT (526071.3928316928 6081101.474124919),526071.3928316928,6081101.474124919,9.99608341963768,0.0,259.6675404094025,0.0 -2022-09-26 02:16:45,54.87628002672318,15.406164516736656,277.27272727272725,78.0,6.552191434579261,10.0,1000.0,6.141319750152329,380.47475126966884,0.2545291108683039,0.2772727272727272,0.7,138,69,5.339134499730903,POINT (526061.5588450555 6081099.681253118),526061.5588450555,6081099.681253118,9.996083356730807,0.0,259.66766595402754,0.0 -2022-09-26 02:16:46,54.876264427791575,15.40601109817633,286.3636363636364,78.0,6.604718942448226,10.0,1000.0,6.1307770793002545,380.5319845495877,0.26701642332105563,0.2863636363636364,0.7,142,69,4.3470930818966735,POINT (526051.7248545515 6081097.888402879),526051.7248545515,6081097.888402879,9.996083293652381,0.0,259.66779150927704,0.0 -2022-09-26 02:16:47,54.87624882885993,15.405857679675249,295.4545454545455,78.0,6.62307840587744,10.0,1000.0,6.07937504643514,380.6167790172291,0.28124379400705457,0.29545454545454547,0.7,147,69,2.801692300767513,POINT (526041.8908601807 6081096.095574198),526041.8908601807,6081096.095574198,9.996083231123063,0.0,259.66791704877323,0.0 -2022-09-26 02:16:48,54.87623322992825,15.405704261233415,304.54545454545456,78.0,6.595640247741921,10.0,1000.0,6.010412270688543,380.6974435808095,0.29131842595026874,0.30454545454545456,0.7,151,69,1.3590102650953213,POINT (526032.0568619432 6081094.302767078),526032.0568619432,6081094.302767078,9.996083168140633,0.0,259.6680426040259,0.0 -2022-09-26 02:16:49,54.876217630996535,15.405550842850829,313.6363636363637,78.0,6.508754979205797,10.0,1000.0,5.8945770315321,380.8177613483429,0.3020358023863392,0.31363636363636366,0.7,156,69,359.3752945621168,POINT (526022.2228598393 6081092.509981518),526022.2228598393,6081092.509981518,9.996083105196686,0.0,259.66816814841786,0.0 -2022-09-26 02:16:50,54.87620203206478,15.405397424527488,322.72727272727275,78.0,6.370246530625608,10.0,1000.0,5.753044887210189,380.9640516059423,0.3104457047362309,0.32272727272727275,0.7,161,69,357.29380579689047,POINT (526012.3888538688 6081090.717217519),526012.3888538688,6081090.717217519,9.996083042028697,0.0,259.66829370880566,0.0 -2022-09-26 02:16:51,54.87618643313298,15.405244006263391,331.81818181818187,78.0,6.231122125647697,10.0,1000.0,5.627313879952563,381.1031713682166,0.31538894316310984,0.33181818181818185,0.7,165,69,355.63410037435955,POINT (526002.5548440315 6081088.924475078),526002.5548440315,6081088.924475078,9.996082979972908,0.0,259.66841924317623,0.0 -2022-09-26 02:16:52,54.87617083420114,15.405090588058542,340.90909090909093,78.0,6.036483632015633,10.0,1000.0,5.46273050450479,381.30917691507483,0.31923886410516567,0.34090909090909094,0.7,170,69,353.6528148499532,POINT (525992.7208303278 6081087.131754198),525992.7208303278,6081087.131754198,9.996082916557336,0.0,259.66854480320814,0.0 -2022-09-26 02:16:53,54.876155235269266,15.40493716991294,350.0,78.0,5.875970172193887,10.0,1000.0,5.331483225385575,381.5030989124021,0.32042505407658406,0.35,0.7,174,69,352.1939590280719,POINT (525982.8868127575 6081085.339054877),525982.8868127575,6081085.339054877,9.996082854315977,0.0,259.6686703427138,0.0 -2022-09-26 02:16:54,54.876139636337356,15.404783751826582,359.0909090909091,78.0,5.683442996489995,10.0,1000.0,5.176496168782033,381.78649705331236,0.3195591321999252,0.3590909090909091,0.7,179,69,350.57203531235274,POINT (525973.0527913208 6081083.546377118),525973.0527913208,6081083.546377118,9.996082790996407,0.0,259.6687959027489,0.0 -2022-09-26 02:16:55,54.8761240374054,15.404630333799467,368.1818181818182,78.0,5.542522638841119,10.0,1000.0,5.06585318103193,382.0492931655497,0.31704545253024624,0.36818181818181817,0.7,183,69,349.4445782991891,POINT (525963.2187660174 6081081.753720916),525963.2187660174,6081081.753720916,9.996082729132583,0.0,259.66892143712573,0.0 -2022-09-26 02:16:56,54.8761084384734,15.404476915831602,377.2727272727273,78.0,5.382092714912811,10.0,1000.0,4.95171075862963,382.42693812461096,0.31176260172156645,0.3772727272727273,0.7,188,69,348.2216300212961,POINT (525953.3847368477 6081079.961086275),525953.3847368477,6081079.961086275,9.996082665961504,0.0,259.6690469917927,0.0 -2022-09-26 02:16:57,54.876092839541364,15.404323497922977,386.3636363636364,78.0,5.255724724128211,10.0,1000.0,4.884479865199178,382.7709764137502,0.3059639267618524,0.38636363636363635,0.7,192,69,347.41499522411755,POINT (525943.5507038111 6081078.168473193),525943.5507038111,6081078.168473193,9.996082603974154,0.0,259.6691725367956,0.0 -2022-09-26 02:16:58,54.87607724060928,15.404170080073602,395.4545454545455,78.0,5.084806143880654,10.0,1000.0,4.83548551448191,383.25617983680434,0.2969860475022236,0.3954545454545455,0.7,197,69,346.8749940021962,POINT (525933.7166669087 6081076.375881671),525933.7166669087,6081076.375881671,9.996082540889516,0.0,259.6692980806034,0.0 -2022-09-26 02:16:59,54.87606164167716,15.404016662283473,404.54545454545456,78.0,4.937227354183504,10.0,1000.0,4.826645087146357,383.68980981098093,0.2886250385208218,0.40454545454545454,0.7,201,69,346.9188633607051,POINT (525923.8826261399 6081074.58331171),525923.8826261399,6081074.58331171,9.99608247809149,0.0,259.6694236355144,0.0 -2022-09-26 02:17:00,54.876046042745,15.403863244552586,413.6363636363637,78.0,4.7499887599513775,10.0,1000.0,4.854495852568944,384.28934515670426,0.27700732730757527,0.4136363636363637,0.7,206,69,347.5553609824547,POINT (525914.0485815044 6081072.790763306),525914.0485815044,6081072.790763306,9.996082416186075,0.0,259.6695491750311,0.0 -2022-09-26 02:17:01,54.8760304438128,15.403709826880947,422.72727272727275,78.0,4.610813266906407,10.0,1000.0,4.906797335611622,384.81448282341574,0.2670242700455145,0.42272727272727273,0.7,210,69,348.44564553325534,POINT (525904.2145330027 6081070.998236464),525904.2145330027,6081070.998236464,9.99608235325499,0.0,259.6696747297059,0.0 -2022-09-26 02:17:02,54.87601484488055,15.403556409268553,431.81818181818187,78.0,4.469512786423429,10.0,1000.0,5.00560225588405,385.52564713788985,0.2540251272302862,0.4318181818181819,0.7,215,69,349.86586265736315,POINT (525894.3804806349 6081069.20573118),525894.3804806349,6081069.20573118,9.996082291039926,0.0,259.6698002633757,0.0 -2022-09-26 02:17:03,54.87599924594827,15.403402991715405,440.90909090909093,78.0,4.384450326312441,10.0,1000.0,5.1339102528464835,386.2933570971104,0.2408289817050038,0.4409090909090909,0.7,220,69,351.41798142478297,POINT (525884.5464244006 6081067.413247457),525884.5464244006,6081067.413247457,9.996082228266884,0.0,259.66992582354465,0.0 -2022-09-26 02:17:04,54.87598364701595,15.403249574221501,450.00000000000006,78.0,4.36799941641551,10.0,1000.0,5.25034723085299,386.9437943321629,0.230398816700074,0.45000000000000007,0.7,224,69,352.6129945255616,POINT (525874.7123643004 6081065.620785291),525874.7123643004,6081065.620785291,9.996082166033272,0.0,259.6700513570979,0.0 -2022-09-26 02:17:05,54.875968048083585,15.403096156786843,459.0909090909091,78.0,4.419585937319562,10.0,1000.0,5.40170433709247,387.7947936303091,0.21783855115166706,0.4590909090909091,0.7,229,69,353.90750485162596,POINT (525864.8783003336 6081063.828344687),525864.8783003336,6081063.828344687,9.996082103637761,0.0,259.67017691213806,0.0 -2022-09-26 02:17:06,54.875952449151185,15.402942739411431,468.18181818181824,78.0,4.519111014987827,10.0,1000.0,5.517966706831266,388.49920834880857,0.2083918678220991,0.46818181818181825,0.7,233,69,354.7160910789694,POINT (525855.0442325011 6081062.035925643),525855.0442325011,6081062.035925643,9.996082040770077,0.0,259.67030246121016,0.0 -2022-09-26 02:17:07,54.87593685021875,15.402789322095263,477.2727272727273,78.0,4.709945380685876,10.0,1000.0,5.644083891178585,389.3985730347645,0.1976012633924318,0.4772727272727273,0.7,238,69,355.4101088459429,POINT (525845.2101608021 6081060.243528158),525845.2101608021,6081060.243528158,9.996081978523032,0.0,259.67042801088206,0.0 -2022-09-26 02:17:08,54.87592125128628,15.402635904838341,486.3636363636364,78.0,4.90617160859667,10.0,1000.0,5.720226788065377,390.12416170399143,0.18995476883352488,0.4863636363636364,0.7,242,69,355.7315515036706,POINT (525835.3760852371 6081058.451152235),525835.3760852371,6081058.451152235,9.996081915813404,0.0,259.67055356544824,0.0 -2022-09-26 02:17:09,54.875905652353765,15.402482487640665,495.4545454545455,78.0,5.187981394902469,10.0,1000.0,5.773444536102351,391.02552028932257,0.18182202738098782,0.4954545454545455,0.7,247,69,355.92101226546305,POINT (525825.542005806 6081056.65879787),525825.542005806,6081056.65879787,9.996081853767283,0.0,259.6706791043807,0.0 -2022-09-26 02:17:10,54.8758900534212,15.402329070502232,504.54545454545456,78.0,5.427235097498529,10.0,1000.0,5.776141119253497,391.7316323770587,0.17656911140764206,0.5045454545454545,0.7,251,69,355.99213038748604,POINT (525815.7079225088 6081054.866465064),525815.7079225088,6081054.866465064,9.99608179165462,0.0,259.670804643195,0.0 -2022-09-26 02:17:11,54.87587445448859,15.402175653423043,513.6363636363637,78.0,5.731015790309225,10.0,1000.0,5.724450009001748,392.58098773841334,0.17167941035501463,0.5136363636363638,0.7,256,69,356.07014562288316,POINT (525805.8738353457 6081053.074153815),525805.8738353457,6081053.074153815,9.996081729475417,0.0,259.6709301818913,0.0 -2022-09-26 02:17:12,54.875858855555954,15.402022236403102,522.7272727272727,78.0,5.978746522065059,10.0,1000.0,5.637918375244938,393.22297817728077,0.16915872922417616,0.5227272727272727,0.7,260,69,356.1370002089939,POINT (525796.0397443165 6081051.28186413),525796.0397443165,6081051.28186413,9.996081666738334,0.0,259.67105574708677,0.0 -2022-09-26 02:17:13,54.87584325662328,15.4018688194424,531.8181818181819,78.0,6.2938984520724395,10.0,1000.0,5.475519055582293,393.9643612452411,0.16777173207925686,0.5318181818181819,0.7,265,69,356.2574644698362,POINT (525786.2056494211 6081049.489596003),525786.2056494211,6081049.489596003,9.996081604884177,0.0,259.67118128602544,0.0 -2022-09-26 02:17:14,54.87582765769056,15.401715402540946,540.909090909091,78.0,6.54848485723816,10.0,1000.0,5.306444893047443,394.4986207118644,0.16806127575631777,0.540909090909091,0.7,269,69,356.4094504851551,POINT (525776.3715506598 6081047.697349434),525776.3715506598,6081047.697349434,9.996081542848952,0.0,259.67130682472634,0.0 -2022-09-26 02:17:15,54.87581205875779,15.401561985698736,550.0,78.0,6.865969440772355,10.0,1000.0,5.054676187621779,395.0807397285815,0.1701167595137793,0.55,0.7,274,69,356.6920144367255,POINT (525766.5374480325 6081045.905124426),525766.5374480325,6081045.905124426,9.996081480360777,0.0,259.6714323791839,0.0 -2022-09-26 02:17:16,54.87579645982498,15.401408568915771,559.0909090909091,78.0,7.116158233452052,10.0,1000.0,4.828717714673174,395.47007239246585,0.17304729861590998,0.5590909090909091,0.7,278,69,356.9930337242966,POINT (525756.7033415395 6081044.112920976),525756.7033415395,6081044.112920976,9.996081418307005,0.0,259.6715579177683,0.0 -2022-09-26 02:17:17,54.87578086089213,15.401255152192052,568.1818181818182,78.0,7.419983887213657,10.0,1000.0,4.527071133279386,395.85277905342673,0.17819134286449284,0.5681818181818182,0.7,283,69,357.4376945992633,POINT (525746.8692311805 6081042.320739087),525746.8692311805,6081042.320739087,9.9960813560818,0.0,259.67168346697736,0.0 -2022-09-26 02:17:18,54.87576526195925,15.401101735527575,577.2727272727274,78.0,7.709987353761349,10.0,1000.0,4.216850618397521,396.11317075628057,0.18480330613285714,0.5772727272727274,0.7,288,69,357.90021721755227,POINT (525737.0351169556 6081040.528578757),525737.0351169556,6081040.528578757,9.996081293904593,0.0,259.67180901618786,0.0 -2022-09-26 02:17:19,54.875749663026326,15.400948318922342,586.3636363636364,78.0,7.929919687470958,10.0,1000.0,3.970998079087628,396.230463998912,0.19099985934726138,0.5863636363636364,0.7,292,69,358.22608576132643,POINT (525727.200998865 6081038.736439986),525727.200998865,6081038.736439986,9.996081231994797,0.0,259.67193455477695,0.0 -2022-09-26 02:17:20,54.875734064093365,15.400794902376354,595.4545454545455,78.0,8.188148015957777,10.0,1000.0,3.6756115822433424,396.2622624285631,0.19966681830387806,0.5954545454545455,0.7,297,69,358.49993307884176,POINT (525717.3668769085 6081036.944322774),525717.3668769085,6081036.944322774,9.996081169966018,0.0,259.67206009861934,0.0 -2022-09-26 02:17:21,54.875718465160354,15.400641485889611,604.5454545454546,78.0,8.38089452516039,10.0,1000.0,3.4541211283773725,396.1969200394021,0.2071651063904807,0.6045454545454546,0.7,301,69,358.56239637055404,POINT (525707.5327510863 6081035.152227122),525707.5327510863,6081035.152227122,9.996081107703738,0.0,259.6721856475953,0.0 -2022-09-26 02:17:22,54.87570286622731,15.400488069462114,613.6363636363637,78.0,8.604585490809159,10.0,1000.0,3.2008032780246927,396.00557906460085,0.2169970936552279,0.6136363636363638,0.7,306,69,358.4123617854,POINT (525697.6986213983 6081033.36015303),525697.6986213983,6081033.36015303,9.996081045770948,0.0,259.67231119144077,0.0 -2022-09-26 02:17:23,54.87568726729422,15.400334653093859,622.7272727272727,78.0,8.770036681350236,10.0,1000.0,3.019211109484919,395.7692225602114,0.22503916334887702,0.6227272727272728,0.7,310,69,358.13239359108985,POINT (525687.8644878445 6081031.568100497),525687.8644878445,6081031.568100497,9.996080983719187,0.0,259.67243674053947,0.0 -2022-09-26 02:17:24,54.87567166836109,15.400181236784851,631.8181818181819,78.0,8.960207868707496,10.0,1000.0,2.8197388934921976,395.37755358410396,0.23505060842206696,0.6318181818181818,0.7,315,69,357.71377515356863,POINT (525678.0303504255 6081029.776069522),525678.0303504255,6081029.776069522,9.99608092164366,0.0,259.67256227328653,0.0 -2022-09-26 02:17:25,54.87565606942792,15.400027820535085,640.909090909091,78.0,9.098117620372077,10.0,1000.0,2.6819479772172086,394.99426595133855,0.24283267155309343,0.640909090909091,0.7,319,69,357.52974251316846,POINT (525668.1962091404 6081027.984060108),525668.1962091404,6081027.984060108,9.996080859864517,0.0,259.67268782799897,0.0 -2022-09-26 02:17:26,54.87564047049471,15.399874404344564,650.0,78.0,9.243323162240479,10.0,1000.0,2.5355096426058648,394.43838170974885,0.2520209071300146,0.65,0.7,324,69,357.6936990835572,POINT (525658.3620639896 6081026.192072253),525658.3620639896,6081026.192072253,9.99608079789464,0.0,259.67281337161137,0.0 -2022-09-26 02:17:27,54.87562487156146,15.399720988213286,659.0909090909091,78.0,9.326059458389928,10.0,1000.0,2.4373592513681768,393.9407996320103,0.2587585976940944,0.6590909090909092,0.7,328,69,358.1580799651727,POINT (525648.5279149736 6081024.400105957),525648.5279149736,6081024.400105957,9.996080735743698,0.0,259.67293891498616,0.0 -2022-09-26 02:17:28,54.875609272628175,15.399567572141251,668.1818181818182,78.0,9.372304652844868,10.0,1000.0,2.335771516524466,393.2646832062671,0.26618706390269203,0.6681818181818182,0.7,333,69,359.06027349790975,POINT (525638.6937620917 6081022.608161221),525638.6937620917,6081022.608161221,9.996080673931912,0.0,259.67306446409265,0.0 -2022-09-26 02:17:29,54.875593673694844,15.399414156128461,677.2727272727274,78.0,9.355975387777885,10.0,1000.0,2.2692793895167362,392.68943415694093,0.2711819740749672,0.6772727272727274,0.7,337,69,359.9217319060509,POINT (525628.8596053442 6081020.816238043),525628.8596053442,6081020.816238043,9.996080612439917,0.0,259.67318999720635,0.0 -2022-09-26 02:17:30,54.87557807476148,15.399260740174917,686.3636363636364,78.0,9.267119017346293,10.0,1000.0,2.201836032027082,391.93924983942145,0.2760612487794335,0.6863636363636364,0.7,342,69,0.9980920799781643,POINT (525619.0254447313 6081019.0243364265),525619.0254447313,6081019.0243364265,9.996080550046633,0.0,259.6733155564605,0.0 -2022-09-26 02:17:31,54.87556247582806,15.399107324280614,695.4545454545455,78.0,9.111697242824347,10.0,1000.0,2.148894342505353,391.1670095067853,0.27926078213394595,0.6954545454545455,0.7,347,69,1.9015392140360063,POINT (525609.1912802529 6081017.232456368),525609.1912802529,6081017.232456368,9.99608048848367,0.0,259.673441094829,0.0 -2022-09-26 02:17:32,54.87554687689462,15.398953908445554,704.5454545454546,78.0,8.953729901804214,10.0,1000.0,2.115091145091039,390.541750739221,0.2805200844898977,0.7045454545454546,0.7,351,69,2.4105354807006165,POINT (525599.3571119088 6081015.440597868),525599.3571119088,6081015.440597868,9.996080427135642,0.0,259.67356662794737,0.0 -2022-09-26 02:17:33,54.87553127796112,15.398800492669737,713.6363636363637,78.0,8.739508247460979,10.0,1000.0,2.0814727901412287,389.7603775015483,0.28039334803098975,0.7136363636363637,0.7,356,69,2.7280231600155957,POINT (525589.5229396995 6081013.648760929),525589.5229396995,6081013.648760929,9.996080364771823,0.0,259.67369218708654,0.0 -2022-09-26 02:17:34,54.875515679027586,15.398647076953164,722.7272727272727,78.0,8.575621111189168,10.0,1000.0,2.060186183694335,389.1417388823628,0.2789031296449587,0.7227272727272728,0.7,360,69,2.73269902837103,POINT (525579.6887636245 6081011.856945546),525579.6887636245,6081011.856945546,9.996080303686714,0.0,259.6738177149563,0.0 -2022-09-26 02:17:35,54.87550008009402,15.398493661295834,731.8181818181819,78.0,8.405113582767665,10.0,1000.0,2.0391227548614244,388.3838775742135,0.2753043387071472,0.7318181818181819,0.7,365,69,2.4846704556445616,POINT (525569.8545836844 6081010.065151726),525569.8545836844,6081010.065151726,9.996080241304362,0.0,259.67394327397903,0.0 -2022-09-26 02:17:36,54.875484481160406,15.398340245697748,740.909090909091,78.0,8.306841129273382,10.0,1000.0,2.025811243464551,387.79456334478334,0.2710641120960996,0.740909090909091,0.7,369,69,2.1491877398572683,POINT (525560.0203998787 6081008.273379464),525560.0203998787,6081008.273379464,9.996080179866823,0.0,259.67406881223565,0.0 -2022-09-26 02:17:37,54.875468882226755,15.398186830158908,750.0000000000001,78.0,8.225720596801615,10.0,1000.0,2.012613662311721,387.08425203597517,0.2641348536749862,0.7500000000000001,0.7,374,69,1.6475295147723727,POINT (525550.1862122079 6081006.481628761),525550.1862122079,6081006.481628761,9.996080118081276,0.0,259.67419435550636,0.0 -2022-09-26 02:17:38,54.87545328329307,15.398033414679308,759.0909090909091,78.0,8.169331383366298,10.0,1000.0,2.004222093328409,386.54007826129845,0.25736637930740236,0.7590909090909091,0.7,378,69,1.1979847603407165,POINT (525540.3520206716 6081004.689899617),525540.3520206716,6081004.689899617,9.996080056572783,0.0,259.6743198990178,0.0 -2022-09-26 02:17:39,54.87543768435933,15.39787999925895,768.1818181818182,78.0,8.0861688815655,10.0,1000.0,1.9958107210881009,385.8930250135237,0.24750852339810733,0.7681818181818183,0.7,383,69,0.3489775005645015,POINT (525530.51782527 6081002.898192033),525530.51782527,6081002.898192033,9.996079994830819,0.0,259.6744454476629,0.0 -2022-09-26 02:17:40,54.875422085425555,15.397726583897839,777.2727272727274,78.0,8.009775376055407,10.0,1000.0,1.9903747202886288,385.40353181487797,0.2386223357196553,0.7772727272727273,0.7,387,69,359.331790260799,POINT (525520.6836260032 6081001.106506007),525520.6836260032,6081001.106506007,9.99607993340858,0.0,259.6745709803152,0.0 -2022-09-26 02:17:41,54.87540648649174,15.397573168595969,786.3636363636364,78.0,7.909648460245789,10.0,1000.0,1.984807003898492,384.82824238073977,0.22644305321751318,0.7863636363636364,0.7,392,69,357.694552805428,POINT (525510.8494228713 6080999.31484154),525510.8494228713,6080999.31484154,9.996079871815002,0.0,259.67469652359205,0.0 -2022-09-26 02:17:42,54.87539088755788,15.397419753353342,795.4545454545455,78.0,7.833535421320063,10.0,1000.0,1.9811111129234082,384.3977952089639,0.2159855730947939,0.7954545454545455,0.7,396,69,356.2182938101704,POINT (525501.0152158738 6080997.523198632),525501.0152158738,6080997.523198632,9.996079810498475,0.0,259.6748220671097,0.0 -2022-09-26 02:17:43,54.875375288624,15.397266338169958,804.5454545454546,78.0,7.752768811788548,10.0,1000.0,1.9772087861355334,383.8970873582568,0.20222271094549313,0.8045454545454546,0.7,401,69,354.37107282951524,POINT (525491.1810050113 6080995.731577285),525491.1810050113,6080995.731577285,9.996079748552503,0.0,259.67494762077354,0.0 -2022-09-26 02:17:44,54.87535968969007,15.397112923045817,813.6363636363637,78.0,7.694385092600016,10.0,1000.0,1.9739135423380614,383.4374452152816,0.1879197902476514,0.8136363636363637,0.7,406,69,352.72609768372547,POINT (525481.3467902837 6080993.939977498),525481.3467902837,6080993.939977498,9.996079686821455,0.0,259.6750731691872,0.0 -2022-09-26 02:17:45,54.87534409075611,15.396959507980922,822.7272727272727,78.0,7.664583170721169,10.0,1000.0,1.9716126369525293,383.0986679132483,0.17625087017535435,0.8227272727272728,0.7,410,69,351.65425656268314,POINT (525471.5125716911 6080992.148399268),525471.5125716911,6080992.148399268,9.99607962552463,0.0,259.6751987017276,0.0 -2022-09-26 02:17:46,54.87532849182209,15.396806092975268,831.8181818181819,78.0,7.644226603986682,10.0,1000.0,1.9690641364834036,382.71024292014545,0.16157683975330425,0.8318181818181819,0.7,415,69,350.65726833020443,POINT (525461.6783492335 6080990.356842598),525461.6783492335,6080990.356842598,9.996079563941953,0.0,259.67532424477304,0.0 -2022-09-26 02:17:47,54.87531289288805,15.396652678028858,840.909090909091,78.0,7.635333811162237,10.0,1000.0,1.9672385500680938,382.42652073510874,0.1499039046481847,0.8409090909090909,0.7,419,69,350.09991188037213,POINT (525451.8441229106 6080988.565307487),525451.8441229106,6080988.565307487,9.996079502636329,0.0,259.67544978805915,0.0 -2022-09-26 02:17:48,54.87529729395396,15.396499263141687,850.0000000000001,78.0,7.623319045545151,10.0,1000.0,1.9651762899706582,382.10407851533836,0.13556430354890175,0.8500000000000001,0.7,424,69,349.59097845520125,POINT (525442.0098927225 6080986.773793937),525442.0098927225,6080986.773793937,9.996079441159402,0.0,259.67557534196993,0.0 -2022-09-26 02:17:49,54.87528169501982,15.39634584831376,859.0909090909091,78.0,7.60635223246832,10.0,1000.0,1.963677849008576,381.870628159568,0.12440584161955284,0.8590909090909091,0.7,428,69,349.2256072872467,POINT (525432.1756586696 6080984.982301941),525432.1756586696,6080984.982301941,9.9960793803262,0.0,259.6757008585221,0.0 -2022-09-26 02:17:50,54.875266096085646,15.396192433545078,868.1818181818182,78.0,7.5725860146614306,10.0,1000.0,1.9619709045205962,381.60764324485956,0.11097987993447521,0.8681818181818183,0.7,433,69,348.69496933258563,POINT (525422.3414207518 6080983.190831508),525422.3414207518,6080983.190831508,9.99607931832023,0.0,259.67582641720935,0.0 -2022-09-26 02:17:51,54.875250497151434,15.396039018835635,877.2727272727274,78.0,7.541063367721854,10.0,1000.0,1.9607260506892643,381.4189323022217,0.100737908335017,0.8772727272727273,0.7,437,69,348.1830730174645,POINT (525412.5071789687 6080981.399382633),525412.5071789687,6080981.399382633,9.996079257206574,0.0,259.6759519605016,0.0 -2022-09-26 02:17:52,54.87523489821719,15.395885604185438,886.3636363636365,78.0,7.515703771174886,10.0,1000.0,1.9593087776004623,381.2082418192682,0.088646146202808,0.8863636363636365,0.7,442,69,347.5420166777404,POINT (525402.6729333211 6080979.607955318),525402.6729333211,6080979.607955318,9.99607919556826,0.0,259.6760775031976,0.0 -2022-09-26 02:17:53,54.8752192992829,15.39573218959448,895.4545454545455,78.0,7.514450307758587,10.0,1000.0,1.9582790056745842,381.0584321101238,0.07958986881362498,0.8954545454545455,0.7,446,69,347.1262949448164,POINT (525392.8386838082 6080977.816549562),525392.8386838082,6080977.816549562,9.99607913455059,0.0,259.67620304649296,0.0 -2022-09-26 02:17:54,54.875203700348564,15.395578775062766,904.5454545454546,78.0,7.538687253740357,10.0,1000.0,1.9571139240886195,380.8927068944256,0.06908530026198174,0.9045454545454547,0.7,451,69,346.8156771667792,POINT (525383.0044304305 6080976.025165363),525383.0044304305,6080976.025165363,9.996079073571122,0.0,259.6763285789276,0.0 -2022-09-26 02:17:55,54.875188101414196,15.395425360590295,913.6363636363637,78.0,7.5778658585203775,10.0,1000.0,1.9562742224181937,380.7759758040766,0.061352564910921496,0.9136363636363637,0.7,455,69,346.7772615274821,POINT (525373.1701731881 6080974.233802725),525373.1701731881,6080974.233802725,9.99607901190988,0.0,259.6764541268799,0.0 -2022-09-26 02:17:56,54.875172502479785,15.395271946177065,922.7272727272727,78.0,7.648542889792979,10.0,1000.0,1.9553331067718918,380.6480648299892,0.05253197436707062,0.9227272727272727,0.7,460,69,347.02320007284095,POINT (525363.3359120806 6080972.442461645),525363.3359120806,6080972.442461645,9.996078950921653,0.0,259.67657967006033,0.0 -2022-09-26 02:17:57,54.87515690354533,15.395118531823078,931.8181818181819,78.0,7.719535765273416,10.0,1000.0,1.9546618636951543,380.5588421234974,0.04614488564513989,0.9318181818181819,0.7,464,69,347.4619942043197,POINT (525353.5016471087 6080970.651142125),525353.5016471087,6080970.651142125,9.996078889294234,0.0,259.6767052125248,0.0 -2022-09-26 02:17:58,54.87514130461083,15.394965117528333,940.909090909091,78.0,7.822350344897471,10.0,1000.0,1.953917810296521,380.46202699232794,0.03897486365140247,0.940909090909091,0.7,469,69,348.30343696252777,POINT (525343.6673782716 6080968.859844163),525343.6673782716,6080968.859844163,9.996078828683414,0.0,259.6768307505761,0.0 -2022-09-26 02:17:59,54.87512570567629,15.394811703292833,950.0,78.0,7.936930730738844,10.0,1000.0,1.9532713190985134,380.37980530198763,0.032670514298045586,0.95,0.7,474,69,349.44278622121567,POINT (525333.8331055702 6080967.0685677575),525333.8331055702,6080967.0685677575,9.996078767538119,0.0,259.67695627716876,0.0 -2022-09-26 02:18:00,54.87512570567629,15.394811703292833,950.0,89.0,9.37158408546611,10.0,1000.0,1.9500662734214376,380.07672678533197,0.02286586873460414,0.95,0.7785714285714286,474,77,352.80640772904593,POINT (525333.8331055702 6080967.0685677575),525333.8331055702,6080967.0685677575,0.0,11.0,0.0,90.0 -2022-09-26 02:18:01,54.87514130461083,15.394965117528333,940.909090909091,89.0,9.39410035595099,10.0,1000.0,1.9500874844373686,380.0936374419502,0.027294826189688048,0.940909090909091,0.7785714285714286,469,77,354.07289536112665,POINT (525343.6673782716 6080968.859844163),525343.6673782716,6080968.859844163,9.996078767538119,0.0,79.67695627716877,0.0 -2022-09-26 02:18:02,54.87515690354533,15.395118531823078,931.8181818181819,89.0,9.324716946746653,10.0,1000.0,1.9501152388086176,380.11369064191933,0.03233211414341187,0.9318181818181819,0.7785714285714286,464,77,355.5636819260686,POINT (525353.5016471087 6080970.651142125),525353.5016471087,6080970.651142125,9.996078828683414,0.0,79.67683075057609,0.0 -2022-09-26 02:18:03,54.875172502479785,15.395271946177065,922.7272727272727,89.0,9.208106327090738,10.0,1000.0,1.950143436243909,380.1323077603723,0.03681899379377632,0.9227272727272727,0.7785714285714286,460,77,356.7287221710591,POINT (525363.3359120806 6080972.442461645),525363.3359120806,6080972.442461645,9.996078889294234,0.0,79.6767052125248,0.0 -2022-09-26 02:18:04,54.875188101414196,15.395425360590295,913.6363636363637,89.0,9.009125159150434,10.0,1000.0,1.9501882042843588,380.15922831611914,0.04301416103882638,0.9136363636363637,0.7785714285714286,455,77,357.93951425203846,POINT (525373.1701731881 6080974.233802725),525373.1701731881,6080974.233802725,9.996078950921653,0.0,79.67657967006032,0.0 -2022-09-26 02:18:05,54.875203700348564,15.395578775062766,904.5454545454546,89.0,8.832860504236606,10.0,1000.0,1.9502335153994723,380.1840353230425,0.04844357845183557,0.9045454545454547,0.7785714285714286,451,77,358.5943037065996,POINT (525383.0044304305 6080976.025165363),525383.0044304305,6080976.025165363,9.99607901190988,0.0,79.67645412687992,0.0 -2022-09-26 02:18:06,54.8752192992829,15.39573218959448,895.4545454545455,89.0,8.628206592787858,10.0,1000.0,1.950305180508942,380.2196500769257,0.05581589846690905,0.8954545454545455,0.7785714285714286,446,77,358.94476414471626,POINT (525392.8386838082 6080977.816549562),525392.8386838082,6080977.816549562,9.996079073571122,0.0,79.67632857892761,0.0 -2022-09-26 02:18:07,54.87523489821719,15.395885604185438,886.3636363636365,89.0,8.498028593750913,10.0,1000.0,1.9503774519189592,380.25224695447656,0.06216810159665924,0.8863636363636365,0.7785714285714286,442,77,358.8752312426122,POINT (525402.6729333211 6080979.607955318),525402.6729333211,6080979.607955318,9.99607913455059,0.0,79.67620304649294,0.0 -2022-09-26 02:18:08,54.875250497151434,15.396039018835635,877.2727272727274,89.0,8.3812777201214,10.0,1000.0,1.950491363875211,380.298741038478,0.07064314373582571,0.8772727272727273,0.7785714285714286,437,77,358.52012445434633,POINT (525412.5071789687 6080981.399382633),525412.5071789687,6080981.399382633,9.99607919556826,0.0,79.67607750319758,0.0 -2022-09-26 02:18:09,54.875266096085646,15.396192433545078,868.1818181818182,89.0,8.298456871685659,10.0,1000.0,1.950605891145528,380.3410322668766,0.07781518083508476,0.8681818181818183,0.7785714285714286,433,77,358.14093911179316,POINT (525422.3414207518 6080983.190831508),525422.3414207518,6080983.190831508,9.996079257206574,0.0,79.67595196050164,0.0 -2022-09-26 02:18:10,54.87528169501982,15.39634584831376,859.0909090909091,89.0,8.168451611659718,10.0,1000.0,1.950785952973841,380.40099060768415,0.08720636621463798,0.8590909090909091,0.7785714285714286,428,77,357.3767238218535,POINT (525432.1756586696 6080984.982301941),525432.1756586696,6080984.982301941,9.99607931832023,0.0,79.67582641720934,0.0 -2022-09-26 02:18:11,54.87529729395396,15.396499263141687,850.0000000000001,89.0,8.041979187154345,10.0,1000.0,1.950966673753771,380.4552111899794,0.09500110424529172,0.8500000000000001,0.7785714285714286,424,77,356.5217723332979,POINT (525442.0098927225 6080986.773793937),525442.0098927225,6080986.773793937,9.9960793803262,0.0,79.67570085852209,0.0 -2022-09-26 02:18:12,54.87531289288805,15.396652678028858,840.909090909091,89.0,7.8796924123399235,10.0,1000.0,1.9512506070452758,380.5316348189479,0.1050018892959591,0.8409090909090909,0.7785714285714286,419,77,355.3073698067191,POINT (525451.8441229106 6080988.565307487),525451.8441229106,6080988.565307487,9.996079441159402,0.0,79.67557534196995,0.0 -2022-09-26 02:18:13,54.87532849182209,15.396806092975268,831.8181818181819,89.0,7.7719322376364275,10.0,1000.0,1.9515357332887022,380.60034342135236,0.11312727904955942,0.8318181818181819,0.7785714285714286,415,77,354.39170444139233,POINT (525461.6783492335 6080990.356842598),525461.6783492335,6080990.356842598,9.996079502636329,0.0,79.67544978805917,0.0 -2022-09-26 02:18:14,54.87534409075611,15.396959507980922,822.7272727272727,89.0,7.697003692184517,10.0,1000.0,1.9519846793953441,380.69660463391386,0.12331799569869115,0.8227272727272728,0.7785714285714286,410,77,353.54046025505033,POINT (525471.5125716911 6080992.148399268),525471.5125716911,6080992.148399268,9.996079563941953,0.0,79.67532424477302,0.0 -2022-09-26 02:18:15,54.87535968969007,15.397112923045817,813.6363636363637,89.0,7.701033481246419,10.0,1000.0,1.9524372648328543,380.78260890636165,0.13139919171917047,0.8136363636363637,0.7785714285714286,406,77,353.2122173405627,POINT (525481.3467902837 6080993.939977498),525481.3467902837,6080993.939977498,9.99607962552463,0.0,79.6751987017276,0.0 -2022-09-26 02:18:16,54.875375288624,15.397266338169958,804.5454545454546,89.0,7.7921595232798015,10.0,1000.0,1.9531541954939229,380.9022949572747,0.14127077337016059,0.8045454545454546,0.7785714285714286,401,77,353.3022176595217,POINT (525491.1810050113 6080995.731577285),525491.1810050113,6080995.731577285,9.996079686821455,0.0,79.6750731691872,0.0 -2022-09-26 02:18:17,54.87539088755788,15.397419753353342,795.4545454545455,89.0,7.965722140488531,10.0,1000.0,1.9540908199914202,381.03652395668973,0.15072491606232447,0.7954545454545455,0.7785714285714286,396,77,353.8845853481551,POINT (525501.0152158738 6080997.523198632),525501.0152158738,6080997.523198632,9.996079748552503,0.0,79.67494762077354,0.0 -2022-09-26 02:18:18,54.87540648649174,15.397573168595969,786.3636363636364,89.0,8.142463967625693,10.0,1000.0,1.9550481969749283,381.1550541623362,0.1578700612896808,0.7863636363636364,0.7785714285714286,392,77,354.5807842338357,POINT (525510.8494228713 6080999.31484154),525510.8494228713,6080999.31484154,9.996079810498475,0.0,79.67482206710969,0.0 -2022-09-26 02:18:19,54.875422085425555,15.397726583897839,777.2727272727274,89.0,8.374372860539735,10.0,1000.0,1.9565904411047585,381.31788336704483,0.1661345629068046,0.7772727272727273,0.7785714285714286,387,77,355.5192049076112,POINT (525520.6836260032 6081001.106506007),525520.6836260032,6081001.106506007,9.996079871815002,0.0,79.67469652359208,0.0 -2022-09-26 02:18:20,54.87543768435933,15.39787999925895,768.1818181818182,89.0,8.541965554031455,10.0,1000.0,1.9581862528574534,381.46030717293144,0.1721104577908072,0.7681818181818183,0.7785714285714286,383,77,356.1604431994034,POINT (525530.51782527 6081002.898192033),525530.51782527,6081002.898192033,9.99607993340858,0.0,79.6745709803152,0.0 -2022-09-26 02:18:21,54.87545328329307,15.398033414679308,759.0909090909091,89.0,8.706687987490188,10.0,1000.0,1.9607889822806732,381.6538975497692,0.17865891783812368,0.7590909090909091,0.7785714285714286,378,77,356.6877799577976,POINT (525540.3520206716 6081004.689899617),525540.3520206716,6081004.689899617,9.996079994830819,0.0,79.67444544766292,0.0 -2022-09-26 02:18:22,54.875468882226755,15.398186830158908,750.0000000000001,89.0,8.808005451382579,10.0,1000.0,1.963512190721798,381.821281723713,0.183077158750107,0.7500000000000001,0.7785714285714286,374,77,356.92564688802975,POINT (525550.1862122079 6081006.481628761),525550.1862122079,6081006.481628761,9.996080056572783,0.0,79.6743198990178,0.0 -2022-09-26 02:18:23,54.875484481160406,15.398340245697748,740.909090909091,89.0,8.924397446035124,10.0,1000.0,1.9679943154181663,382.04589773121035,0.18748018283236556,0.740909090909091,0.7785714285714286,369,77,357.08870176946255,POINT (525560.0203998787 6081008.273379464),525560.0203998787,6081008.273379464,9.996080118081276,0.0,79.67419435550636,0.0 -2022-09-26 02:18:24,54.87550008009402,15.398493661295834,731.8181818181819,89.0,9.010183624105766,10.0,1000.0,1.9727123014322814,382.23741300640927,0.19005264357979254,0.7318181818181819,0.7785714285714286,365,77,357.0190406476502,POINT (525569.8545836844 6081010.065151726),525569.8545836844,6081010.065151726,9.996080179866823,0.0,79.67406881223566,0.0 -2022-09-26 02:18:25,54.875515679027586,15.398647076953164,722.7272727272727,89.0,9.096714362040252,10.0,1000.0,1.9804950906984102,382.49047117007643,0.19203182866514346,0.7227272727272728,0.7785714285714286,360,77,356.6212436148477,POINT (525579.6887636245 6081011.856945546),525579.6887636245,6081011.856945546,9.996080241304362,0.0,79.67394327397903,0.0 -2022-09-26 02:18:26,54.87553127796112,15.398800492669737,713.6363636363637,89.0,9.13839624329857,10.0,1000.0,1.9886728806192382,382.7026442492516,0.1926089466079717,0.7136363636363637,0.7785714285714286,356,77,356.0706658812679,POINT (525589.5229396995 6081013.648760929),525589.5229396995,6081013.648760929,9.996080303686714,0.0,79.6738177149563,0.0 -2022-09-26 02:18:27,54.87554687689462,15.398953908445554,704.5454545454546,89.0,9.1436530660689,10.0,1000.0,2.0020774473148255,382.97785247556266,0.1920767575754931,0.7045454545454546,0.7785714285714286,351,77,355.17671807495213,POINT (525599.3571119088 6081015.440597868),525599.3571119088,6081015.440597868,9.996080364771823,0.0,79.67369218708659,0.0 -2022-09-26 02:18:28,54.87556247582806,15.399107324280614,695.4545454545455,89.0,9.105672374212919,10.0,1000.0,2.0160177017016614,383.2039852481459,0.1906719149649884,0.6954545454545455,0.7785714285714286,347,77,354.392443549603,POINT (525609.1912802529 6081017.232456368),525609.1912802529,6081017.232456368,9.996080427135642,0.0,79.67356662794735,0.0 -2022-09-26 02:18:29,54.87557807476148,15.399260740174917,686.3636363636364,89.0,9.007333360262113,10.0,1000.0,2.0385324386678256,383.49082018992266,0.1877516344496801,0.6863636363636364,0.7785714285714286,342,77,353.47836963069176,POINT (525619.0254447313 6081019.0243364265),525619.0254447313,6081019.0243364265,9.99608048848367,0.0,79.67344109482902,0.0 -2022-09-26 02:18:30,54.875593673694844,15.399414156128461,677.2727272727274,89.0,8.864599718862289,10.0,1000.0,2.0680739326395066,383.7780113269233,0.1836353139022226,0.6772727272727274,0.7785714285714286,337,77,352.8127451495567,POINT (525628.8596053442 6081020.816238043),525628.8596053442,6081020.816238043,9.996080550046633,0.0,79.67331555646051,0.0 -2022-09-26 02:18:31,54.875609272628175,15.399567572141251,668.1818181818182,89.0,8.732903132029161,10.0,1000.0,2.0978579975530622,384.0045636604639,0.17957135305526942,0.6681818181818182,0.7785714285714286,333,77,352.57272592699064,POINT (525638.6937620917 6081022.608161221),525638.6937620917,6081022.608161221,9.996080612439917,0.0,79.67318999720634,0.0 -2022-09-26 02:18:32,54.87562487156146,15.399720988213286,659.0909090909091,89.0,8.568656678038609,10.0,1000.0,2.144223201462103,384.27902462015953,0.17366454075450233,0.6590909090909092,0.7785714285714286,328,77,352.74318365169034,POINT (525648.5279149736 6081024.400105957),525648.5279149736,6081024.400105957,9.996080673931912,0.0,79.67306446409265,0.0 -2022-09-26 02:18:33,54.87564047049471,15.399874404344564,650.0,89.0,8.45338671517485,10.0,1000.0,2.1896965656166305,384.48789536519945,0.1683939481145336,0.65,0.7785714285714286,324,77,353.29309169096626,POINT (525658.3620639896 6081026.192072253),525658.3620639896,6081026.192072253,9.996080735743698,0.0,79.67293891498615,0.0 -2022-09-26 02:18:34,54.87565606942792,15.400027820535085,640.909090909091,89.0,8.343088857410155,10.0,1000.0,2.2583476746208513,384.73047969997396,0.161297443258977,0.640909090909091,0.7785714285714286,319,77,354.4727660479167,POINT (525668.1962091404 6081027.984060108),525668.1962091404,6081027.984060108,9.99608079789464,0.0,79.67281337161138,0.0 -2022-09-26 02:18:35,54.87567166836109,15.400181236784851,631.8181818181819,89.0,8.280286720330636,10.0,1000.0,2.323526287513298,384.9059480954033,0.15535197038022353,0.6318181818181818,0.7785714285714286,315,77,355.7225083244591,POINT (525678.0303504255 6081029.776069522),525678.0303504255,6081029.776069522,9.996080859864517,0.0,79.67268782799894,0.0 -2022-09-26 02:18:36,54.87568726729422,15.400334653093859,622.7272727272727,89.0,8.209073344073076,10.0,1000.0,2.418513504955971,385.09712047628864,0.1477802246446541,0.6227272727272728,0.7785714285714286,310,77,357.4341644062871,POINT (525687.8644878445 6081031.568100497),525687.8644878445,6081031.568100497,9.99608092164366,0.0,79.67256227328654,0.0 -2022-09-26 02:18:37,54.87570286622731,15.400488069462114,613.6363636363637,89.0,8.16325330405396,10.0,1000.0,2.5054147140390306,385.22414992955,0.14176007735784227,0.6136363636363638,0.7785714285714286,306,77,358.6635912386144,POINT (525697.6986213983 6081033.36015303),525697.6986213983,6081033.36015303,9.996080983719187,0.0,79.67243674053948,0.0 -2022-09-26 02:18:38,54.875718465160354,15.400641485889611,604.5454545454546,89.0,8.153012694200271,10.0,1000.0,2.6271022526155967,385.3465471312838,0.13448359578392227,0.6045454545454546,0.7785714285714286,301,77,359.73388634360555,POINT (525707.5327510863 6081035.152227122),525707.5327510863,6081035.152227122,9.996081045770948,0.0,79.67231119144077,0.0 -2022-09-26 02:18:39,54.875734064093365,15.400794902376354,595.4545454545455,89.0,8.184540580677638,10.0,1000.0,2.733851500698351,385.41289876546205,0.1290096587029779,0.5954545454545455,0.7785714285714286,297,77,0.10575024856996151,POINT (525717.3668769085 6081036.944322774),525717.3668769085,6081036.944322774,9.996081107703738,0.0,79.6721856475953,0.0 -2022-09-26 02:18:40,54.875749663026326,15.400948318922342,586.3636363636364,89.0,8.25489962851623,10.0,1000.0,2.8767157757763133,385.4539190890159,0.12279442458612681,0.5863636363636364,0.7785714285714286,292,77,359.93621150865016,POINT (525727.200998865 6081038.736439986),525727.200998865,6081038.736439986,9.996081169966018,0.0,79.67206009861934,0.0 -2022-09-26 02:18:41,54.87576526195925,15.401101735527575,577.2727272727274,89.0,8.313540453352564,10.0,1000.0,2.996151271666762,385.45207749197533,0.11845988857005091,0.5772727272727274,0.7785714285714286,288,77,359.34343058093657,POINT (525737.0351169556 6081040.528578757),525737.0351169556,6081040.528578757,9.996081231994797,0.0,79.67193455477698,0.0 -2022-09-26 02:18:42,54.87578086089213,15.401255152192052,568.1818181818182,89.0,8.35677207436518,10.0,1000.0,3.1478351672591933,385.40596918852344,0.11400780937277329,0.5681818181818182,0.7785714285714286,283,77,358.1700611283478,POINT (525746.8692311805 6081042.320739087),525746.8692311805,6081042.320739087,9.996081293904593,0.0,79.67180901618788,0.0 -2022-09-26 02:18:43,54.87579645982498,15.401408568915771,559.0909090909091,89.0,8.334347646027096,10.0,1000.0,3.2969657082801063,385.3118934982311,0.11079644352327535,0.5590909090909091,0.7785714285714286,278,77,356.72392407888094,POINT (525756.7033415395 6081044.112920976),525756.7033415395,6081044.112920976,9.9960813560818,0.0,79.67168346697733,0.0 -2022-09-26 02:18:44,54.87581205875779,15.401561985698736,550.0,89.0,8.252730568189167,10.0,1000.0,3.4104280156412456,385.2034454075784,0.10922436285426862,0.55,0.7785714285714286,274,77,355.535391031508,POINT (525766.5374480325 6081045.905124426),525766.5374480325,6081045.905124426,9.996081418307005,0.0,79.67155791776834,0.0 -2022-09-26 02:18:45,54.87582765769056,15.401715402540946,540.909090909091,89.0,8.062489839849178,10.0,1000.0,3.540009780310692,385.0291374840198,0.10860964420203935,0.540909090909091,0.7785714285714286,269,77,354.208107886367,POINT (525776.3715506598 6081047.697349434),525776.3715506598,6081047.697349434,9.996081480360777,0.0,79.67143237918391,0.0 -2022-09-26 02:18:46,54.87584325662328,15.4018688194424,531.8181818181819,89.0,7.842307870033801,10.0,1000.0,3.6305589698663785,384.8613933930312,0.10925532773814009,0.5318181818181819,0.7785714285714286,265,77,353.3942658040379,POINT (525786.2056494211 6081049.489596003),525786.2056494211,6081049.489596003,9.996081542848952,0.0,79.67130682472639,0.0 -2022-09-26 02:18:47,54.875858855555954,15.402022236403102,522.7272727272727,89.0,7.4965432710573126,10.0,1000.0,3.7237709265908796,384.6207415003702,0.11153127385709415,0.5227272727272727,0.7785714285714286,260,77,352.7880462517166,POINT (525796.0397443165 6081051.28186413),525796.0397443165,6081051.28186413,9.996081604884177,0.0,79.67118128602543,0.0 -2022-09-26 02:18:48,54.87587445448859,15.402175653423043,513.6363636363637,89.0,7.18022313103492,10.0,1000.0,3.7806189214182773,384.4071646351745,0.11453810732487642,0.5136363636363638,0.7785714285714286,256,77,352.6410760253467,POINT (525805.8738353457 6081053.074153815),525805.8738353457,6081053.074153815,9.996081666738334,0.0,79.67105574708677,0.0 -2022-09-26 02:18:49,54.8758900534212,15.402329070502232,504.54545454545456,89.0,6.760799025467935,10.0,1000.0,3.8286777556929277,384.1193130178054,0.11975989679782698,0.5045454545454545,0.7785714285714286,251,77,352.7751910729039,POINT (525815.7079225088 6081054.866465064),525815.7079225088,6081054.866465064,9.996081729475417,0.0,79.67093018189131,0.0 -2022-09-26 02:18:50,54.875905652353765,15.402482487640665,495.4545454545455,89.0,6.424691077454559,10.0,1000.0,3.8492947956465,383.87654883774997,0.12506718066334843,0.4954545454545455,0.7785714285714286,247,77,352.98700956980497,POINT (525825.542005806 6081056.65879787),525825.542005806,6081056.65879787,9.99608179165462,0.0,79.67080464319504,0.0 -2022-09-26 02:18:51,54.87592125128628,15.402635904838341,486.3636363636364,89.0,6.046289505113428,10.0,1000.0,3.8551403422012376,383.56322411918546,0.1330225244361106,0.4863636363636364,0.7785714285714286,242,77,353.46803249323693,POINT (525835.3760852371 6081058.451152235),525835.3760852371,6081058.451152235,9.996081853767283,0.0,79.6706791043807,0.0 -2022-09-26 02:18:52,54.87593685021875,15.402789322095263,477.2727272727273,89.0,5.804963003401379,10.0,1000.0,3.846690450644499,383.3088354443229,0.14034928249206932,0.4772727272727273,0.7785714285714286,238,77,354.0820280174007,POINT (525845.2101608021 6081060.243528158),525845.2101608021,6081060.243528158,9.996081915813404,0.0,79.67055356544826,0.0 -2022-09-26 02:18:53,54.875952449151185,15.402942739411431,468.18181818181824,89.0,5.597486752611974,10.0,1000.0,3.8246335315703197,382.9915049014393,0.1505484848535953,0.46818181818181825,0.7785714285714286,233,77,355.0110808116962,POINT (525855.0442325011 6081062.035925643),525855.0442325011,6081062.035925643,9.996081978523032,0.0,79.67042801088208,0.0 -2022-09-26 02:18:54,54.875968048083585,15.403096156786843,459.0909090909091,89.0,5.507375644355962,10.0,1000.0,3.80199881323483,382.74179441112216,0.1593952187488888,0.4590909090909091,0.7785714285714286,229,77,355.7179389983793,POINT (525864.8783003336 6081063.828344687),525864.8783003336,6081063.828344687,9.996082040770077,0.0,79.67030246121016,0.0 -2022-09-26 02:18:55,54.87598364701595,15.403249574221501,450.00000000000006,89.0,5.477303620786132,10.0,1000.0,3.773443160565229,382.4391891072924,0.17108737035779004,0.45000000000000007,0.7785714285714286,224,77,356.3216642622742,POINT (525874.7123643004 6081065.620785291),525874.7123643004,6081065.620785291,9.996082103637761,0.0,79.67017691213805,0.0 -2022-09-26 02:18:56,54.87599924594827,15.403402991715405,440.90909090909093,89.0,5.503244782450217,10.0,1000.0,3.7547481975718626,382.2074901629842,0.18076138646496004,0.4409090909090909,0.7785714285714286,220,77,356.4437515632371,POINT (525884.5464244006 6081067.413247457),525884.5464244006,6081067.413247457,9.996082166033272,0.0,79.67005135709796,0.0 -2022-09-26 02:18:57,54.87601484488055,15.403556409268553,431.81818181818187,89.0,5.570997905846383,10.0,1000.0,3.7419341731499958,381.9338839252997,0.1929825762765803,0.4318181818181819,0.7785714285714286,215,77,356.0526768406813,POINT (525894.3804806349 6081069.20573118),525894.3804806349,6081069.20573118,9.996082228266884,0.0,79.66992582354466,0.0 -2022-09-26 02:18:58,54.8760304438128,15.403709826880947,422.72727272727275,89.0,5.6457452051365635,10.0,1000.0,3.7458473800965097,381.6806292156148,0.2050285980417859,0.42272727272727273,0.7785714285714286,210,77,355.08427812237045,POINT (525904.2145330027 6081070.998236464),525904.2145330027,6081070.998236464,9.996082291039926,0.0,79.66980026337572,0.0 -2022-09-26 02:18:59,54.876046042745,15.403863244552586,413.6363636363637,89.0,5.688976545500909,10.0,1000.0,3.7637750212101535,381.4939660381798,0.21430508382060287,0.4136363636363637,0.7785714285714286,206,77,353.9986697560651,POINT (525914.0485815044 6081072.790763306),525914.0485815044,6081072.790763306,9.99608235325499,0.0,79.6696747297059,0.0 -2022-09-26 02:19:00,54.87606164167716,15.404016662283473,404.54545454545456,89.0,5.701446169168622,10.0,1000.0,3.806853270616343,381.2814800077732,0.22515925417967544,0.40454545454545454,0.7785714285714286,201,77,352.4683342141346,POINT (525923.8826261399 6081074.58331171),525923.8826261399,6081074.58331171,9.996082416186075,0.0,79.66954917503105,0.0 -2022-09-26 02:19:01,54.87607724060928,15.404170080073602,395.4545454545455,89.0,5.669814021858454,10.0,1000.0,3.8585232242158987,381.12839954442353,0.2330407681209887,0.3954545454545455,0.7785714285714286,197,77,351.28816646497927,POINT (525933.7166669087 6081076.375881671),525933.7166669087,6081076.375881671,9.99608247809149,0.0,79.66942363551443,0.0 -2022-09-26 02:19:02,54.876092839541364,15.404323497922977,386.3636363636364,89.0,5.58043245878377,10.0,1000.0,3.944262553335144,380.9579659832402,0.24162810877509716,0.38636363636363635,0.7785714285714286,192,77,350.07227788120565,POINT (525943.5507038111 6081078.168473193),525943.5507038111,6081078.168473193,9.996082540889516,0.0,79.66929808060343,0.0 -2022-09-26 02:19:03,54.8761084384734,15.404476915831602,377.2727272727273,89.0,5.483331665006085,10.0,1000.0,4.028612816959317,380.8378499739787,0.24731117801924116,0.3772727272727273,0.7785714285714286,188,77,349.3603058959044,POINT (525953.3847368477 6081079.961086275),525953.3847368477,6081079.961086275,9.996082603974154,0.0,79.66917253679559,0.0 -2022-09-26 02:19:04,54.8761240374054,15.404630333799467,368.1818181818182,89.0,5.362517916514557,10.0,1000.0,4.151073107808725,380.7069419939597,0.2527297202251765,0.36818181818181817,0.7785714285714286,183,77,348.6670767031981,POINT (525963.2187660174 6081081.753720916),525963.2187660174,6081081.753720916,9.996082665961504,0.0,79.66904699179268,0.0 -2022-09-26 02:19:05,54.876139636337356,15.404783751826582,359.0909090909091,89.0,5.279536256619343,10.0,1000.0,4.259937770406666,380.6166061940089,0.2555963004264199,0.3590909090909091,0.7785714285714286,179,77,348.1894690131657,POINT (525973.0527913208 6081083.546377118),525973.0527913208,6081083.546377118,9.996082729132583,0.0,79.66892143712575,0.0 -2022-09-26 02:19:06,54.876155235269266,15.40493716991294,350.0,89.0,5.208765743333944,10.0,1000.0,4.405144467889847,380.5201196594621,0.25722804363918184,0.35,0.7785714285714286,174,77,347.707341693721,POINT (525982.8868127575 6081085.339054877),525982.8868127575,6081085.339054877,9.996082790996407,0.0,79.6687959027489,0.0 -2022-09-26 02:19:07,54.87617083420114,15.405090588058542,340.90909090909093,89.0,5.190584506372205,10.0,1000.0,4.524784277811258,380.454821743944,0.2569222297349599,0.34090909090909094,0.7785714285714286,170,77,347.47183276082234,POINT (525992.7208303278 6081087.131754198),525992.7208303278,6081087.131754198,9.996082854315977,0.0,79.66867034271381,0.0 -2022-09-26 02:19:08,54.87618643313298,15.405244006263391,331.81818181818187,89.0,5.227185250678045,10.0,1000.0,4.67307959712961,380.3863113888204,0.2545092565885325,0.33181818181818185,0.7785714285714286,165,77,347.4554019586692,POINT (526002.5548440315 6081088.924475078),526002.5548440315,6081088.924475078,9.996082916557336,0.0,79.66854480320815,0.0 -2022-09-26 02:19:09,54.87620203206478,15.405397424527488,322.72727272727275,89.0,5.306112805969725,10.0,1000.0,4.786388693473963,380.340690731061,0.2509795014736975,0.32272727272727275,0.7785714285714286,161,77,347.71491149934184,POINT (526012.3888538688 6081090.717217519),526012.3888538688,6081090.717217519,9.996082979972908,0.0,79.66841924317623,0.0 -2022-09-26 02:19:10,54.876217630996535,15.405550842850829,313.6363636363637,89.0,5.4597017821805585,10.0,1000.0,4.915578032730375,380.2934515824586,0.2446506941511919,0.31363636363636366,0.7785714285714286,156,77,348.40169338540244,POINT (526022.2228598393 6081092.509981518),526022.2228598393,6081092.509981518,9.996083042028697,0.0,79.66829370880565,0.0 -2022-09-26 02:19:11,54.87623322992825,15.405704261233415,304.54545454545456,89.0,5.654766363170279,10.0,1000.0,5.024857320046858,380.2553171886396,0.2363368498727488,0.30454545454545456,0.7785714285714286,151,77,349.44796436029895,POINT (526032.0568619432 6081094.302767078),526032.0568619432,6081094.302767078,9.996083105196686,0.0,79.66816814841789,0.0 -2022-09-26 02:19:12,54.87624882885993,15.405857679675249,295.4545454545455,89.0,5.820228866120515,10.0,1000.0,5.0940204070483235,380.23019869841994,0.2283923546993774,0.29545454545454547,0.7785714285714286,147,77,350.46785231414987,POINT (526041.8908601807 6081096.095574198),526041.8908601807,6081096.095574198,9.996083168140633,0.0,79.66804260402591,0.0 -2022-09-26 02:19:13,54.876264427791575,15.40601109817633,286.3636363636364,89.0,6.008904629537485,10.0,1000.0,5.153601191492694,380.20424527299923,0.21704958865759552,0.2863636363636364,0.7785714285714286,142,77,351.8315704673069,POINT (526051.7248545515 6081097.888402879),526051.7248545515,6081097.888402879,9.996083231123063,0.0,79.66791704877326,0.0 -2022-09-26 02:19:14,54.87628002672318,15.406164516736656,277.27272727272725,89.0,6.124230441407239,10.0,1000.0,5.177522369613983,380.18700529271416,0.207016549459868,0.2772727272727272,0.7785714285714286,138,77,352.8775129368537,POINT (526061.5588450555 6081099.681253118),526061.5588450555,6081099.681253118,9.996083293652381,0.0,79.66779150927702,0.0 -2022-09-26 02:19:15,54.87629562565474,15.406317935356228,268.1818181818182,89.0,6.204516194008033,10.0,1000.0,5.175904478044177,380.1689100180501,0.19352394333038728,0.2681818181818182,0.7785714285714286,133,77,353.9942065110389,POINT (526071.3928316928 6081101.474124919),526071.3928316928,6081101.474124919,9.996083356730807,0.0,79.66766595402753,0.0 -2022-09-26 02:19:16,54.87631122458625,15.406471354035048,259.0909090909091,89.0,6.21662307978505,10.0,1000.0,5.148968725650589,380.15661645209246,0.18215922209672325,0.25909090909090915,0.7785714285714286,129,77,354.68731221156213,POINT (526081.2268144635 6081103.267018278),526081.2268144635,6081103.267018278,9.99608341963768,0.0,79.66754040940252,0.0 -2022-09-26 02:19:17,54.876326823517736,15.406624772773114,250.00000000000003,89.0,6.194151853347719,10.0,1000.0,5.083951788626916,380.14334869847994,0.16749715204522148,0.25000000000000006,0.7785714285714286,124,77,355.3722309914655,POINT (526091.0607933672 6081105.059933197),526091.0607933672,6081105.059933197,9.996083482248963,0.0,79.66741486442004,0.0 -2022-09-26 02:19:18,54.87634242244917,15.406778191570428,240.90909090909093,89.0,6.173038683895369,10.0,1000.0,5.008284719584376,380.1340472592097,0.15558863849918594,0.24090909090909093,0.7785714285714286,120,77,355.9504382272975,POINT (526100.8947684044 6081106.8528696755),526100.8947684044,6081106.8528696755,9.996083545533395,0.0,79.66728931466626,0.0 -2022-09-26 02:19:19,54.876358021380554,15.406931610426984,231.81818181818184,89.0,6.132217550885228,10.0,1000.0,4.887121466750132,380.1236824128205,0.14071629993649656,0.23181818181818184,0.7785714285714286,115,77,356.90012286408114,POINT (526110.7287395744 6081108.645827714),526110.7287395744,6081108.645827714,9.99608360817866,0.0,79.66716376419598,0.0 -2022-09-26 02:19:20,54.87637362031191,15.407085029342788,222.72727272727275,89.0,6.080185501704301,10.0,1000.0,4.771795738289691,380.11618807910247,0.12899070777683447,0.22272727272727275,0.7785714285714286,111,77,357.8483827861923,POINT (526120.5627068777 6081110.438807312),526120.5627068777,6081110.438807312,9.996083671162983,0.0,79.6670382194576,0.0 -2022-09-26 02:19:21,54.87638921924323,15.407238448317841,213.63636363636365,89.0,5.988984495886569,10.0,1000.0,4.6091295629058235,380.1076044982261,0.11474264493963934,0.21363636363636365,0.7785714285714286,106,77,359.158021192949,POINT (526130.3966703143 6081112.2318084715),526130.3966703143,6081112.2318084715,9.996083734529401,0.0,79.6669126642176,0.0 -2022-09-26 02:19:22,54.8764048181745,15.407391867352137,204.54545454545456,89.0,5.898655464247867,10.0,1000.0,4.467789226374601,380.10124821382163,0.10379487823323306,0.20454545454545456,0.7785714285714286,102,77,0.17672585300351784,POINT (526140.2306298836 6081114.024831189),526140.2306298836,6081114.024831189,9.996083796984552,0.0,79.66678712425525,0.0 -2022-09-26 02:19:23,54.876420417105734,15.407545286445682,195.45454545454547,89.0,5.7736666517478605,10.0,1000.0,4.282035373209445,380.09382382758776,0.09081047217050045,0.19545454545454546,0.7785714285714286,97,77,1.2294041235396094,POINT (526150.0645855862 6081115.817875468),526150.0645855862,6081115.817875468,9.996083860614025,0.0,79.66666156376684,0.0 -2022-09-26 02:19:24,54.87643601603692,15.407698705598474,186.36363636363637,89.0,5.649547427916577,10.0,1000.0,4.0914727788396625,380.0868815162161,0.07872102237322244,0.18636363636363637,0.7785714285714286,92,77,1.863242108785812,POINT (526159.8985374217 6081117.610941307),526159.8985374217,6081117.610941307,9.996083923446747,0.0,79.66653601867571,0.0 -2022-09-26 02:19:25,54.876451614968076,15.407852124810512,177.27272727272728,89.0,5.562233540980937,10.0,1000.0,3.9390497624801037,380.0816213524066,0.06975419622137702,0.17727272727272728,0.7785714285714286,88,77,1.9862306374826062,POINT (526169.7324853905 6081119.404028704),526169.7324853905,6081119.404028704,9.996083986671046,0.0,79.66641047394528,0.0 -2022-09-26 02:19:26,54.8764672138992,15.408005544081798,168.1818181818182,89.0,5.481954243290384,10.0,1000.0,3.752330747713015,380.0753623186974,0.05947223725677626,0.16818181818181818,0.7785714285714286,83,77,1.6281148370692335,POINT (526179.5664294921 6081121.197137665),526179.5664294921,6081121.197137665,9.996084050153474,0.0,79.66628490773128,0.0 -2022-09-26 02:19:27,54.87648281283027,15.40815896341233,159.0909090909091,89.0,5.449766412402977,10.0,1000.0,3.6083150302322737,380.07057889695943,0.05200258326398258,0.1590909090909091,0.7785714285714286,79,77,0.9608511730445457,POINT (526189.4003697266 6081122.990268184),526189.4003697266,6081122.990268184,9.996084112963123,0.0,79.6661593678965,0.0 -2022-09-26 02:19:28,54.8764984117613,15.408312382802109,150.0,89.0,5.4583090651340695,10.0,1000.0,3.4373932077415175,380.0648500097596,0.04360715493315697,0.15,0.7785714285714286,74,77,359.7506674438467,POINT (526199.2343060941 6081124.783420263),526199.2343060941,6081124.783420263,9.99608417626942,0.0,79.66603381767985,0.0 -2022-09-26 02:19:29,54.87651401069229,15.408465802251133,140.90909090909093,89.0,5.50721188608964,10.0,1000.0,3.3091882784779925,380.06045189077093,0.0376270299333909,0.14090909090909093,0.7785714285714286,70,77,358.58647861461714,POINT (526209.0682385943 6081126.576593901),526209.0682385943,6081126.576593901,9.996084239113065,0.0,79.66590827235724,0.0 -2022-09-26 02:19:30,54.87652960962325,15.408619221759407,131.8181818181818,89.0,5.61909582755977,10.0,1000.0,3.1606239431618377,380.05517267470475,0.031032959132212642,0.1318181818181818,0.7785714285714286,65,77,357.03615013793564,POINT (526218.9021672276 6081128.3697891),526218.9021672276,6081128.3697891,9.996084302682425,0.0,79.66578271689218,0.0 -2022-09-26 02:19:31,54.87654520855417,15.408772641326928,122.72727272727273,89.0,5.742377035652853,10.0,1000.0,3.051453759848987,380.05111964784277,0.02642401699804617,0.12272727272727274,0.7785714285714286,61,77,355.80636724224564,POINT (526228.7360919937 6081130.1630058605),526228.7360919937,6081130.1630058605,9.99608436618526,0.0,79.665657161309,0.0 -2022-09-26 02:19:32,54.87656080748504,15.408926060953696,113.63636363636364,89.0,5.912065259624545,10.0,1000.0,2.9270508735324676,380.0462660863911,0.02143462163212445,0.11363636363636365,0.7785714285714286,56,77,354.3354362832124,POINT (526238.5700128927 6081131.95624418),526238.5700128927,6081131.95624418,9.99608442928742,0.0,79.66553161611088,0.0 -2022-09-26 02:19:33,54.87657640641588,15.409079480639713,104.54545454545455,89.0,6.040739124251283,10.0,1000.0,2.8368655366978106,380.04255653214193,0.01801060757765372,0.10454545454545455,0.7785714285714286,52,77,353.26639823870687,POINT (526248.4039299246 6081133.74950406),526248.4039299246,6081133.74950406,9.996084492719179,0.0,79.66540606578246,0.0 -2022-09-26 02:19:34,54.87659200534666,15.409232900384978,95.45454545454547,89.0,6.189489864588478,10.0,1000.0,2.735119905510813,380.03814332573614,0.014369591111166776,0.09545454545454547,0.7785714285714286,47,77,352.183365335895,POINT (526258.2378430893 6081135.542785497),526258.2378430893,6081135.542785497,9.996084555750253,0.0,79.66528052583908,0.0 -2022-09-26 02:19:35,54.8766076042774,15.409386320189489,86.36363636363637,89.0,6.307420092416199,10.0,1000.0,2.6618770680556687,380.0347981462471,0.011915136731749234,0.08636363636363638,0.7785714285714286,43,77,351.6088634420832,POINT (526268.0717523864 6081137.336088495),526268.0717523864,6081137.336088495,9.996084618819895,0.0,79.66515497503501,0.0 -2022-09-26 02:19:36,54.87662320320811,15.409539740053246,77.27272727272728,89.0,6.471454656961895,10.0,1000.0,2.579577469306967,380.0308571216226,0.00935022164084175,0.07727272727272728,0.7785714285714286,38,77,351.3417887656622,POINT (526277.9056578164 6081139.129413056),526277.9056578164,6081139.129413056,9.996084682896887,0.0,79.66502940895667,0.0 -2022-09-26 02:19:37,54.87663880213877,15.409693159976248,68.18181818181819,89.0,6.629367160116742,10.0,1000.0,2.5204316159258746,380.0279023736738,0.007651136592231039,0.06818181818181819,0.7785714285714286,34,77,351.51089643599613,POINT (526287.7395593789 6081140.922759174),526287.7395593789,6081140.922759174,9.996084745561282,0.0,79.66490387391048,0.0 -2022-09-26 02:19:38,54.8766544010694,15.409846579958499,59.09090909090909,89.0,6.8734191073537705,10.0,1000.0,2.453946258322088,380.02446226113483,0.005905633022495055,0.0590909090909091,0.7785714285714286,29,77,352.16224240731185,POINT (526297.573457074 6081142.716126854),526297.573457074,6081142.716126854,9.99608480905653,0.0,79.66477831797933,0.0 -2022-09-26 02:19:39,54.87667,15.41,50.0,89.0,7.175195387416064,10.0,1000.0,2.3947926564515765,380.02130694907993,0.004516716004716476,0.05,0.7785714285714286,24,77,353.18128618082153,POINT (526307.4073509022 6081144.509516094),526307.4073509022,6081144.509516094,9.996084873172414,0.0,79.66465276264836,0.0 diff --git a/examples/basic_usage/gasflux_config.yaml b/examples/basic_usage/gasflux_config.yaml deleted file mode 100644 index acd02f9..0000000 --- a/examples/basic_usage/gasflux_config.yaml +++ /dev/null @@ -1,61 +0,0 @@ -# GasFlux 基本使用示例配置文件 -# 这个配置文件演示了最基本的设置,用于处理简单的气体通量数据 - -# 输出目录 -output_dir: ./output - -# 数据验证参数 -required_cols: - latitude: [-90, 90] # 纬度范围 - longitude: [-180, 180] # 经度范围 - height_ato: [0, 200] # 相对起飞高度(米) - windspeed: [0, 20] # 风速(m/s) - winddir: [0, 360] # 风向(度) - temperature: [-50, 60] # 温度(°C) - pressure: [900, 1100] # 气压(hPa) - -# 气体配置:气体名称和浓度范围(ppmv) -gases: - ch4: [1.5, 10.0] # 甲烷 - co2: [300, 500] # 二氧化碳 - -# 处理策略 -strategies: - background: "algorithm" # 背景校正方法 - sensor: "insitu" # 传感器类型 - spatial: "curtain" # 空间处理模式 - interpolation: "kriging" # 插值方法 - -# 背景校正算法设置 -algorithmic_baseline_settings: - algorithm: fastchrom # 使用FastChrom算法 - fastchrom: - half_window: 3 # 半窗口大小 - threshold: "custom" # 阈值方法 - min_fwhm: ~ - interp_half_window: 2 - smooth_half_window: 2 - weights: ~ - max_iter: 50 - min_length: 2 - -# 克里金插值设置 -semivariogram_settings: - model: spherical # 半变异函数模型 - estimator: cressie # 估计器 - n_lags: 10 # 滞后期数 - bin_func: even # 分箱函数 - fit_method: lm # 拟合方法 - maxlag: 50 # 最大滞后距离 - tolerance: 10 # 方向容差 - azimuth: 0 # 方位角 - bandwidth: 15 # 带宽 - -# 普通克里金设置 -ordinary_kriging_settings: - min_points: 3 # 最小邻点数 - max_points: 50 # 最大邻点数 - grid_resolution: 100 # 网格分辨率 - min_nodes: 5 # 最小网格节点数 - y_min: ~ # 最小y值 - cut_ground: False # 是否切割地面 diff --git a/examples/basic_usage/result.csv b/examples/basic_usage/result.csv deleted file mode 100644 index 1b85a86..0000000 --- a/examples/basic_usage/result.csv +++ /dev/null @@ -1,820 +0,0 @@ -timestamp,latitude,longitude,height_ato,windspeed,winddir,temperature,pressure,ch4,course_elevation,course_azimuth -2016-02-12 08:34:01,40.349137,115.7855289,11.865000000000009,4.85383,126.121,18.1,957.6,2.28753,8.50882,74.9353 -2016-02-12 08:34:02,40.349137,115.7855289,11.865000000000009,3.5045,142.744,18.1,957.6,2.27667,8.50882,74.9353 -2016-02-12 08:34:02,40.349137,115.7855296,9.830000000000041,3.30667,145.626,18.1,957.4,2.28621,7.26866,75.2618 -2016-02-12 08:34:02,40.3491369,115.7855295,9.830000000000041,3.19669,147.2,18.1,957.4,2.29012,6.6954,75.3488 -2016-02-12 08:34:02,40.3491366,115.7855289,9.830000000000041,3.1958,146.33,18.1,957.4,2.28968,5.15029,75.4473 -2016-02-12 08:34:02,40.3491365,115.7855279,9.830000000000041,2.24203,142.349,18.1,957.4,2.27675,3.60147,75.8082 -2016-02-12 08:34:02,40.3491365,115.7855279,9.830000000000041,2.24203,142.349,18.1,957.4,2.28111,3.60147,75.8082 -2016-02-12 08:34:02,40.3491362,115.7855267,9.830000000000041,2.65173,132.045,18.1,957.4,2.27628,2.90435,75.7617 -2016-02-12 08:34:03,40.3491359,115.7855254,9.830000000000041,3.12274,124.934,18.1,957.4,2.26905,1.51899,75.2541 -2016-02-12 08:34:04,40.3491342,115.7855197,9.482000000000028,3.62267,96.3253,18.1,957.4,2.26865,2.08601,74.3647 -2016-02-12 08:34:05,40.3491317,115.7855115,6.3040000000000305,3.48429,103.687,18.1,957.4,2.25985,-1.48779,74.6518 -2016-02-12 08:34:06,40.349131,115.7855068,3.1860000000000355,3.08523,110.241,18.1,957.4,2.25816,-5.50997,78.0309 -2016-02-12 08:34:07,40.3491309,115.7855052,0.45100000000002183,2.57202,106.603,18.1,957.4,2.26128,-2.11963,61.7648 -2016-02-12 08:34:08,40.3491307,115.7855046,0.06300000000004502,1.67764,109.782,18.0,957.4,2.26535,-6.78676,47.9709 -2016-02-12 08:34:09,40.3491332,115.7855083,0.0,1.87728,168.504,18.0,957.4,2.26713,-11.0121,47.0035 -2016-02-12 08:34:10,40.3491444,115.7855253,0.813000000000045,2.70038,170.113,18.0,957.4,2.27136,-6.98884,46.7738 -2016-02-12 08:34:11,40.3491573,115.7855439,1.1070000000000277,4.09542,158.538,17.9,957.4,2.26672,-3.50721,45.9275 -2016-02-12 08:34:12,40.3491708,115.7855627,0.8600000000000136,4.92415,152.325,17.9,957.4,2.26796,-3.67191,47.1102 -2016-02-12 08:34:13,40.3491838,115.7855814,1.4639999999999986,5.05104,149.272,17.9,957.4,2.26253,-2.6092,47.3419 -2016-02-12 08:34:14,40.3491963,115.7855993,1.2660000000000196,4.7566,146.774,17.8,957.4,2.25574,-3.68899,47.5405 -2016-02-12 08:34:15,40.3492086,115.7856167,0.9460000000000264,4.4861,146.945,17.8,957.4,2.27209,-4.73718,47.8124 -2016-02-12 08:34:16,40.3492212,115.7856339,1.1129999999999995,4.49042,147.234,17.8,957.4,2.2685,-3.71094,47.8571 -2016-02-12 08:34:17,40.3492333,115.785651,1.330000000000041,4.67508,147.701,17.8,957.4,2.26577,-4.10178,47.8265 -2016-02-12 08:34:18,40.3492453,115.7856683,0.3660000000000423,4.80069,142.768,17.8,957.4,2.26449,-4.00834,51.3819 -2016-02-12 08:34:19,40.3492558,115.7856869,0.42900000000003047,4.41849,139.131,17.8,957.4,2.2629,-3.5961,55.2403 -2016-02-12 08:34:20,40.3492652,115.7857063,0.5040000000000191,4.17348,135.791,17.8,957.4,2.27134,-3.66223,59.0575 -2016-02-12 08:34:21,40.3492739,115.7857263,0.6690000000000396,4.24922,133.776,17.7,957.4,2.26504,-4.04384,62.0997 -2016-02-12 08:34:22,40.3492823,115.7857472,0.6270000000000095,4.12397,132.906,17.7,957.4,2.26494,-3.93005,65.1934 -2016-02-12 08:34:23,40.3492897,115.7857691,0.38800000000003365,3.87817,129.092,17.7,957.4,2.26202,-3.17112,69.0847 -2016-02-12 08:34:24,40.3492958,115.7857913,0.535000000000025,3.56279,124.29,17.7,957.4,2.2705,-2.8296,73.4975 -2016-02-12 08:34:25,40.3493007,115.7858139,0.41500000000002046,3.20321,120.437,17.7,957.4,2.26211,-2.58427,74.5562 -2016-02-12 08:34:26,40.3493053,115.7858363,0.32600000000002183,2.84368,126.241,17.7,957.4,2.27064,-3.00187,74.5266 -2016-02-12 08:34:27,40.3493102,115.7858587,0.39800000000002456,2.66869,123.302,17.6,957.4,2.26641,-2.85474,74.2713 -2016-02-12 08:34:28,40.3493153,115.7858814,0.1560000000000059,2.33673,125.416,17.6,957.4,2.2613,-2.58352,74.0617 -2016-02-12 08:34:29,40.3493205,115.7859044,0.015000000000043201,2.1419,112.039,17.6,957.4,2.27285,-2.4898,74.4684 -2016-02-12 08:34:30,40.349325,115.7859273,0.023000000000024556,2.12291,112.287,17.6,957.4,2.26546,-2.37166,74.68 -2016-02-12 08:34:31,40.3493296,115.7859502,0.09500000000002728,2.11867,112.449,17.5,957.4,2.26334,-2.52349,74.727 -2016-02-12 08:34:32,40.3493339,115.7859728,0.21500000000003183,2.03503,104.255,17.5,957.4,2.25624,-2.35695,77.5604 -2016-02-12 08:34:33,40.3493375,115.7859955,0.06800000000004047,2.08166,105.808,17.5,957.4,2.26756,-2.18838,81.7064 -2016-02-12 08:34:34,40.3493398,115.7860185,0.09100000000000819,2.10121,101.349,17.5,957.4,2.27006,-2.16129,86.1149 -2016-02-12 08:34:35,40.3493408,115.7860419,0.09800000000001319,2.0652,92.3755,17.5,957.4,2.26534,-1.97706,89.1031 -2016-02-12 08:34:36,40.3493407,115.7860652,0.28400000000004866,2.03562,89.3814,17.5,957.4,2.26928,-1.69654,91.8991 -2016-02-12 08:34:37,40.3493397,115.7860884,0.16800000000000637,2.01381,86.7262,17.4,957.4,2.26397,-1.49829,95.0727 -2016-02-12 08:34:38,40.3493378,115.7861116,0.10599999999999454,1.94986,82.7376,17.4,957.4,2.26526,-1.28459,98.4028 -2016-02-12 08:34:39,40.3493345,115.7861345,0.2300000000000182,1.98893,75.9616,17.4,957.4,2.27142,-1.40811,102.871 -2016-02-12 08:34:40,40.3493301,115.786157,0.22400000000004638,1.97218,72.7694,17.4,957.4,2.26352,-1.32349,106.444 -2016-02-12 08:34:41,40.3493248,115.7861794,0.26300000000003365,1.9978,72.1563,17.4,957.4,2.26984,-1.26987,107.053 -2016-02-12 08:34:42,40.3493192,115.7862018,0.15399999999999636,1.99455,72.3657,17.4,957.4,2.27778,-1.2788,106.81 -2016-02-12 08:34:43,40.3493138,115.7862243,0.16800000000000637,2.00894,73.2219,17.4,957.4,2.27545,-1.35789,106.736 -2016-02-12 08:34:44,40.3493084,115.786247,0.23200000000002774,2.01704,73.3629,17.4,957.4,2.26695,-1.14838,107.083 -2016-02-12 08:34:45,40.3493031,115.7862696,0.14400000000000546,1.99527,72.7411,17.4,957.4,2.26658,-0.891773,107.534 -2016-02-12 08:34:46,40.3492978,115.7862919,0.14500000000003865,1.9958,72.9977,17.4,957.4,2.26718,-1.23237,107.164 -2016-02-12 08:34:47,40.3492925,115.7863145,0.20400000000000773,2.00589,73.2645,17.3,957.4,2.27372,-0.841243,107.309 -2016-02-12 08:34:48,40.3492871,115.7863372,0.11000000000001364,2.00215,73.3395,17.3,957.4,2.26653,-0.756934,106.873 -2016-02-12 08:34:49,40.3492815,115.7863599,0.16599999999999682,2.00296,69.5246,17.3,957.4,2.27131,-0.454938,110.252 -2016-02-12 08:34:50,40.3492749,115.7863818,0.27899999999999636,1.97805,64.6886,17.3,957.4,2.25977,-0.706977,114.756 -2016-02-12 08:34:51,40.349267,115.7864029,0.23900000000003274,1.9369,61.1256,17.3,957.4,2.27473,-0.520325,118.334 -2016-02-12 08:34:52,40.3492562,115.7864271,0.37700000000000955,1.9232,56.7933,17.3,957.4,2.27288,-0.892102,122.079 -2016-02-12 08:34:53,40.3492466,115.7864464,0.3160000000000309,1.9402,53.0758,17.3,957.4,2.26006,-0.668285,125.41 -2016-02-12 08:34:54,40.3492383,115.7864611,0.4070000000000391,1.94647,49.7541,17.3,957.4,2.26102,-0.793088,129.068 -2016-02-12 08:34:55,40.3492244,115.7864817,0.46200000000004593,1.96366,44.9617,17.3,957.4,2.26623,-0.715602,133.755 -2016-02-12 08:34:56,40.3492118,115.7864981,0.43200000000001637,1.96034,44.2948,17.3,957.4,2.26446,-0.690077,134.303 -2016-02-12 08:34:57,40.3491991,115.7865145,0.34700000000003683,1.97744,45.1225,17.3,957.4,2.26972,-0.643342,134.308 -2016-02-12 08:34:58,40.3491864,115.7865314,0.37700000000000955,1.76954,51.6213,17.3,957.4,2.26913,-0.884507,134.019 -2016-02-12 08:34:59,40.3491734,115.7865484,0.3170000000000073,1.64919,64.6824,17.3,957.4,2.26522,-0.561871,134.093 -2016-02-12 08:35:00,40.3491603,115.786565,0.38900000000001,1.53019,22.4667,17.3,957.4,2.27348,-0.283173,139.001 -2016-02-12 08:35:01,40.3491468,115.7865794,0.3860000000000241,1.66544,16.1733,17.3,957.4,2.25965,-0.622678,146.88 -2016-02-12 08:35:02,40.349132,115.7865915,0.49600000000003774,1.90088,25.2598,17.3,957.4,2.27091,-0.675699,152.432 -2016-02-12 08:35:03,40.3491161,115.7866014,0.660000000000025,1.92716,21.0727,17.3,957.4,2.27679,-0.638564,157.896 -2016-02-12 08:35:04,40.3490997,115.786609,0.6190000000000282,1.94499,15.5196,17.3,957.4,2.2683,-1.18828,163.563 -2016-02-12 08:35:05,40.3490826,115.7866145,0.6270000000000095,2.06029,5.61009,17.3,957.4,2.26783,-0.849828,170.567 -2016-02-12 08:35:06,40.349065,115.7866175,0.7410000000000423,2.25531,18.8411,17.3,957.4,2.27565,-1.02481,175.647 -2016-02-12 08:35:07,40.3490471,115.7866191,0.5990000000000464,2.6897,27.0446,17.3,957.4,2.26251,-0.938632,175.901 -2016-02-12 08:35:08,40.3490295,115.7866204,0.8120000000000118,3.5706,22.8119,17.3,957.4,2.26682,-1.4553,175.625 -2016-02-12 08:35:09,40.3490118,115.7866221,0.5160000000000196,3.58223,23.2989,17.3,957.4,2.26834,-1.51818,175.649 -2016-02-12 08:35:10,40.3489939,115.7866236,0.6400000000000432,3.47975,23.2924,17.3,957.4,2.26655,-1.19849,175.598 -2016-02-12 08:35:11,40.3489761,115.7866252,0.5400000000000205,3.19407,20.9252,17.3,957.4,2.26637,-0.986002,176.011 -2016-02-12 08:35:12,40.3489581,115.7866269,0.5540000000000305,2.9534,17.5397,17.3,957.4,2.2573,-1.64013,176.158 -2016-02-12 08:35:13,40.3489399,115.7866285,0.7060000000000173,3.15458,18.2456,17.3,957.4,2.26939,-0.792553,175.629 -2016-02-12 08:35:14,40.3489218,115.7866301,0.6890000000000214,3.20536,19.0764,17.3,957.4,2.2633,-1.16851,175.798 -2016-02-12 08:35:15,40.3489038,115.7866319,0.8970000000000482,3.5823,22.3026,17.3,957.4,2.25549,-0.91357,175.775 -2016-02-12 08:35:16,40.3488859,115.7866335,0.7669999999999959,3.65156,26.1432,17.3,957.4,2.27439,-1.38495,178.614 -2016-02-12 08:35:17,40.3488681,115.7866336,0.7250000000000227,3.69689,28.3517,17.2,957.4,2.2692,-1.36653,-178.318 -2016-02-12 08:35:18,40.3488503,115.7866322,0.8000000000000114,3.65114,28.7382,17.2,957.4,2.26636,-1.90382,-175.758 -2016-02-12 08:35:19,40.3488325,115.7866297,0.7480000000000473,3.6946,29.076,17.2,957.4,2.27162,-1.64705,-173.079 -2016-02-12 08:35:20,40.3488148,115.7866265,0.7590000000000146,3.86282,32.9325,17.2,957.4,2.26822,-1.50341,-170.331 -2016-02-12 08:35:21,40.3487974,115.7866223,0.57000000000005,3.78317,34.2873,17.2,957.4,2.259,-1.77715,-168.664 -2016-02-12 08:35:22,40.3487801,115.7866172,0.8000000000000114,3.73202,35.6475,17.2,957.4,2.26842,-1.80386,-166.087 -2016-02-12 08:35:23,40.348763,115.7866112,0.5540000000000305,3.64181,38.9923,17.2,957.4,2.26291,-1.70703,-162.255 -2016-02-12 08:35:24,40.348746,115.7866039,0.7320000000000277,3.81269,41.8128,17.2,957.4,2.26664,-1.71048,-159.878 -2016-02-12 08:35:25,40.3487291,115.7865957,0.7630000000000337,3.48729,42.0299,17.2,957.4,2.26374,-1.33685,-159.608 -2016-02-12 08:35:26,40.3487121,115.7865872,1.0080000000000382,3.75868,43.3489,17.2,957.4,2.26646,-1.55744,-159.91 -2016-02-12 08:35:27,40.3486957,115.7865788,0.7060000000000173,3.79234,42.8656,17.2,957.4,2.26328,-2.0048,-159.441 -2016-02-12 08:35:28,40.3486789,115.7865705,0.7350000000000136,4.22793,42.0491,17.2,957.4,2.26176,-1.98951,-159.699 -2016-02-12 08:35:29,40.3486623,115.7865625,0.7860000000000014,4.27342,41.0633,17.2,957.4,2.2614,-2.18286,-159.799 -2016-02-12 08:35:30,40.3486421,115.7865527,0.5580000000000496,4.18449,42.0908,17.2,957.4,2.2712,-1.9235,-159.6 -2016-02-12 08:35:31,40.3486252,115.7865443,0.4430000000000405,4.02941,43.9017,17.2,957.4,2.26236,-1.78458,-159.343 -2016-02-12 08:35:32,40.3486085,115.7865356,0.4370000000000118,4.02369,47.8521,17.2,957.4,2.26458,-1.82948,-155.262 -2016-02-12 08:35:33,40.3485927,115.7865251,0.6200000000000045,4.1616,52.7125,17.2,957.4,2.26249,-2.21001,-149.328 -2016-02-12 08:35:34,40.3485776,115.7865124,0.5920000000000414,4.1949,56.7896,17.2,957.4,2.26734,-1.6575,-143.271 -2016-02-12 08:35:35,40.3485635,115.7864976,0.6930000000000405,4.27443,63.2883,17.2,957.4,2.27079,-1.35784,-137.443 -2016-02-12 08:35:36,40.3485507,115.7864814,1.0370000000000346,4.18031,70.4075,17.2,957.4,2.27161,-2.25059,-133.151 -2016-02-12 08:35:37,40.3485392,115.7864642,1.143000000000029,4.11209,74.1468,17.1,957.4,2.26222,-2.27961,-128.075 -2016-02-12 08:35:38,40.3485291,115.7864455,1.0510000000000446,4.69329,81.6319,17.1,957.4,2.26785,-2.59902,-121.299 -2016-02-12 08:35:39,40.3485208,115.7864255,1.2220000000000368,5.02418,87.2004,17.1,957.4,2.26188,-3.57525,-114.178 -2016-02-12 08:35:40,40.3485143,115.7864042,1.0570000000000164,5.29014,89.51,17.1,957.4,2.25589,-3.38018,-109.557 -2016-02-12 08:35:41,40.3485083,115.7863817,1.0950000000000273,5.35193,86.5112,17.1,957.4,2.26569,-3.63266,-110.057 -2016-02-12 08:35:42,40.3485019,115.7863589,0.9279999999999973,5.48287,85.2166,17.1,957.4,2.25651,-3.05251,-109.671 -2016-02-12 08:35:43,40.3484959,115.7863364,1.3120000000000118,5.33864,85.4933,17.1,957.4,2.2527,-3.46027,-109.986 -2016-02-12 08:35:44,40.3484896,115.7863142,0.9790000000000418,5.04344,87.0444,17.1,957.4,2.25495,-2.7903,-109.977 -2016-02-12 08:35:45,40.3484838,115.7862919,0.8730000000000473,5.04691,88.3346,17.1,957.4,2.25385,-2.69067,-109.498 -2016-02-12 08:35:46,40.3484784,115.7862698,0.7189999999999941,4.85317,86.7704,17.1,957.4,2.25565,-3.02553,-109.5 -2016-02-12 08:35:47,40.3484727,115.7862479,0.4759999999999991,4.84407,85.5268,17.1,957.4,2.26485,-2.80897,-109.877 -2016-02-12 08:35:48,40.3484667,115.786226,0.7650000000000432,4.92592,82.6714,17.1,957.4,2.26122,-3.19976,-110.092 -2016-02-12 08:35:49,40.3484607,115.7862036,0.9590000000000032,4.84169,80.0226,17.1,957.4,2.26519,-3.37566,-109.883 -2016-02-12 08:35:50,40.3484548,115.7861811,0.9000000000000341,4.92234,79.5242,17.0,957.4,2.25928,-3.44132,-109.953 -2016-02-12 08:35:51,40.3484488,115.7861583,0.7050000000000409,4.87384,79.8274,17.0,957.4,2.26367,-2.44092,-108.984 -2016-02-12 08:35:52,40.3484431,115.7861355,1.3520000000000323,4.80479,85.2199,17.0,957.4,2.26016,-2.95146,-104.259 -2016-02-12 08:35:53,40.3484387,115.7861128,1.2720000000000482,4.68873,88.9,17.0,957.4,2.26904,-3.00915,-99.8611 -2016-02-12 08:35:54,40.3484358,115.7860899,1.1779999999999973,4.69722,95.5627,17.0,957.4,2.26347,-3.11661,-95.6539 -2016-02-12 08:35:55,40.3484345,115.7860661,1.05600000000004,4.66468,100.449,17.0,957.4,2.26009,-2.20477,-92.2146 -2016-02-12 08:35:56,40.3484343,115.7860428,1.3660000000000423,4.72368,105.041,17.0,957.4,2.25921,-2.67096,-88.8258 -2016-02-12 08:35:57,40.3484347,115.7860198,1.8100000000000023,4.68402,107.835,17.0,957.4,2.25358,-3.15406,-84.749 -2016-02-12 08:35:58,40.3484367,115.7859975,2.1230000000000473,4.85389,110.385,17.0,957.4,2.26588,-4.38063,-81.1136 -2016-02-12 08:35:59,40.3484402,115.7859746,1.6659999999999968,5.12074,113.453,17.0,957.4,2.25073,-3.78266,-75.9072 -2016-02-12 08:36:00,40.3484451,115.7859519,1.5710000000000264,5.51489,114.162,16.9,957.4,2.25645,-3.45966,-73.0747 -2016-02-12 08:36:01,40.3484506,115.7859298,1.41700000000003,5.60618,114.705,16.9,957.4,2.26324,-3.852,-72.6888 -2016-02-12 08:36:02,40.3484562,115.7859079,1.4260000000000446,5.9885,113.608,16.9,957.4,2.25939,-4.08462,-72.4005 -2016-02-12 08:36:03,40.3484618,115.7858859,1.2960000000000491,6.06681,114.146,16.9,957.4,2.26444,-4.33265,-72.7478 -2016-02-12 08:36:04,40.3484672,115.7858634,1.875,6.16502,113.964,16.9,957.4,2.25122,-4.29353,-72.6671 -2016-02-12 08:36:05,40.3484723,115.7858407,1.288000000000011,5.83346,114.53,16.9,957.4,2.25211,-4.46077,-72.5697 -2016-02-12 08:36:06,40.3484779,115.785818,1.2210000000000036,5.89907,113.53,16.9,957.4,2.25987,-4.01207,-72.7203 -2016-02-12 08:36:07,40.3484833,115.7857951,1.188000000000045,5.87513,112.884,16.9,957.4,2.25998,-3.94424,-72.7445 -2016-02-12 08:36:08,40.3484887,115.7857725,1.0230000000000246,5.86465,112.761,16.9,957.4,2.25653,-3.75708,-72.6379 -2016-02-12 08:36:09,40.3484941,115.78575,1.3140000000000214,5.86195,113.211,16.9,957.4,2.26881,-3.84116,-72.7711 -2016-02-12 08:36:10,40.3484998,115.7857277,1.1030000000000086,5.76417,116.283,16.8,957.4,2.26094,-3.59034,-70.8237 -2016-02-12 08:36:11,40.3485062,115.785706,1.30600000000004,5.63247,121.963,16.8,957.4,2.26475,-4.2956,-65.0574 -2016-02-12 08:36:12,40.348514,115.7856854,1.295000000000016,5.60765,127.444,16.8,957.4,2.27279,-4.16794,-59.1853 -2016-02-12 08:36:13,40.3485233,115.7856661,1.3950000000000387,5.85706,131.455,16.8,957.4,2.24993,-4.41538,-54.0778 -2016-02-12 08:36:14,40.3485344,115.7856481,1.2980000000000018,5.88649,137.158,16.8,957.4,2.25646,-4.22068,-48.5817 -2016-02-12 08:36:15,40.3485493,115.7856278,1.413000000000011,5.83127,140.639,16.8,957.4,2.263,-3.64977,-43.7228 -2016-02-12 08:36:16,40.3485596,115.7856156,1.6090000000000373,5.7416,144.321,16.8,957.4,2.25908,-4.5659,-39.0127 -2016-02-12 08:36:17,40.3485769,115.7855999,1.2909999999999968,5.95436,149.405,16.7,957.4,2.25161,-3.4582,-31.6394 -2016-02-12 08:36:18,40.3485927,115.7855881,1.032000000000039,5.88089,152.516,16.7,957.4,2.26682,-3.81466,-26.593 -2016-02-12 08:36:19,40.3486084,115.7855776,1.410000000000025,5.92927,151.424,16.7,957.4,2.26897,-4.88384,-25.4304 -2016-02-12 08:36:20,40.3486242,115.7855675,1.4120000000000346,6.06628,150.826,16.7,957.4,2.25404,-4.74525,-25.5442 -2016-02-12 08:36:21,40.3486401,115.7855574,1.1860000000000355,6.09935,150.336,16.7,957.4,2.25539,-4.647,-25.6555 -2016-02-12 08:36:22,40.3486565,115.7855475,0.9850000000000136,6.11633,148.496,16.7,957.4,2.26913,-4.63177,-25.7067 -2016-02-12 08:36:23,40.3486729,115.7855371,0.7600000000000477,5.92629,148.812,16.6,957.4,2.26475,-4.46693,-26.0157 -2016-02-12 08:36:24,40.3486891,115.7855269,0.7820000000000391,6.07324,148.379,16.6,957.4,2.25667,-4.99766,-25.7595 -2016-02-12 08:36:25,40.3487052,115.7855169,1.1040000000000418,5.99085,149.5,16.6,957.4,2.25532,-4.78653,-25.4645 -2016-02-12 08:36:26,40.3487213,115.7855067,0.8840000000000146,6.04219,151.354,16.6,957.4,2.26913,-4.636,-25.7042 -2016-02-12 08:36:27,40.3487372,115.7854966,0.8730000000000473,5.95603,152.786,16.6,957.4,2.26901,-4.5439,-24.9907 -2016-02-12 08:36:28,40.348753,115.7854872,0.6620000000000346,6.0444,155.92,16.6,957.4,2.25882,-5.09607,-21.8508 -2016-02-12 08:36:29,40.3487698,115.7854789,0.7740000000000009,6.23573,157.69,16.6,957.4,2.27421,-4.48643,-17.9076 -2016-02-12 08:36:30,40.3487874,115.7854718,0.9569999999999936,6.31058,159.216,16.5,957.4,2.25334,-4.42131,-14.4395 -2016-02-12 08:36:31,40.3488052,115.7854663,0.8700000000000045,6.16818,160.728,16.5,957.4,2.25037,-4.45109,-11.6332 -2016-02-12 08:36:32,40.3488228,115.785462,0.5060000000000286,6.10734,161.71,16.5,957.4,2.25493,-4.35846,-8.40024 -2016-02-12 08:36:33,40.3488399,115.7854588,0.799000000000035,6.11898,164.494,16.4,957.4,2.24844,-5.41057,-6.17409 -2016-02-12 08:36:34,40.3488573,115.7854564,0.742999999999995,6.07141,167.215,16.4,957.4,2.26561,-5.26034,-2.7436 -2016-02-12 08:36:35,40.3488754,115.7854551,0.6370000000000005,6.0496,171.946,16.4,957.4,2.25455,-4.44777,1.35836 -2016-02-12 08:36:36,40.3488935,115.785456,0.7320000000000277,5.83808,173.643,16.4,957.4,2.26214,-4.58309,4.52072 -2016-02-12 08:36:37,40.3489117,115.7854579,0.8480000000000132,5.70385,172.17,16.4,957.4,2.26151,-3.90147,5.07055 -2016-02-12 08:36:38,40.3489293,115.78546,0.9800000000000182,5.51454,171.791,16.4,957.4,2.25964,-4.5457,5.24711 -2016-02-12 08:36:39,40.348947,115.7854622,1.1539999999999964,5.33505,173.485,16.4,957.4,2.26292,-4.35318,5.33673 -2016-02-12 08:36:40,40.3489653,115.7854648,1.0,5.29204,174.852,16.3,957.4,2.25233,-3.87292,4.70492 -2016-02-12 08:36:41,40.3489836,115.7854674,1.3559999999999945,5.29741,176.258,16.3,957.4,2.25662,-3.21208,5.21414 -2016-02-12 08:36:42,40.3490015,115.7854698,1.3730000000000473,5.14176,174.023,16.3,957.4,2.25812,-3.51608,5.02582 -2016-02-12 08:36:43,40.3490189,115.7854713,1.516999999999996,5.12388,174.751,16.2,957.4,2.25788,-4.56814,5.03848 -2016-02-12 08:36:44,40.3490365,115.7854732,1.4870000000000232,5.10234,176.725,16.2,957.4,2.26351,-3.96444,5.46284 -2016-02-12 08:36:45,40.3490545,115.7854759,1.3980000000000246,5.09201,176.966,16.2,957.4,2.2583,-3.79534,5.24914 -2016-02-12 08:36:46,40.3490724,115.7854788,1.6370000000000005,5.11211,176.889,16.2,957.4,2.2544,-3.72235,5.29693 -2016-02-12 08:36:47,40.3490906,115.785481,1.1280000000000427,4.8991,175.319,16.2,957.4,2.26159,-3.32421,5.01752 -2016-02-12 08:36:48,40.3491085,115.7854831,0.8170000000000073,4.10668,170.376,16.2,957.4,2.25495,10.1467,5.26258 -2016-02-12 08:36:49,40.3491158,115.7854839,0.9000000000000341,2.6314,163.343,16.2,957.4,2.26207,0.106344,5.66132 -2016-02-12 08:36:50,40.349117,115.785484,0.38100000000002865,1.58396,131.609,16.1,957.4,2.26455,-0.625125,5.82946 -2016-02-12 08:36:51,40.3491165,115.7854841,0.313000000000045,0.960517,119.397,16.1,957.4,2.25937,-1.82616,5.43775 -2016-02-12 08:36:52,40.3491162,115.7854839,0.5020000000000095,0.136019,56.7013,16.1,957.4,2.26542,-1.73079,5.51902 -2016-02-12 08:36:53,40.3491157,115.7854835,0.3410000000000082,0.0603939,21.4057,16.1,957.4,2.25628,-1.86747,5.8482 -2016-02-12 08:36:54,40.3491154,115.7854833,0.19600000000002638,0.0369274,47.6323,16.1,957.4,2.25712,-1.53655,6.2355 -2016-02-12 08:36:55,40.3491151,115.7854834,0.2470000000000141,0.0871401,79.15,16.1,957.4,2.26202,-1.14965,6.09218 -2016-02-12 08:36:56,40.3491149,115.7854834,0.08300000000002683,0.393658,71.1975,16.1,957.4,2.25841,-1.21857,5.48189 -2016-02-12 08:36:57,40.3491148,115.7854834,0.32900000000000773,0.586761,66.23,16.1,957.4,2.27044,-1.31146,5.43551 -2016-02-12 08:36:58,40.3491145,115.7854834,0.28600000000000136,0.596112,53.5956,16.1,957.4,2.25902,-1.45305,5.54127 -2016-02-12 08:36:59,40.3491142,115.7854835,0.21200000000004593,0.25565,52.3429,16.1,957.4,2.25571,-1.29331,5.77698 -2016-02-12 08:37:00,40.3491142,115.7854836,0.25200000000000955,0.0781401,60.0922,16.1,957.4,2.26602,-1.42537,5.60733 -2016-02-12 08:37:01,40.3491142,115.7854835,0.16100000000000136,0.0230935,155.25,16.1,957.4,2.25023,-1.26584,5.76965 -2016-02-12 08:37:02,40.349114,115.7854833,0.10099999999999909,0.0296167,138.082,16.1,957.4,2.26859,-0.900714,6.01267 -2016-02-12 08:37:03,40.349114,115.7854834,0.15500000000002956,0.430488,50.8187,16.1,957.4,2.25236,-1.35083,5.15359 -2016-02-12 08:37:04,40.3491135,115.7854833,0.48500000000001364,0.980068,84.1409,16.1,957.4,2.26295,-2.14462,6.25571 -2016-02-12 08:37:05,40.3491133,115.7854835,0.3830000000000382,1.27921,103.371,16.1,957.4,2.25558,-2.13589,6.19036 -2016-02-12 08:37:06,40.3491131,115.7854836,0.4159999999999968,1.00135,137.031,16.1,957.4,2.26097,-2.52534,5.96649 -2016-02-12 08:37:07,40.3491134,115.7854836,0.2950000000000159,0.717434,155.678,16.1,957.4,2.26059,-1.63997,5.78432 -2016-02-12 08:37:08,40.3491138,115.7854835,0.21200000000004593,0.303557,137.275,16.1,957.4,2.25044,-0.967678,5.61883 -2016-02-12 08:37:09,40.3491137,115.7854835,0.21100000000001273,0.285436,130.174,16.1,957.4,2.25547,-0.834362,5.65676 -2016-02-12 08:37:10,40.3491134,115.7854835,0.1500000000000341,0.083626,87.1777,16.1,957.4,2.26308,-0.800933,5.2812 -2016-02-12 08:37:11,40.3491131,115.7854835,0.16700000000003,0.10367,42.9916,16.1,957.4,2.25831,-1.52589,4.76376 -2016-02-12 08:37:12,40.3491127,115.7854833,0.5340000000000487,0.113468,112.581,16.1,957.4,2.26024,-1.83201,5.26747 -2016-02-12 08:37:13,40.3491126,115.7854835,0.5110000000000241,0.0976797,81.7381,16.1,957.4,2.2573,-1.50989,5.33285 -2016-02-12 08:37:14,40.3491124,115.7854837,0.5590000000000259,1.8663,90.5845,16.1,957.4,2.26294,-1.44776,5.84654 -2016-02-12 08:37:15,40.3491125,115.7854838,1.865000000000009,2.56762,89.8643,16.1,957.4,2.26043,-0.567501,6.1396 -2016-02-12 08:37:16,40.3491122,115.7854834,4.349000000000046,0.917837,91.5823,16.1,957.6,2.26137,-1.97875,5.82784 -2016-02-12 08:37:17,40.3491111,115.7854803,5.638000000000034,0.716475,48.2852,16.1,957.6,2.26394,-2.59172,42.491 -2016-02-12 08:37:18,40.349111,115.7854795,5.432000000000016,0.760453,50.6434,16.1,957.6,2.25914,-6.46643,44.7529 -2016-02-12 08:37:19,40.3491155,115.785485,5.338999999999999,0.642827,152.992,16.2,957.6,2.25408,-8.15347,44.0491 -2016-02-12 08:37:20,40.3491267,115.7854981,5.7379999999999995,1.76091,82.2608,16.2,957.6,2.25425,2.78277,45.1 -2016-02-12 08:37:21,40.3491335,115.7855064,5.6650000000000205,0.881555,11.1025,16.2,957.6,2.26243,3.05661,47.7378 -2016-02-12 08:37:23,40.3491349,115.7855084,5.471000000000004,0.876476,69.6464,16.2,957.6,2.25292,-11.4077,48.1101 -2016-02-12 08:37:23,40.3491427,115.7855204,5.588999999999999,1.84099,115.054,16.2,957.6,2.25092,-3.99469,47.4194 -2016-02-12 08:37:25,40.3491553,115.7855389,5.801000000000045,2.39834,107.803,16.2,957.6,2.25989,-2.57408,47.3755 -2016-02-12 08:37:26,40.3491683,115.7855575,6.093000000000018,3.37656,124.034,16.2,957.4,2.26015,-2.74762,47.3582 -2016-02-12 08:37:27,40.3491811,115.785576,6.409000000000049,3.88895,134.223,16.2,957.4,2.25817,-3.03106,47.53 -2016-02-12 08:37:28,40.3491935,115.7855944,6.5540000000000305,3.92564,147.649,16.2,957.4,2.25108,-3.07153,47.3604 -2016-02-12 08:37:29,40.3492054,115.7856118,6.573000000000036,4.2193,150.06,16.2,957.4,2.2539,-3.572,47.243 -2016-02-12 08:37:30,40.3492176,115.7856288,6.5160000000000196,4.64874,149.884,16.2,957.4,2.24965,-3.67273,47.4047 -2016-02-12 08:37:31,40.3492301,115.7856461,6.145000000000039,4.72077,150.734,16.2,957.4,2.2622,-3.50582,47.5138 -2016-02-12 08:37:32,40.3492422,115.7856636,6.133000000000038,4.53941,145.099,16.2,957.4,2.25039,-3.6977,50.4106 -2016-02-12 08:37:33,40.3492531,115.7856817,6.093999999999994,4.65501,139.49,16.2,957.4,2.25039,-4.10876,54.9473 -2016-02-12 08:37:34,40.3492629,115.785701,6.29400000000004,4.75953,137.043,16.2,957.4,2.26519,-3.8511,58.421 -2016-02-12 08:37:35,40.349272,115.7857212,6.16700000000003,4.68933,133.723,16.2,957.4,2.25982,-2.84437,61.008 -2016-02-12 08:37:36,40.3492803,115.7857422,5.970000000000027,3.71239,129.472,16.2,957.6,2.25764,-2.38204,64.3574 -2016-02-12 08:37:37,40.3492877,115.7857639,5.673000000000002,3.24695,125.042,16.2,957.6,2.25472,-2.49819,68.7895 -2016-02-12 08:37:38,40.3492935,115.7857858,6.0020000000000095,3.11102,121.256,16.2,957.4,2.26319,-2.82953,72.6732 -2016-02-12 08:37:39,40.3492985,115.7858079,5.843000000000018,3.55585,127.703,16.2,957.6,2.26381,-3.01438,73.9861 -2016-02-12 08:37:40,40.3493033,115.78583,5.6860000000000355,3.66656,127.519,16.2,957.6,2.26546,-3.47219,74.2353 -2016-02-12 08:37:41,40.3493081,115.7858522,5.900000000000034,3.7344,126.386,16.2,957.6,2.26321,-3.65925,74.02 -2016-02-12 08:37:42,40.3493131,115.7858748,5.757000000000005,3.59181,124.73,16.2,957.6,2.2622,-3.15687,74.24 -2016-02-12 08:37:43,40.3493182,115.7858977,5.725999999999999,3.52774,122.094,16.2,957.6,2.25546,-3.02432,74.6855 -2016-02-12 08:37:44,40.349323,115.7859204,5.878000000000043,3.64108,121.595,16.2,957.6,2.25546,-3.44193,74.1486 -2016-02-12 08:37:45,40.3493279,115.7859431,5.875,4.10979,123.849,16.2,957.6,2.25546,-3.16246,74.2353 -2016-02-12 08:37:46,40.3493334,115.7859706,5.775000000000034,4.2231,121.878,16.2,957.6,2.25546,-2.85934,77.3826 -2016-02-12 08:37:47,40.3493371,115.7859941,5.854000000000042,3.38294,116.494,16.2,957.6,2.25546,-1.69435,81.6517 -2016-02-12 08:37:48,40.349339,115.7860126,5.703000000000031,3.05009,112.988,16.2,957.6,2.25773,-2.59874,84.8266 -2016-02-12 08:37:49,40.3493403,115.7860404,5.862000000000023,2.45333,104.114,16.2,957.6,2.25121,-2.6631,88.8626 -2016-02-12 08:37:50,40.3493403,115.7860637,5.515000000000043,2.71353,107.91,16.2,957.6,2.26119,-2.36504,91.8881 -2016-02-12 08:37:51,40.3493394,115.7860872,5.501000000000033,2.80362,106.534,16.2,957.6,2.272,-2.08923,94.6365 -2016-02-12 08:37:52,40.3493377,115.7861101,5.75,2.76796,106.874,16.2,957.6,2.26665,-1.91928,98.7676 -2016-02-12 08:37:53,40.3493346,115.7861332,5.528999999999996,2.30693,90.5027,16.1,957.6,2.27118,-1.50633,102.875 -2016-02-12 08:37:54,40.3493303,115.7861556,5.57000000000005,2.15987,80.27,16.1,957.6,2.26014,-2.41663,106.747 -2016-02-12 08:37:55,40.3493251,115.7861782,5.718000000000018,1.98563,72.6664,16.1,957.6,2.26723,-2.04302,107.311 -2016-02-12 08:37:56,40.3493196,115.7862007,5.552999999999997,2.00151,72.8042,16.1,957.6,2.26513,-2.02087,106.976 -2016-02-12 08:37:57,40.3493142,115.7862233,5.675000000000011,2.00659,73.3209,16.1,957.6,2.27117,-2.0311,106.897 -2016-02-12 08:37:58,40.349309,115.786246,5.585000000000036,1.99442,73.2617,16.1,957.6,2.26669,-1.85794,107.051 -2016-02-12 08:37:59,40.3493037,115.7862686,5.536000000000001,2.00573,73.0795,16.1,957.6,2.26195,-1.67994,106.978 -2016-02-12 08:38:00,40.3492984,115.7862912,5.532000000000039,2.00435,72.5278,16.1,957.6,2.26446,-1.44107,107.109 -2016-02-12 08:38:01,40.3492929,115.7863138,5.579000000000008,2.01129,72.6281,16.1,957.6,2.26836,-1.59664,107.211 -2016-02-12 08:38:02,40.3492874,115.7863364,5.55800000000005,1.98886,72.6863,16.1,957.6,2.2662,-1.67881,106.822 -2016-02-12 08:38:03,40.3492821,115.7863585,5.632000000000005,1.97927,70.5809,16.1,957.6,2.26912,-1.75376,109.576 -2016-02-12 08:38:04,40.349276,115.7863801,5.837000000000046,1.97986,64.8357,16.1,957.6,2.27006,-1.97127,114.942 -2016-02-12 08:38:05,40.3492681,115.7864007,5.823000000000036,1.97842,61.166,16.1,957.6,2.26009,-1.6458,118.698 -2016-02-12 08:38:06,40.3492592,115.7864208,5.7900000000000205,1.99769,57.8575,16.1,957.6,2.26133,-1.79207,121.582 -2016-02-12 08:38:07,40.3492495,115.7864403,5.853000000000009,2.00282,54.7015,16.1,957.6,2.26969,-1.57073,124.545 -2016-02-12 08:38:08,40.349239,115.786459,5.771000000000015,1.9989,50.599,16.1,957.6,2.25815,-1.77694,129.001 -2016-02-12 08:38:09,40.3492274,115.7864766,5.78000000000003,1.98813,46.3829,16.1,957.6,2.26562,-1.72888,133.366 -2016-02-12 08:38:10,40.349215,115.7864933,5.866000000000042,1.99488,45.6054,16.1,957.6,2.26581,-2.17574,134.303 -2016-02-12 08:38:11,40.3492022,115.7865101,5.807000000000016,1.98864,45.893,16.1,957.6,2.2618,-1.81056,134.52 -2016-02-12 08:38:12,40.3491897,115.7865271,5.6410000000000196,1.99804,46.0968,16.1,957.6,2.26713,-1.72293,134.343 -2016-02-12 08:38:13,40.3491772,115.7865441,5.715000000000032,2.01774,45.7766,16.2,957.6,2.26881,-1.66066,134.316 -2016-02-12 08:38:14,40.3491645,115.7865609,5.787000000000035,2.01669,41.1983,16.2,957.6,2.26173,-1.78608,137.866 -2016-02-12 08:38:15,40.3491509,115.7865759,5.875,1.98778,34.7049,16.2,957.6,2.25985,-1.48482,144.993 -2016-02-12 08:38:16,40.3491362,115.7865886,5.813000000000045,1.97874,28.2621,16.2,957.6,2.26267,-1.65466,150.873 -2016-02-12 08:38:17,40.3491205,115.7865992,6.025000000000034,2.26713,25.0355,16.2,957.4,2.2593,-1.70951,156.254 -2016-02-12 08:38:18,40.3491039,115.7866075,6.006000000000029,2.47573,18.7115,16.2,957.4,2.2718,-1.63082,161.557 -2016-02-12 08:38:19,40.349087,115.7866139,5.956999999999994,2.56727,8.6849,16.2,957.6,2.26504,-1.88711,168.928 -2016-02-12 08:38:20,40.3490696,115.7866172,6.229000000000042,2.75719,0.527441,16.2,957.4,2.26636,-1.99268,174.757 -2016-02-12 08:38:21,40.3490516,115.7866186,6.1370000000000005,3.24292,2.39415,16.2,957.4,2.26015,-2.09729,175.563 -2016-02-12 08:38:22,40.3490337,115.7866199,6.097000000000037,3.42724,3.36974,16.2,957.4,2.26113,-2.11005,175.792 -2016-02-12 08:38:23,40.3490159,115.7866215,6.021000000000015,3.56703,2.19504,16.2,957.4,2.26318,-2.58626,176.337 -2016-02-12 08:38:24,40.3489978,115.7866231,6.031000000000006,2.98014,0.730891,16.2,957.4,2.2592,-2.18878,176.036 -2016-02-12 08:38:25,40.3489799,115.7866245,6.050000000000011,2.8769,1.18416,16.2,957.4,2.25769,-2.45616,175.722 -2016-02-12 08:38:26,40.348962,115.7866262,6.004000000000019,2.97136,0.474847,16.2,957.4,2.25814,-2.30747,176.164 -2016-02-12 08:38:27,40.348944,115.7866277,6.004000000000019,3.28611,0.877931,16.2,957.4,2.269,-2.20202,176.154 -2016-02-12 08:38:28,40.3489259,115.7866295,5.921000000000049,3.28373,1.71368,16.2,957.6,2.26907,-2.02838,175.744 -2016-02-12 08:38:29,40.3489042,115.786632,5.921000000000049,3.18593,0.556809,16.2,957.6,2.26987,-1.73959,176.318 -2016-02-12 08:38:30,40.3488863,115.7866332,5.9430000000000405,3.17403,2.17954,16.2,957.6,2.26099,-1.88535,178.499 -2016-02-12 08:38:31,40.3488686,115.7866333,6.1370000000000005,3.17068,5.38026,16.2,957.4,2.25922,-2.30753,-178.254 -2016-02-12 08:38:32,40.3488508,115.786632,6.119000000000028,2.97947,7.49582,16.2,957.4,2.26828,-1.80747,-175.54 -2016-02-12 08:38:33,40.348833,115.7866299,6.079000000000008,2.76366,9.47064,16.2,957.4,2.2712,-2.05905,-172.77 -2016-02-12 08:38:34,40.3488154,115.7866269,6.048000000000002,2.80114,12.3371,16.2,957.4,2.26121,-2.1765,-171.028 -2016-02-12 08:38:35,40.3487978,115.7866228,5.961000000000013,2.38589,13.145,16.2,957.6,2.25807,-1.81427,-168.985 -2016-02-12 08:38:36,40.3487802,115.7866181,5.861000000000047,2.69336,16.9089,16.2,957.6,2.26228,-1.41431,-166.704 -2016-02-12 08:38:37,40.3487628,115.7866124,6.129000000000019,3.06392,23.064,16.2,957.4,2.26631,-1.84058,-163.542 -2016-02-12 08:38:38,40.3487457,115.7866051,6.288000000000011,3.4603,28.1621,16.2,957.4,2.26631,-1.43673,-160.633 -2016-02-12 08:38:39,40.3487288,115.7865968,6.198000000000036,3.43651,28.6348,16.2,957.4,2.26631,-1.62867,-159.419 -2016-02-12 08:38:40,40.348712,115.7865883,5.991000000000042,2.75678,26.6074,16.2,957.6,2.26457,-0.846973,-159.113 -2016-02-12 08:38:41,40.3486952,115.7865797,6.177000000000021,2.54112,26.0398,16.2,957.4,2.26195,-1.4228,-160.025 -2016-02-12 08:38:42,40.3486785,115.7865715,6.125,2.77843,30.673,16.2,957.4,2.27229,-1.28339,-158.953 -2016-02-12 08:38:43,40.3486617,115.7865631,5.989000000000033,2.89037,31.4589,16.2,957.6,2.26166,-1.72081,-159.983 -2016-02-12 08:38:44,40.3486446,115.7865549,6.1059999999999945,3.4807,38.7283,16.2,957.4,2.2613,-0.817808,-159.645 -2016-02-12 08:38:45,40.3486278,115.7865468,6.263000000000034,3.21584,39.218,16.2,957.4,2.25894,-1.0708,-159.434 -2016-02-12 08:38:46,40.3486114,115.7865384,6.3799999999999955,3.20978,42.7982,16.3,957.4,2.24972,-1.54731,-156.522 -2016-02-12 08:38:47,40.3485958,115.7865289,6.196000000000026,3.13252,47.861,16.3,957.4,2.25409,-2.09613,-150.524 -2016-02-12 08:38:48,40.3485808,115.7865168,6.437000000000012,3.67395,54.5351,16.3,957.4,2.2518,-2.04851,-144.217 -2016-02-12 08:38:49,40.348567,115.7865025,6.314999999999998,3.8837,60.8641,16.3,957.4,2.2588,-2.03042,-138.723 -2016-02-12 08:38:50,40.3485541,115.7864867,6.55600000000004,4.24575,66.9797,16.3,957.4,2.25364,-2.63416,-133.698 -2016-02-12 08:38:51,40.3485426,115.7864697,6.711000000000013,4.50037,69.3373,16.3,957.4,2.26174,-3.24088,-128.675 -2016-02-12 08:38:52,40.3485322,115.7864511,6.847000000000037,4.77316,73.4454,16.3,957.4,2.26407,-3.37251,-123.113 -2016-02-12 08:38:53,40.3485233,115.786431,6.723000000000013,5.25047,74.79,16.3,957.4,2.2571,-3.46872,-116.851 -2016-02-12 08:38:54,40.3485158,115.7864097,6.77800000000002,5.24579,78.8962,16.3,957.4,2.26562,-2.75706,-110.608 -2016-02-12 08:38:55,40.3485097,115.7863879,6.963000000000022,5.36328,78.6499,16.3,957.4,2.263,-3.80411,-109.608 -2016-02-12 08:38:56,40.3485038,115.7863656,6.785000000000025,5.18284,77.9227,16.3,957.4,2.24412,-3.57529,-109.918 -2016-02-12 08:38:57,40.3484977,115.7863432,6.955000000000041,5.49547,77.0321,16.3,957.4,2.25077,-3.53406,-110.109 -2016-02-12 08:38:58,40.3484917,115.7863208,6.76400000000001,5.50554,76.9921,16.3,957.4,2.25282,-3.11968,-109.696 -2016-02-12 08:38:59,40.3484855,115.7862986,7.1860000000000355,5.67789,76.452,16.3,957.4,2.25288,-3.84746,-109.962 -2016-02-12 08:39:00,40.3484793,115.7862769,7.2760000000000105,5.58245,78.3723,16.3,957.4,2.25248,-4.04632,-109.703 -2016-02-12 08:39:01,40.3484733,115.7862548,7.010000000000048,5.50281,81.2427,16.3,957.4,2.25681,-3.7117,-109.605 -2016-02-12 08:39:02,40.3484675,115.7862318,6.583000000000027,5.4681,80.5694,16.3,957.4,2.25373,-2.64838,-110.026 -2016-02-12 08:39:03,40.3484615,115.7862087,6.435000000000002,5.24186,80.0162,16.3,957.4,2.26402,-2.47181,-110.066 -2016-02-12 08:39:04,40.3484553,115.7861861,6.744000000000028,4.78997,78.1177,16.3,957.4,2.25976,-3.00221,-110.003 -2016-02-12 08:39:05,40.3484491,115.7861637,6.635000000000048,4.66952,79.3902,16.3,957.4,2.25965,-2.87573,-109.383 -2016-02-12 08:39:06,40.3484432,115.7861416,6.846000000000004,4.6271,83.315,16.2,957.4,2.25455,-2.74948,-106.217 -2016-02-12 08:39:07,40.3484387,115.7861197,7.13900000000001,4.8648,90.499,16.2,957.4,2.25685,-3.80011,-100.807 -2016-02-12 08:39:08,40.348436,115.7860971,7.078000000000031,5.13107,93.7453,16.2,957.4,2.25624,-3.61118,-96.6337 -2016-02-12 08:39:09,40.3484346,115.7860739,6.874000000000024,5.30274,96.2317,16.2,957.4,2.25331,-3.42438,-93.2439 -2016-02-12 08:39:10,40.3484343,115.7860502,6.77800000000002,5.30424,98.1641,16.2,957.4,2.2591,-3.43879,-89.3696 -2016-02-12 08:39:11,40.3484346,115.7860267,6.948000000000036,5.36689,101.168,16.2,957.4,2.26334,-3.13154,-85.9754 -2016-02-12 08:39:12,40.3484361,115.7860039,6.992999999999995,5.36225,105.602,16.2,957.4,2.26374,-3.71979,-81.9432 -2016-02-12 08:39:13,40.3484392,115.7859812,6.986000000000047,5.58163,111.056,16.2,957.4,2.27043,-3.86594,-76.8084 -2016-02-12 08:39:14,40.3484453,115.7859542,7.071000000000026,5.59064,113.182,16.2,957.4,2.26144,-3.68614,-72.9019 -2016-02-12 08:39:15,40.3484508,115.7859315,6.8180000000000405,5.49402,114.441,16.2,957.4,2.26241,-3.7118,-72.5991 -2016-02-12 08:39:16,40.3484563,115.7859087,6.723000000000013,5.288,114.232,16.2,957.4,2.2694,-3.66929,-72.6022 -2016-02-12 08:39:17,40.3484619,115.785886,6.861000000000047,5.0759,114.328,16.2,957.4,2.27796,-3.37821,-72.5735 -2016-02-12 08:39:18,40.3484673,115.7858638,6.777000000000044,4.85226,114.202,16.2,957.4,2.2586,-3.65391,-72.617 -2016-02-12 08:39:19,40.3484724,115.7858417,6.831000000000017,4.95735,114.591,16.2,957.4,2.26003,-3.9336,-72.5228 -2016-02-12 08:39:20,40.3484777,115.7858195,6.79400000000004,5.19502,114.403,16.2,957.4,2.26938,-3.7664,-72.49 -2016-02-12 08:39:21,40.348483,115.7857968,6.8910000000000196,5.40131,114.221,16.2,957.4,2.26292,-3.57338,-72.637 -2016-02-12 08:39:22,40.3484882,115.785774,6.80800000000005,5.49249,113.991,16.2,957.4,2.25832,-3.62734,-72.9702 -2016-02-12 08:39:23,40.3484933,115.7857514,6.855000000000018,5.30347,113.598,16.2,957.4,2.26829,-3.95096,-72.8731 -2016-02-12 08:39:24,40.3484986,115.7857289,7.079000000000008,5.39845,115.741,16.2,957.4,2.26638,-3.72339,-70.6984 -2016-02-12 08:39:25,40.3485052,115.7857071,6.997000000000014,5.59344,120.748,16.2,957.4,2.25883,-3.71214,-65.1554 -2016-02-12 08:39:26,40.3485135,115.7856866,6.882000000000005,5.57928,126.78,16.2,957.4,2.27045,-3.56952,-59.0728 -2016-02-12 08:39:27,40.3485232,115.7856676,7.5540000000000305,5.53672,130.762,16.2,957.4,2.26442,-4.75008,-53.7121 -2016-02-12 08:39:28,40.3485341,115.7856494,7.011000000000024,5.59819,132.478,16.2,957.4,2.27287,-4.20102,-49.5037 -2016-02-12 08:39:29,40.3485461,115.7856316,6.975999999999999,5.6987,136.872,16.1,957.4,2.27001,-3.76073,-44.3638 -2016-02-12 08:39:30,40.3485592,115.7856157,6.80600000000004,5.66211,141.975,16.1,957.4,2.25656,-4.27646,-39.2167 -2016-02-12 08:39:31,40.3485731,115.7856017,6.959000000000003,5.84401,147.888,16.1,957.4,2.26741,-4.22084,-33.5571 -2016-02-12 08:39:32,40.348588,115.7855893,6.881000000000029,5.84942,153.684,16.1,957.4,2.26479,-4.14474,-27.6361 -2016-02-12 08:39:33,40.348604,115.7855792,7.069000000000017,5.77161,153.734,16.1,957.4,2.25661,-4.20067,-25.4868 -2016-02-12 08:39:34,40.3486205,115.7855695,6.948000000000036,5.68293,151.175,16.1,957.4,2.26653,-4.28749,-25.5627 -2016-02-12 08:39:35,40.3486369,115.7855593,6.831999999999994,5.59499,149.507,16.1,957.4,2.26059,-3.60083,-25.7786 -2016-02-12 08:39:36,40.3486532,115.785549,6.910000000000025,5.34526,148.245,16.1,957.4,2.25904,-3.79517,-25.4626 -2016-02-12 08:39:37,40.3486694,115.7855391,6.90300000000002,5.2722,148.018,16.1,957.4,2.24588,-4.47698,-26.0671 -2016-02-12 08:39:38,40.3486856,115.7855286,6.662000000000035,5.58787,149.531,16.1,957.4,2.26247,-3.74773,-25.3043 -2016-02-12 08:39:39,40.348702,115.7855183,6.588000000000022,5.58677,149.414,16.1,957.4,2.2546,-3.41345,-25.3933 -2016-02-12 08:39:40,40.3487186,115.7855084,6.819000000000017,5.39394,150.467,16.1,957.4,2.26018,-3.45871,-25.8609 -2016-02-12 08:39:41,40.3487348,115.785498,6.869000000000028,5.13558,149.501,16.1,957.4,2.25899,-3.54752,-25.3197 -2016-02-12 08:39:42,40.3487508,115.7854881,7.076999999999998,5.12994,151.902,16.0,957.4,2.2604,-3.27375,-23.0354 -2016-02-12 08:39:43,40.348767,115.7854795,7.107000000000028,5.24712,156.111,16.0,957.4,2.25978,-4.17538,-19.0296 -2016-02-12 08:39:44,40.3487838,115.7854726,7.342000000000041,5.14911,158.067,16.0,957.4,2.26895,-3.91688,-14.9458 -2016-02-12 08:39:45,40.3488012,115.7854673,7.123000000000047,5.12797,160.258,16.0,957.4,2.25685,-3.97569,-12.4655 -2016-02-12 08:39:46,40.3488187,115.7854626,7.0470000000000255,5.25077,161.458,16.0,957.4,2.2575,-3.93482,-9.47375 -2016-02-12 08:39:47,40.3488361,115.7854589,6.831000000000017,5.34247,163.638,16.0,957.4,2.2747,-3.97845,-6.77187 -2016-02-12 08:39:48,40.3488535,115.7854563,6.91700000000003,5.35046,168.762,16.0,957.4,2.2638,-4.43388,-3.3938 -2016-02-12 08:39:49,40.3488712,115.7854556,7.05800000000005,5.36638,172.552,16.0,957.4,2.24989,-4.01909,0.499612 -2016-02-12 08:39:50,40.3488894,115.7854567,6.927999999999997,5.18338,176.719,16.0,957.4,2.25543,-2.9186,4.27917 -2016-02-12 08:39:51,40.3489075,115.7854591,6.824000000000012,4.74102,174.68,16.0,957.4,2.26294,-3.10757,5.12577 -2016-02-12 08:39:52,40.3489253,115.7854614,6.846000000000004,4.61108,173.089,16.0,957.4,2.26023,-3.50273,5.24859 -2016-02-12 08:39:53,40.3489432,115.7854633,6.754000000000019,4.60728,171.857,16.0,957.4,2.24849,-3.4541,5.02424 -2016-02-12 08:39:54,40.348961,115.7854649,6.802000000000021,4.80725,173.53,16.0,957.4,2.24994,-3.31187,5.23906 -2016-02-12 08:39:55,40.3489786,115.7854669,6.7690000000000055,4.84929,175.141,16.0,957.4,2.26774,-3.80584,4.93247 -2016-02-12 08:39:56,40.3489961,115.7854684,6.984000000000037,4.82154,177.285,16.0,957.4,2.25052,-4.3044,6.02525 -2016-02-12 08:39:57,40.3490136,115.7854712,7.0750000000000455,4.97235,176.681,16.0,957.4,2.26103,-4.44092,4.73105 -2016-02-12 08:39:58,40.3490352,115.7854737,7.221000000000004,5.17525,176.871,16.0,957.4,2.24897,-4.50248,5.03347 -2016-02-12 08:39:59,40.3490496,115.7854757,7.2830000000000155,5.31328,175.68,15.9,957.4,2.2604,-4.74577,5.08683 -2016-02-12 08:40:00,40.3490715,115.7854787,6.9150000000000205,5.36721,173.39,15.9,957.4,2.25116,-3.63533,5.45957 -2016-02-12 08:40:01,40.3490892,115.7854806,7.02800000000002,5.49745,171.838,15.9,957.4,2.24886,-5.20438,5.31366 -2016-02-12 08:40:02,40.3491065,115.7854825,7.034000000000049,4.96294,169.028,15.9,957.4,2.25694,8.55605,4.86752 -2016-02-12 08:40:03,40.3491136,115.7854833,7.170000000000016,3.77454,166.109,15.9,957.4,2.2609,-2.98443,5.3243 -2016-02-12 08:40:04,40.349114,115.7854833,6.729000000000042,2.51774,161.1,15.9,957.4,2.25686,-2.8505,5.30476 -2016-02-12 08:40:05,40.3491134,115.7854828,6.692000000000007,2.18392,157.804,15.9,957.4,2.255,-3.45238,5.31065 -2016-02-12 08:40:06,40.3491132,115.7854827,6.604000000000042,1.60109,157.059,15.9,957.4,2.25357,-2.80026,5.5161 -2016-02-12 08:40:07,40.3491134,115.7854827,6.537000000000035,2.12836,156.218,15.9,957.4,2.25833,-2.45733,5.39147 -2016-02-12 08:40:08,40.3491137,115.7854829,6.403999999999996,2.12331,158.872,15.9,957.4,2.25188,-2.14385,5.2223 -2016-02-12 08:40:09,40.3491142,115.7854831,6.421000000000049,1.8301,160.043,15.9,957.4,2.25406,-2.07424,4.97781 -2016-02-12 08:40:10,40.3491147,115.785483,6.369000000000028,1.81565,164.795,15.9,957.4,2.25066,-2.04528,5.5712 -2016-02-12 08:40:11,40.349115,115.785483,6.395000000000039,1.20916,168.073,15.9,957.4,2.25142,-2.12568,5.6004 -2016-02-12 08:40:12,40.3491152,115.785483,6.479000000000042,0.923121,169.145,15.9,957.4,2.25772,-2.39996,5.49499 -2016-02-12 08:40:13,40.3491156,115.7854834,6.295000000000016,0.112622,176.925,15.9,957.4,2.2419,-0.992479,5.52595 -2016-02-12 08:40:14,40.3491156,115.7854835,5.983000000000004,0.104385,137.479,15.9,957.6,2.24902,-2.09931,4.83266 -2016-02-12 08:40:15,40.3491156,115.7854831,6.322000000000003,0.0972996,135.981,15.9,957.4,2.25507,-2.44217,5.66033 -2016-02-12 08:40:16,40.3491157,115.785483,6.293000000000006,0.399473,144.672,15.9,957.4,2.24642,-1.95636,5.97701 -2016-02-12 08:40:17,40.3491159,115.7854832,6.54200000000003,0.419162,134.864,15.9,957.4,2.25464,-2.12978,4.8956 -2016-02-12 08:40:18,40.3491159,115.7854832,6.412000000000035,0.0974758,162.941,15.9,957.4,2.25094,-2.48262,5.51442 -2016-02-12 08:40:19,40.349116,115.7854833,6.161000000000001,0.109608,160.361,15.9,957.4,2.25091,-1.41836,5.54454 -2016-02-12 08:40:20,40.3491161,115.7854831,6.199000000000012,0.0171219,103.985,15.9,957.4,2.24909,-1.11168,5.4494 -2016-02-12 08:40:21,40.349116,115.7854829,6.218000000000018,0.0288269,128.137,15.9,957.4,2.25383,-1.09086,5.29294 -2016-02-12 08:40:22,40.349116,115.7854829,6.281000000000006,0.0365605,136.308,15.9,957.4,2.25341,-1.30006,5.35584 -2016-02-12 08:40:23,40.349116,115.7854829,6.138000000000034,0.300536,142.642,15.9,957.4,2.24777,-1.31523,5.10688 -2016-02-12 08:40:24,40.3491159,115.7854831,6.272000000000048,0.362359,104.119,15.9,957.4,2.2515,-1.26287,5.34579 -2016-02-12 08:40:25,40.3491158,115.7854836,6.330000000000041,0.57932,67.1366,15.9,957.4,2.25599,-1.2537,5.10477 -2016-02-12 08:40:26,40.349116,115.7854837,6.2590000000000146,0.293271,61.2633,15.9,957.4,2.25032,-1.35474,4.62019 -2016-02-12 08:40:27,40.3491159,115.7854839,6.537000000000035,1.43408,87.8411,15.9,957.4,2.24641,-1.43189,4.81176 -2016-02-12 08:40:28,40.3491158,115.7854845,7.9360000000000355,2.6621,90.2237,15.9,957.4,2.25034,-1.61754,4.72443 -2016-02-12 08:40:29,40.349116,115.7854846,10.175000000000011,1.31573,89.1393,16.0,957.6,2.24564,-1.20717,4.9345 -2016-02-12 08:40:30,40.3491154,115.7854833,11.519000000000005,0.487783,84.9451,16.0,957.6,2.23793,1.226,32.3446 -2016-02-12 08:40:31,40.3491146,115.7854801,11.199000000000012,0.888404,113.077,16.0,957.6,2.24013,-0.910583,49.0509 -2016-02-12 08:40:32,40.3491176,115.7854848,11.338000000000022,1.21106,161.686,16.0,957.6,2.24855,-8.71139,49.124 -2016-02-12 08:40:33,40.349127,115.7854984,11.410000000000025,1.15788,160.732,16.0,957.6,2.24702,2.53409,49.1037 -2016-02-12 08:40:34,40.3491327,115.785507,11.30600000000004,1.57306,101.28,16.0,957.6,2.23904,3.0513,47.7375 -2016-02-12 08:40:35,40.3491341,115.7855092,11.441000000000031,1.65924,120.583,16.0,957.6,2.23278,-11.256,47.7951 -2016-02-12 08:40:36,40.3491421,115.7855205,11.745000000000005,2.09369,165.994,16.0,957.6,2.25014,-5.38932,47.3602 -2016-02-12 08:40:37,40.3491545,115.7855384,11.939999999999998,2.19563,170.682,16.0,957.6,2.25111,-3.70094,47.3836 -2016-02-12 08:40:38,40.3491676,115.7855572,12.343999999999994,2.72588,175.629,16.0,957.4,2.24778,-3.39111,47.5684 -2016-02-12 08:40:39,40.3491805,115.7855757,12.349000000000046,3.77058,170.431,16.0,957.4,2.23919,-2.92421,47.3679 -2016-02-12 08:40:40,40.3491932,115.7855932,12.30400000000003,4.32723,164.713,16.0,957.4,2.24849,-3.69776,47.2196 -2016-02-12 08:40:41,40.3492058,115.7856107,12.257000000000005,4.97482,149.719,16.0,957.4,2.23899,-4.2628,46.9518 -2016-02-12 08:40:42,40.3492184,115.7856285,12.064999999999998,5.01454,148.244,16.0,957.4,2.24654,-3.29362,47.9102 -2016-02-12 08:40:43,40.3492309,115.7856463,11.847000000000037,4.75528,148.534,16.0,957.6,2.2461,-2.87623,47.2497 -2016-02-12 08:40:44,40.3492429,115.7856634,11.926000000000045,4.45324,145.688,16.0,957.6,2.24807,-3.24547,50.6289 -2016-02-12 08:40:45,40.3492538,115.7856819,11.890000000000043,4.37085,139.85,16.0,957.6,2.24435,-2.29374,55.1856 -2016-02-12 08:40:46,40.3492636,115.7857015,11.858000000000004,4.45991,136.808,16.0,957.6,2.23915,-2.55544,58.6457 -2016-02-12 08:40:47,40.3492726,115.7857216,11.834000000000003,4.44533,135.258,16.0,957.6,2.25354,-2.42264,61.5678 -2016-02-12 08:40:48,40.3492809,115.7857425,11.573000000000036,4.17545,135.351,16.0,957.6,2.2454,-2.13607,64.4989 -2016-02-12 08:40:49,40.3492883,115.7857639,11.456000000000017,3.50478,129.539,16.0,957.6,2.23091,-1.86106,68.0806 -2016-02-12 08:40:50,40.3492945,115.7857856,11.674000000000035,3.04936,123.522,16.0,957.6,2.24878,-2.12556,72.5683 -2016-02-12 08:40:51,40.3492995,115.7858078,11.607000000000028,2.59356,118.042,16.0,957.6,2.24837,-2.43165,74.4098 -2016-02-12 08:40:52,40.349304,115.7858305,11.578000000000031,2.53347,125.879,16.0,957.6,2.24868,-2.31417,74.0187 -2016-02-12 08:40:54,40.3493085,115.7858534,11.64100000000002,2.66835,133.005,16.0,957.6,2.25345,-2.44876,73.9301 -2016-02-12 08:40:55,40.3493133,115.7858761,11.571000000000026,2.67835,132.957,16.0,957.6,2.24898,-2.21838,74.0699 -2016-02-12 08:40:56,40.3493182,115.7858987,11.422000000000025,2.77779,137.606,16.0,957.6,2.24687,-2.05583,74.0956 -2016-02-12 08:40:57,40.3493232,115.7859214,11.383000000000038,2.65526,125.47,16.0,957.6,2.25382,-2.1098,73.9022 -2016-02-12 08:40:58,40.3493284,115.7859437,11.393000000000029,2.57385,121.79,16.0,957.6,2.25263,-2.48862,74.428 -2016-02-12 08:40:59,40.3493328,115.7859659,11.778999999999996,2.60091,118.797,16.0,957.6,2.24775,-2.6614,76.9316 -2016-02-12 08:41:00,40.3493363,115.7859886,11.846000000000004,2.80531,113.214,16.0,957.6,2.25006,-2.35789,81.2004 -2016-02-12 08:41:01,40.3493386,115.7860116,11.75200000000001,3.46673,114.085,16.0,957.6,2.2521,-2.83111,84.5953 -2016-02-12 08:41:02,40.3493399,115.7860352,11.573000000000036,3.45173,111.082,16.0,957.6,2.24462,-2.19087,88.0719 -2016-02-12 08:41:03,40.3493402,115.7860585,11.668000000000006,3.17838,106.4,16.0,957.6,2.23597,-2.32365,91.6851 -2016-02-12 08:41:04,40.3493394,115.7860821,11.456999999999994,2.92245,104.091,16.0,957.6,2.25143,-1.39402,94.5082 -2016-02-12 08:41:05,40.3493376,115.7861056,11.509000000000015,2.69757,107.508,16.0,957.6,2.24626,-1.14534,97.7257 -2016-02-12 08:41:06,40.349335,115.786129,11.551000000000045,2.14221,105.163,16.0,957.6,2.24878,-1.12488,101.724 -2016-02-12 08:41:07,40.3493308,115.7861515,11.583000000000027,1.70315,97.0246,16.0,957.6,2.24965,-1.2808,105.324 -2016-02-12 08:41:08,40.3493256,115.7861737,11.629999999999995,1.73263,82.1027,16.0,957.6,2.24099,-1.10128,106.318 -2016-02-12 08:41:09,40.3493203,115.786196,11.79000000000002,1.88123,77.929,16.0,957.6,2.25065,-0.890223,106.882 -2016-02-12 08:41:10,40.3493151,115.7862185,11.629999999999995,2.02174,72.4556,16.0,957.6,2.24402,-1.06764,106.757 -2016-02-12 08:41:11,40.3493095,115.7862408,11.56800000000004,1.92404,75.0366,16.0,957.6,2.25262,-1.81658,106.7 -2016-02-12 08:41:12,40.3493042,115.7862632,11.723000000000013,1.96386,76.6269,16.1,957.6,2.24628,-2.08718,106.681 -2016-02-12 08:41:13,40.3492993,115.7862859,11.694000000000017,1.97875,76.6054,16.1,957.6,2.24301,-1.62918,106.355 -2016-02-12 08:41:14,40.3492944,115.7863083,11.80800000000005,2.00308,72.8553,16.1,957.6,2.24278,-1.89877,107.29 -2016-02-12 08:41:15,40.3492889,115.7863306,11.740000000000009,2.16399,82.2897,16.1,957.6,2.24469,-1.95941,107.744 -2016-02-12 08:41:16,40.349282,115.7863579,11.583000000000027,2.06573,79.7034,16.1,957.6,2.24813,-1.54695,110.369 -2016-02-12 08:41:17,40.3492752,115.7863801,11.729000000000042,1.96264,82.2375,16.1,957.6,2.24149,-1.13449,115.571 -2016-02-12 08:41:18,40.349269,115.7863971,11.831999999999994,1.75547,77.7442,16.1,957.6,2.2488,-0.483331,119.086 -2016-02-12 08:41:19,40.3492581,115.7864217,11.521000000000015,1.54649,80.1118,16.1,957.6,2.24992,-0.430019,121.889 -2016-02-12 08:41:20,40.3492484,115.7864414,11.724000000000046,1.33618,90.5358,16.1,957.6,2.24614,-0.160765,124.514 -2016-02-12 08:41:21,40.3492379,115.7864599,11.656000000000006,1.45789,75.7241,16.1,957.6,2.24723,-0.584383,129.253 -2016-02-12 08:41:22,40.3492265,115.7864776,11.586000000000013,1.52183,64.4082,16.1,957.6,2.2461,-0.1055,133.895 -2016-02-12 08:41:23,40.3492142,115.7864946,11.551000000000045,1.41725,53.5575,16.1,957.6,2.24917,-0.06657,133.811 -2016-02-12 08:41:24,40.3492018,115.786511,11.67900000000003,1.96325,45.1024,16.1,957.6,2.24306,-0.546846,133.629 -2016-02-12 08:41:25,40.3491892,115.7865273,11.583000000000027,1.89267,44.8856,16.1,957.6,2.25231,-0.522077,133.854 -2016-02-12 08:41:26,40.3491766,115.786544,11.583000000000027,1.88507,45.3735,16.1,957.6,2.25312,-0.6115120000000001,134.018 -2016-02-12 08:41:27,40.349164,115.7865603,11.56800000000004,1.90691,44.2069,16.1,957.6,2.24901,-0.704764,137.995 -2016-02-12 08:41:28,40.3491509,115.7865759,11.733000000000004,1.89895,34.7881,16.1,957.6,2.2386,0.216962,144.763 -2016-02-12 08:41:29,40.3491363,115.7865883,12.136000000000024,1.57389,21.6126,16.1,957.4,2.25495,-0.546539,150.518 -2016-02-12 08:41:30,40.3491207,115.7865983,12.105999999999995,1.35377,6.14142,16.1,957.4,2.25067,-0.483964,155.45 -2016-02-12 08:41:31,40.3491041,115.7866067,11.953000000000031,1.48538,7.6301,16.1,957.6,2.25743,0.186806,161.625 -2016-02-12 08:41:32,40.349087,115.7866129,12.30800000000005,1.43146,25.3402,16.1,957.4,2.25932,-1.17416,169.539 -2016-02-12 08:41:33,40.3490693,115.7866169,12.262,1.67297,11.2128,16.1,957.4,2.24673,-0.856737,175.334 -2016-02-12 08:41:34,40.3490516,115.7866188,12.27600000000001,1.88287,5.05985,16.1,957.4,2.23945,-1.40952,175.648 -2016-02-12 08:41:35,40.349034,115.7866202,12.26600000000002,2.07013,7.49265,16.2,957.4,2.25005,-1.36203,175.821 -2016-02-12 08:41:36,40.3490162,115.7866215,12.102000000000032,2.16284,5.99243,16.2,957.4,2.24761,-1.28881,175.884 -2016-02-12 08:41:37,40.3489984,115.786623,12.342000000000041,2.62051,11.9578,16.2,957.4,2.2545,-1.72705,176.135 -2016-02-12 08:41:38,40.3489803,115.7866248,12.266999999999996,2.80948,9.05194,16.2,957.4,2.24654,-1.73863,175.918 -2016-02-12 08:41:39,40.3489624,115.7866263,12.15500000000003,2.79103,5.93186,16.2,957.4,2.24162,-1.93178,175.373 -2016-02-12 08:41:40,40.3489442,115.7866283,12.194000000000017,2.98124,7.96713,16.2,957.4,2.23972,-1.38345,175.634 -2016-02-12 08:41:41,40.3489261,115.7866302,12.290999999999997,2.76977,6.80938,16.2,957.4,2.23927,-1.48399,175.852 -2016-02-12 08:41:42,40.348908,115.7866319,12.145000000000039,2.88923,11.1758,16.2,957.4,2.24577,-1.11357,175.647 -2016-02-12 08:41:43,40.34889,115.7866334,12.115000000000009,2.73138,15.2008,16.2,957.4,2.2535,-1.25101,178.042 -2016-02-12 08:41:44,40.3488722,115.7866338,12.066000000000031,2.96751,22.2279,16.2,957.4,2.24615,-1.35349,-178.621 -2016-02-12 08:41:45,40.3488544,115.7866327,12.17100000000005,3.10965,27.6051,16.2,957.4,2.25523,-1.46058,-175.496 -2016-02-12 08:41:46,40.3488367,115.7866304,12.064000000000021,2.92633,28.5539,16.2,957.4,2.24891,-1.73632,-173.742 -2016-02-12 08:41:47,40.3488192,115.7866273,12.215000000000032,2.91376,27.4537,16.2,957.4,2.25825,-2.3877,-171.862 -2016-02-12 08:41:48,40.3488017,115.7866234,12.088999999999999,3.08075,27.0256,16.2,957.4,2.24402,-1.70543,-170.067 -2016-02-12 08:41:49,40.3487842,115.7866186,12.199000000000012,3.22416,29.298,16.3,957.4,2.26024,-1.40647,-166.772 -2016-02-12 08:41:50,40.3487669,115.7866126,12.105999999999995,3.04744,30.399,16.3,957.4,2.26284,-1.90689,-163.401 -2016-02-12 08:41:51,40.34875,115.7866053,12.230999999999995,3.03816,32.1537,16.3,957.4,2.25274,-2.12911,-160.487 -2016-02-12 08:41:52,40.3487332,115.7865977,12.277000000000044,3.16828,36.9141,16.3,957.4,2.24902,-2.42806,-158.691 -2016-02-12 08:41:53,40.3487164,115.7865891,12.119000000000028,3.51183,36.1496,16.3,957.4,2.25103,-2.7569,-159.977 -2016-02-12 08:41:54,40.3486995,115.7865807,12.200000000000045,3.67923,34.0202,16.3,957.4,2.25266,-2.03718,-159.794 -2016-02-12 08:41:55,40.3486826,115.7865724,12.234000000000037,3.99466,32.2461,16.3,957.4,2.25307,-2.50656,-159.647 -2016-02-12 08:41:56,40.3486656,115.7865644,12.124000000000024,3.87245,32.552,16.3,957.4,2.25371,-2.16503,-159.25 -2016-02-12 08:41:57,40.3486488,115.7865561,12.090000000000032,4.08144,33.5234,16.3,957.4,2.24347,-2.05622,-159.351 -2016-02-12 08:41:58,40.3486319,115.7865478,12.209000000000003,3.86491,36.1923,16.3,957.4,2.24522,-1.63832,-159.568 -2016-02-12 08:41:59,40.348615,115.7865392,12.052000000000021,3.72907,37.497,16.3,957.4,2.24749,-1.51081,-158.014 -2016-02-12 08:42:00,40.3485989,115.7865303,12.175000000000011,3.44141,42.7996,16.3,957.4,2.24907,-1.9916,-152.302 -2016-02-12 08:42:01,40.3485838,115.7865188,12.503000000000043,3.81648,51.5505,16.3,957.4,2.24449,-2.30392,-145.352 -2016-02-12 08:42:02,40.3485697,115.7865051,12.378000000000043,4.09751,56.1889,16.3,957.4,2.24475,-3.35498,-140.287 -2016-02-12 08:42:03,40.348554,115.7864864,12.354000000000042,4.45431,63.4819,16.3,957.4,2.25055,-2.78677,-133.264 -2016-02-12 08:42:04,40.3485421,115.7864686,12.239000000000033,4.57333,67.1847,16.3,957.4,2.25146,-2.48321,-128.375 -2016-02-12 08:42:05,40.3485336,115.7864536,12.379999999999995,4.48019,71.2003,16.3,957.4,2.24778,-2.34836,-123.58 -2016-02-12 08:42:06,40.348523,115.7864295,12.398000000000025,4.48081,77.9232,16.3,957.4,2.24845,-2.83183,-116.547 -2016-02-12 08:42:07,40.3485159,115.7864082,12.41500000000002,4.49352,80.9574,16.3,957.4,2.25643,-2.8192,-110.823 -2016-02-12 08:42:08,40.3485099,115.7863862,12.507000000000005,4.71163,79.3181,16.3,957.4,2.25778,-3.08629,-109.918 -2016-02-12 08:42:09,40.348504,115.7863639,12.674000000000035,4.83949,77.9107,16.3,957.4,2.24253,-2.90956,-109.746 -2016-02-12 08:42:10,40.348498,115.7863416,12.966000000000008,5.05952,75.906,16.3,957.4,2.24613,-2.97764,-110.009 -2016-02-12 08:42:11,40.3484919,115.7863189,12.289000000000044,4.99548,74.3886,16.3,957.4,2.24257,-2.69509,-109.879 -2016-02-12 08:42:12,40.3484856,115.7862963,12.305000000000007,4.86027,75.585,16.3,957.4,2.24794,-2.39785,-109.656 -2016-02-12 08:42:13,40.3484795,115.786274,12.30600000000004,4.63504,75.6022,16.3,957.4,2.25423,-2.3631,-109.497 -2016-02-12 08:42:14,40.3484733,115.7862519,12.319000000000017,4.62832,77.8567,16.3,957.4,2.24955,-2.26553,-109.463 -2016-02-12 08:42:15,40.3484674,115.7862297,12.467000000000041,4.51333,78.3431,16.3,957.4,2.24946,-2.37776,-110.25 -2016-02-12 08:42:16,40.3484612,115.7862076,12.367000000000019,4.41789,79.0752,16.3,957.4,2.25625,-2.54596,-110.091 -2016-02-12 08:42:17,40.3484548,115.7861855,12.536000000000001,4.47514,81.1023,16.3,957.4,2.24774,-2.51819,-109.937 -2016-02-12 08:42:18,40.3484486,115.7861638,12.861000000000047,4.55631,82.4619,16.3,957.4,2.24383,-2.94212,-109.487 -2016-02-12 08:42:19,40.3484429,115.7861421,12.637,4.85356,87.9828,16.3,957.4,2.25176,-3.28014,-106.279 -2016-02-12 08:42:20,40.3484385,115.78612,12.87700000000001,5.05794,92.5173,16.3,957.4,2.25419,-3.86801,-101.332 -2016-02-12 08:42:21,40.3484355,115.7860973,12.540999999999997,5.22229,96.0485,16.3,957.4,2.26133,-3.48247,-96.9957 -2016-02-12 08:42:22,40.3484339,115.786074,12.859000000000037,5.29359,99.1907,16.3,957.4,2.25554,-3.74325,-93.293 -2016-02-12 08:42:23,40.3484335,115.7860508,12.79400000000004,5.51611,102.248,16.3,957.4,2.25186,-3.60425,-89.6605 -2016-02-12 08:42:24,40.3484341,115.7860275,12.837000000000046,5.91545,104.712,16.3,957.4,2.26173,-4.32424,-86.4569 -2016-02-12 08:42:25,40.3484362,115.7860043,12.738,5.97849,108.205,16.3,957.4,2.25334,-4.14827,-81.8178 -2016-02-12 08:42:26,40.3484397,115.7859813,12.995000000000005,5.95724,109.774,16.3,957.4,2.26212,-3.98325,-77.084 -2016-02-12 08:42:27,40.3484442,115.7859587,13.02600000000001,5.88203,112.074,16.3,957.4,2.26216,-3.93422,-73.0804 -2016-02-12 08:42:28,40.3484496,115.7859361,12.66700000000003,5.89762,112.488,16.3,957.4,2.25082,-3.98341,-72.3455 -2016-02-12 08:42:29,40.3484555,115.7859136,13.284000000000049,5.88128,111.104,16.3,957.4,2.25202,-4.08997,-73.1645 -2016-02-12 08:42:30,40.3484603,115.7858911,13.001000000000033,5.88179,112.502,16.3,957.4,2.25494,-4.32926,-72.1189 -2016-02-12 08:42:31,40.3484659,115.785869,12.974000000000046,5.89474,113.961,16.3,957.4,2.2582,-4.21522,-72.1881 -2016-02-12 08:42:32,40.3484716,115.7858467,13.950000000000045,5.89713,112.242,16.3,957.4,2.25086,-4.48302,-72.4782 -2016-02-12 08:42:33,40.348477,115.785824,12.950000000000045,5.83897,111.227,16.3,957.4,2.25219,-3.79417,-72.9491 -2016-02-12 08:42:34,40.3484819,115.7858011,13.550000000000011,5.70104,110.514,16.3,957.4,2.25342,-4.27485,-72.8564 -2016-02-12 08:42:35,40.3484869,115.7857784,13.302999999999997,5.65056,112.288,16.2,957.4,2.25351,-4.61801,-72.341 -2016-02-12 08:42:36,40.3484922,115.7857551,12.936000000000035,5.64385,114.009,16.2,957.4,2.25632,-3.38854,-72.9091 -2016-02-12 08:42:37,40.348498,115.7857323,12.79000000000002,5.63199,115.023,16.2,957.4,2.25322,-3.08252,-71.8235 -2016-02-12 08:42:38,40.3485042,115.7857104,12.858000000000004,5.36999,121.775,16.2,957.4,2.25358,-3.24984,-65.9687 -2016-02-12 08:42:39,40.3485119,115.78569,12.900000000000034,5.15898,126.711,16.2,957.4,2.26002,-3.20228,-60.2979 -2016-02-12 08:42:40,40.348521,115.7856707,13.067000000000007,5.14989,132.227,16.2,957.4,2.25982,-3.62738,-54.9838 -2016-02-12 08:42:41,40.3485316,115.7856526,13.647000000000048,5.22281,136.78,16.2,957.4,2.26323,-4.14084,-49.9837 -2016-02-12 08:42:42,40.3485433,115.7856361,13.871000000000038,5.67075,139.828,16.2,957.4,2.25176,-4.97773,-45.5356 -2016-02-12 08:42:43,40.3485561,115.7856201,12.992000000000019,5.82711,142.777,16.2,957.4,2.26061,-4.46511,-40.6979 -2016-02-12 08:42:44,40.3485702,115.7856055,12.66700000000003,5.82758,147.255,16.2,957.4,2.26035,-3.8026,-34.6946 -2016-02-12 08:42:45,40.3485853,115.785593,12.718999999999994,5.62707,149.964,16.2,957.4,2.24634,-4.16698,-28.7379 -2016-02-12 08:42:46,40.3486012,115.7855819,12.712000000000046,5.40462,152.98,16.2,957.4,2.25537,-3.65881,-25.8209 -2016-02-12 08:42:47,40.3486175,115.7855715,12.614000000000033,5.40776,154.124,16.2,957.4,2.24852,-3.58218,-25.511 -2016-02-12 08:42:48,40.348634,115.7855611,12.459000000000003,5.20386,155.024,16.2,957.4,2.25714,-3.00576,-25.8377 -2016-02-12 08:42:49,40.3486501,115.7855508,12.467000000000041,5.17858,156.915,16.2,957.4,2.26037,-3.62848,-25.7774 -2016-02-12 08:42:50,40.3486696,115.7855384,12.532000000000039,5.27778,157.696,16.2,957.4,2.25554,-3.50805,-25.7918 -2016-02-12 08:42:51,40.3486825,115.7855303,12.616000000000042,5.37135,158.794,16.2,957.4,2.25686,-3.56731,-25.5099 -2016-02-12 08:42:52,40.3487016,115.7855185,12.533000000000015,5.46752,156.941,16.2,957.4,2.25935,-3.98915,-25.6481 -2016-02-12 08:42:53,40.3487176,115.7855085,12.420000000000016,5.58741,155.836,16.2,957.4,2.26681,-4.31272,-25.4288 -2016-02-12 08:42:54,40.3487336,115.7854986,12.732000000000028,5.78335,155.823,16.2,957.4,2.25226,-4.67656,-25.4368 -2016-02-12 08:42:55,40.3487496,115.785489,12.701999999999998,5.92013,158.796,16.1,957.4,2.25212,-4.80537,-23.1046 -2016-02-12 08:42:56,40.348766,115.78548,12.518000000000029,5.9415,162.588,16.1,957.4,2.24934,-4.43397,-19.1058 -2016-02-12 08:42:57,40.348783,115.7854727,12.524000000000001,5.72876,166.81,16.1,957.4,2.25649,-4.15858,-15.3635 -2016-02-12 08:42:58,40.3488007,115.7854667,12.446000000000026,5.43129,168.769,16.1,957.4,2.25655,-3.56822,-12.2917 -2016-02-12 08:42:59,40.3488186,115.7854623,12.591000000000008,5.38271,169.969,16.1,957.4,2.25312,-3.63613,-9.66924 -2016-02-12 08:43:00,40.3488359,115.7854588,12.819000000000017,5.39655,172.218,16.1,957.4,2.25178,-4.54191,-6.79331 -2016-02-12 08:43:01,40.3488535,115.7854562,12.608000000000004,5.58193,174.925,16.1,957.4,2.25727,-4.15431,-3.67836 -2016-02-12 08:43:02,40.3488709,115.7854557,12.687000000000012,5.78932,176.998,16.1,957.4,2.24647,-4.26279,0.864772 -2016-02-12 08:43:03,40.3488887,115.7854572,12.700000000000045,5.80957,176.641,16.1,957.4,2.24594,-4.19075,4.37661 -2016-02-12 08:43:04,40.3489065,115.7854597,12.713999999999999,5.79471,176.923,16.1,957.4,2.25494,-4.33135,5.51263 -2016-02-12 08:43:05,40.3489243,115.7854622,12.805000000000007,5.76599,174.367,16.1,957.4,2.25948,-4.54469,5.39902 -2016-02-12 08:43:06,40.3489424,115.7854643,12.515000000000043,5.66438,170.978,16.1,957.4,2.24338,-3.95422,5.18129 -2016-02-12 08:43:07,40.3489605,115.7854662,12.734000000000037,5.51594,168.338,16.1,957.4,2.25627,-3.94131,5.09212 -2016-02-12 08:43:08,40.3489785,115.7854682,12.634000000000015,5.26331,167.49,16.0,957.4,2.25091,-3.82072,5.21668 -2016-02-12 08:43:09,40.3489964,115.7854699,11.968000000000018,5.3484,169.105,16.0,957.6,2.253,-3.64647,5.05816 -2016-02-12 08:43:10,40.3490145,115.7854713,12.449000000000012,5.24774,170.138,16.0,957.4,2.25451,-3.90744,4.97669 -2016-02-12 08:43:11,40.3490323,115.7854731,12.962000000000046,5.00866,172.165,16.0,957.4,2.25349,-4.42495,5.03938 -2016-02-12 08:43:12,40.3490499,115.7854749,12.913000000000011,5.17607,173.761,16.0,957.4,2.25456,-3.96802,4.88758 -2016-02-12 08:43:13,40.3490678,115.7854774,12.772000000000048,5.17531,173.632,16.0,957.4,2.24864,-4.1331,5.31392 -2016-02-12 08:43:14,40.3490859,115.7854799,12.660000000000025,5.33766,172.301,16.0,957.4,2.24415,-3.63245,5.13994 -2016-02-12 08:43:15,40.3491037,115.7854819,12.688000000000045,5.06418,172.85,16.0,957.4,2.25334,3.77341,5.43588 -2016-02-12 08:43:16,40.3491139,115.7854834,12.534000000000049,3.21808,163.848,16.0,957.4,2.25053,-3.0238,4.27478 -2016-02-12 08:43:17,40.3491151,115.7854831,12.472000000000037,2.30783,161.518,16.0,957.4,2.25659,-2.5161,4.4831 -2016-02-12 08:43:18,40.3491145,115.7854826,12.115000000000009,1.10665,156.651,16.0,957.4,2.25019,-3.33712,3.89 -2016-02-12 08:43:19,40.3491143,115.7854821,12.076000000000022,0.729867,160.824,16.0,957.4,2.25651,-2.90574,4.24684 -2016-02-12 08:43:20,40.3491143,115.785482,12.163000000000011,0.916749,168.514,16.0,957.4,2.24599,-2.40328,5.06117 -2016-02-12 08:43:21,40.3491144,115.7854825,12.129999999999995,0.736194,174.551,16.0,957.4,2.24683,-2.259,4.69336 -2016-02-12 08:43:22,40.3491147,115.7854827,12.256000000000029,0.721629,173.06,16.0,957.4,2.24472,-2.30074,3.95699 -2016-02-12 08:43:23,40.3491147,115.7854826,12.312000000000012,1.02892,170.476,16.0,957.4,2.25346,-2.14544,4.63103 -2016-02-12 08:43:24,40.3491148,115.7854826,12.391999999999996,1.71353,162.162,16.0,957.4,2.24199,-2.70262,4.38941 -2016-02-12 08:43:25,40.349115,115.7854826,12.213999999999999,1.90056,157.922,15.9,957.4,2.25142,-2.56983,4.16209 -2016-02-12 08:43:26,40.3491151,115.785483,12.249000000000024,1.89172,162.111,15.9,957.4,2.24987,-2.37081,4.33851 -2016-02-12 08:43:27,40.3491153,115.7854835,12.331000000000017,2.02974,161.345,15.9,957.4,2.25097,-2.36842,4.13939 -2016-02-12 08:43:28,40.3491156,115.7854835,12.210000000000036,2.11439,163.381,15.9,957.4,2.24901,-2.72557,4.44417 -2016-02-12 08:43:29,40.3491158,115.7854836,12.192000000000007,1.61638,157.271,15.9,957.4,2.2473,-2.35678,4.22427 -2016-02-12 08:43:30,40.3491159,115.7854837,12.297000000000025,1.69106,156.577,15.9,957.4,2.24907,-2.72985,4.52237 -2016-02-12 08:43:31,40.3491159,115.785484,12.105999999999995,1.27958,154.251,16.0,957.4,2.24912,-2.4493,4.27238 -2016-02-12 08:43:32,40.3491158,115.7854842,12.254000000000019,1.37727,157.977,16.0,957.4,2.25123,-3.27265,4.57478 -2016-02-12 08:43:33,40.3491159,115.7854845,12.354000000000042,1.21603,157.19,16.0,957.4,2.25817,-3.16157,4.23416 -2016-02-12 08:43:34,40.3491161,115.7854845,12.486000000000047,1.52134,161.142,16.0,957.4,2.24876,-2.97854,4.09014 -2016-02-12 08:43:35,40.3491163,115.7854843,12.413000000000011,1.62379,159.631,16.0,957.4,2.24613,-2.711,4.14956 -2016-02-12 08:43:36,40.3491166,115.7854841,12.363,1.91354,161.307,16.0,957.4,2.24829,-2.66831,4.3683 -2016-02-12 08:43:37,40.3491167,115.7854843,12.518000000000029,2.54485,128.325,16.0,957.4,2.24011,-2.99271,4.54588 -2016-02-12 08:43:38,40.3491171,115.7854846,13.846000000000004,3.16679,122.058,16.0,957.4,2.24456,-2.10601,4.30452 -2016-02-12 08:43:39,40.3491173,115.7854846,16.337000000000046,1.4036,139.974,16.0,957.4,2.25051,-2.11919,4.49659 -2016-02-12 08:43:40,40.3491161,115.7854819,17.247000000000014,0.665258,149.372,16.0,957.4,2.25517,-2.29389,44.7974 -2016-02-12 08:43:41,40.3491153,115.7854797,17.309000000000026,0.15585,172.788,16.0,957.4,2.25108,-6.16028,50.6785 -2016-02-12 08:43:42,40.3491182,115.7854836,17.16300000000001,1.79734,144.454,16.0,957.4,2.24024,-9.94753,51.2855 -2016-02-12 08:43:43,40.3491268,115.7854975,17.49200000000002,2.21825,152.062,16.0,957.4,2.26809,1.95625,50.9678 -2016-02-12 08:43:44,40.3491325,115.7855068,17.25600000000003,2.33955,175.315,16.0,957.4,2.26068,1.88367,47.4681 -2016-02-12 08:43:45,40.3491338,115.7855087,17.298000000000002,2.15619,172.161,16.0,957.4,2.23978,-10.4233,47.4627 -2016-02-12 08:43:46,40.3491408,115.7855185,17.400000000000034,3.19316,157.115,16.0,957.4,2.24856,-5.19856,47.9142 -2016-02-12 08:43:47,40.349153,115.7855364,18.277000000000044,3.51508,159.235,16.0,957.4,2.25081,-4.18958,47.1094 -2016-02-12 08:43:48,40.349166,115.7855553,18.075000000000045,4.85972,155.95,16.0,957.4,2.2575,-3.81284,46.5688 -2016-02-12 08:43:49,40.349179,115.7855737,18.112000000000023,5.30648,153.064,16.0,957.4,2.25406,-4.46158,47.5726 -2016-02-12 08:43:50,40.3491919,115.7855918,18.206000000000017,5.51106,149.706,16.0,957.4,2.25075,-3.58214,47.8376 -2016-02-12 08:43:51,40.3492042,115.7856099,18.246000000000038,5.69668,149.791,16.0,957.4,2.25386,-4.1528,47.7509 -2016-02-12 08:43:52,40.3492167,115.7856276,17.972000000000037,5.65832,151.933,16.0,957.4,2.25417,-3.96174,47.7473 -2016-02-12 08:43:53,40.349229,115.7856451,17.373000000000047,5.52845,152.475,16.0,957.4,2.25498,-3.35287,47.6634 -2016-02-12 08:43:54,40.3492411,115.7856621,17.248000000000047,5.19567,150.868,16.0,957.4,2.25428,-3.57325,50.2049 -2016-02-12 08:43:55,40.3492522,115.7856796,17.732000000000028,4.85903,145.241,16.0,957.4,2.25249,-4.60038,54.3005 -2016-02-12 08:43:56,40.3492618,115.7856982,17.80200000000002,4.89722,141.182,16.0,957.4,2.25698,-4.268,57.7334 -2016-02-12 08:43:57,40.3492709,115.7857178,17.648000000000025,5.00458,138.678,16.0,957.4,2.25503,-4.03971,60.8126 -2016-02-12 08:43:58,40.3492792,115.7857383,17.670000000000016,5.06119,134.395,16.0,957.4,2.25882,-4.43467,64.1499 -2016-02-12 08:43:59,40.3492867,115.7857602,17.617999999999995,4.97336,132.843,16.0,957.4,2.25522,-3.4857,67.6561 -2016-02-12 08:44:00,40.3492929,115.7857822,17.749000000000024,4.76678,129.392,16.0,957.4,2.25682,-3.13844,72.5023 -2016-02-12 08:44:01,40.3492981,115.7858047,17.458000000000027,4.70141,129.949,16.0,957.4,2.25787,-3.00207,73.9701 -2016-02-12 08:44:02,40.3493031,115.7858268,17.75600000000003,4.64818,127.629,16.0,957.4,2.25249,-4.01299,74.3217 -2016-02-12 08:44:03,40.3493081,115.7858497,17.591000000000008,4.78015,127.062,16.0,957.4,2.26045,-3.45797,73.9458 -2016-02-12 08:44:04,40.349313,115.7858725,17.576000000000022,4.80095,126.743,16.0,957.4,2.25445,-3.48772,74.0784 -2016-02-12 08:44:05,40.3493179,115.7858957,17.460000000000036,4.46846,127.093,16.0,957.4,2.25907,-2.84138,74.6726 -2016-02-12 08:44:06,40.3493226,115.7859187,17.524,4.40493,128.632,16.0,957.4,2.2653,-2.7391,74.8234 -2016-02-12 08:44:07,40.3493273,115.7859409,17.883000000000038,4.20996,130.254,16.0,957.4,2.25721,-3.75628,74.3471 -2016-02-12 08:44:08,40.3493319,115.7859629,18.008000000000038,4.54446,126.276,16.0,957.4,2.24421,-4.13393,75.9746 -2016-02-12 08:44:09,40.349336,115.7859856,17.601,4.60809,119.994,16.0,957.4,2.25283,-3.65654,80.2085 -2016-02-12 08:44:10,40.3493389,115.7860089,17.54600000000005,4.59821,116.256,16.0,957.4,2.25826,-3.52848,84.5632 -2016-02-12 08:44:11,40.3493404,115.7860326,17.343999999999994,4.60662,111.882,16.0,957.4,2.26272,-2.83632,87.8923 -2016-02-12 08:44:12,40.3493407,115.786056,17.586000000000013,4.26527,108.906,16.0,957.4,2.26141,-2.64772,91.0007 -2016-02-12 08:44:13,40.34934,115.7860794,17.64300000000003,4.15369,106.719,16.0,957.4,2.25931,-2.97149,93.9182 -2016-02-12 08:44:14,40.3493383,115.7861028,17.40500000000003,4.06511,102.898,15.9,957.4,2.25609,-2.43398,97.4505 -2016-02-12 08:44:15,40.3493351,115.7861305,17.194000000000017,4.10584,100.818,15.9,957.4,2.25337,-2.45874,102.19 -2016-02-12 08:44:16,40.3493312,115.7861533,17.29600000000005,3.5283,94.6166,15.9,957.4,2.25653,-2.18443,106.176 -2016-02-12 08:44:17,40.349326,115.7861758,17.158000000000015,3.14686,91.3884,15.9,957.4,2.26545,-1.54058,107.424 -2016-02-12 08:44:18,40.3493205,115.7861983,17.150000000000034,2.79263,94.4733,15.9,957.4,2.25802,-2.1108,106.841 -2016-02-12 08:44:19,40.349315,115.7862206,17.38900000000001,2.88462,94.7514,15.9,957.4,2.25069,-2.22205,107.513 -2016-02-12 08:44:20,40.3493094,115.7862432,17.067000000000007,2.76044,95.8841,15.9,957.4,2.2528,-1.19721,107.134 -2016-02-12 08:44:21,40.3493041,115.7862659,17.110000000000014,2.41459,96.6922,15.9,957.4,2.26201,-1.52747,106.883 -2016-02-12 08:44:22,40.3492987,115.7862882,17.20500000000004,2.22398,91.4351,15.9,957.4,2.25557,-2.13694,106.758 -2016-02-12 08:44:23,40.3492936,115.7863106,17.402000000000044,2.22706,93.5224,15.9,957.4,2.25374,-2.07331,107.193 -2016-02-12 08:44:24,40.3492882,115.786333,17.234000000000037,2.23447,93.8195,16.0,957.4,2.25663,-1.73543,107.136 -2016-02-12 08:44:25,40.3492828,115.7863553,17.341000000000008,2.369,89.0479,16.0,957.4,2.25711,-2.02998,109.231 -2016-02-12 08:44:26,40.3492764,115.786377,17.462000000000046,2.58026,83.2347,16.0,957.4,2.26416,-1.803,114.054 -2016-02-12 08:44:27,40.3492688,115.7863981,17.28200000000004,2.71047,83.2986,16.0,957.4,2.25945,-2.07605,117.681 -2016-02-12 08:44:28,40.3492603,115.7864185,17.536,2.62323,77.0265,16.0,957.4,2.25908,-1.97262,120.92 -2016-02-12 08:44:29,40.3492507,115.786438,17.591000000000008,2.65832,73.4184,16.0,957.4,2.25308,-1.5131,124.759 -2016-02-12 08:44:30,40.3492401,115.7864565,17.560000000000002,2.7659,69.8955,16.0,957.4,2.26277,-2.36132,129.088 -2016-02-12 08:44:31,40.3492287,115.7864741,17.32800000000003,2.67548,62.8153,16.0,957.4,2.25068,-2.22984,133.597 -2016-02-12 08:44:32,40.3492162,115.7864915,17.398000000000025,2.61916,62.5652,16.0,957.4,2.2546,-1.56645,134.004 -2016-02-12 08:44:33,40.3492038,115.7865082,17.36500000000001,2.38325,63.9515,16.0,957.4,2.25572,-2.22344,134.419 -2016-02-12 08:44:34,40.3491913,115.7865247,17.396000000000015,2.4148,60.3102,16.0,957.4,2.26123,-1.89722,134.63 -2016-02-12 08:44:35,40.3491787,115.7865415,17.450000000000045,2.71965,65.9189,16.0,957.4,2.24881,-1.83215,134.581 -2016-02-12 08:44:36,40.3491659,115.7865581,17.43300000000005,2.8837,66.0174,16.0,957.4,2.26288,-1.92149,136.984 -2016-02-12 08:44:37,40.3491527,115.7865736,17.39300000000003,2.99332,47.2055,16.0,957.4,2.25737,-1.88269,144.475 -2016-02-12 08:44:39,40.3491381,115.7865865,17.437000000000012,2.60973,38.2454,16.0,957.4,2.26084,-1.88556,150.27 -2016-02-12 08:44:39,40.3491223,115.7865974,17.41500000000002,2.0888,24.9333,16.0,957.4,2.26337,-1.17669,155.997 -2016-02-12 08:44:40,40.3491058,115.7866061,17.382000000000005,2.04768,20.821,16.0,957.4,2.26543,-0.978078,161.237 -2016-02-12 08:44:42,40.3490888,115.7866126,17.50400000000002,2.02731,13.2953,16.0,957.4,2.25556,-1.22699,167.844 -2016-02-12 08:44:43,40.3490714,115.7866164,17.65500000000003,1.96942,5.29049,16.0,957.4,2.25431,-0.927087,174.693 -2016-02-12 08:44:44,40.3490538,115.7866182,17.715000000000032,1.96387,3.9822,16.0,957.4,2.25309,-1.37721,176.111 -2016-02-12 08:44:45,40.349036,115.7866197,17.62900000000002,1.97297,4.3481,16.0,957.4,2.26046,-1.17786,176.094 -2016-02-12 08:44:46,40.3490182,115.7866212,17.64500000000004,1.97891,4.29482,16.0,957.4,2.25826,-1.22428,175.974 -2016-02-12 08:44:47,40.3490003,115.7866228,17.56400000000002,1.92987,5.27529,16.0,957.4,2.25967,-1.38526,175.432 -2016-02-12 08:44:48,40.3489822,115.7866244,17.507000000000005,2.11482,2.04059,16.1,957.4,2.25986,-1.25446,175.941 -2016-02-12 08:44:49,40.348964,115.786626,17.494000000000028,2.2084,4.66539,16.1,957.4,2.25505,-1.25606,175.786 -2016-02-12 08:44:50,40.3489461,115.7866279,17.533000000000015,1.98396,12.7157,16.1,957.4,2.25133,-1.10287,176.088 -2016-02-12 08:44:51,40.3489282,115.7866296,17.510000000000048,2.00829,16.0908,16.1,957.4,2.26272,-1.05535,176.051 -2016-02-12 08:44:52,40.3489102,115.7866312,17.38900000000001,2.00029,6.62347,16.1,957.4,2.26306,-1.15381,175.658 -2016-02-12 08:44:53,40.3488923,115.7866329,17.53200000000004,2.00055,5.94855,16.1,957.4,2.26199,-1.15091,177.283 -2016-02-12 08:44:54,40.3488743,115.7866336,17.375,1.84412,12.2126,16.1,957.4,2.25823,-0.905536,-179.37 -2016-02-12 08:44:55,40.3488565,115.7866328,17.537000000000035,1.81085,14.9492,16.1,957.4,2.25636,-0.861661,-176.408 -2016-02-12 08:44:56,40.3488387,115.7866309,17.624000000000024,1.84405,14.0908,16.1,957.4,2.25948,-1.10296,-174.525 -2016-02-12 08:44:57,40.348821,115.7866281,17.559000000000026,1.93804,11.6952,16.1,957.4,2.26045,-0.947733,-172.353 -2016-02-12 08:44:58,40.3488035,115.7866242,17.694000000000017,2.00184,14.1004,16.1,957.4,2.25602,-1.26374,-169.775 -2016-02-12 08:44:59,40.348786,115.7866195,17.708000000000027,2.03629,21.9379,16.1,957.4,2.2498,-1.05616,-166.958 -2016-02-12 08:45:00,40.3487688,115.7866138,17.646000000000015,2.05078,24.9459,16.1,957.4,2.25291,-1.05454,-163.484 -2016-02-12 08:45:01,40.3487517,115.7866069,17.65900000000005,1.95402,30.7938,16.2,957.4,2.26536,-0.651226,-160.678 -2016-02-12 08:45:02,40.3487347,115.786599,17.588000000000022,1.7691,34.7243,16.2,957.4,2.24918,-0.857132,-159.513 -2016-02-12 08:45:03,40.348718,115.7865908,17.598000000000013,1.67192,47.1372,16.2,957.4,2.26345,-1.21446,-159.669 -2016-02-12 08:45:04,40.3487011,115.7865824,17.69500000000005,1.68668,54.3084,16.2,957.4,2.25893,-0.823606,-159.862 -2016-02-12 08:45:05,40.3486843,115.7865742,17.79200000000003,1.74508,47.7868,16.2,957.4,2.25838,-0.884091,-159.588 -2016-02-12 08:45:06,40.3486642,115.7865643,17.739000000000033,1.86477,34.9555,16.2,957.4,2.25685,-1.2888,-159.629 -2016-02-12 08:45:07,40.3486473,115.7865559,17.80200000000002,1.9374,38.5253,16.2,957.4,2.26043,-0.978609,-159.995 -2016-02-12 08:45:08,40.3486305,115.7865474,17.758000000000038,1.92136,38.8821,16.2,957.4,2.26082,-0.655105,-160.113 -2016-02-12 08:45:09,40.3486139,115.7865389,17.77000000000004,1.86096,61.4759,16.2,957.4,2.26501,-0.96432,-157.731 -2016-02-12 08:45:10,40.3485975,115.7865297,17.74000000000001,1.84646,65.4398,16.2,957.4,2.26133,-0.770468,-151.285 -2016-02-12 08:45:11,40.3485824,115.7865178,17.840000000000032,1.77807,66.8571,16.3,957.4,2.25876,-0.859863,-144.656 -2016-02-12 08:45:12,40.3485682,115.7865036,17.966000000000008,1.88744,61.4756,16.3,957.4,2.26721,-0.782214,-139.476 -2016-02-12 08:45:13,40.3485553,115.7864884,17.864000000000033,2.1576,77.0466,16.3,957.4,2.26486,-1.47746,-133.976 -2016-02-12 08:45:14,40.3485435,115.7864713,18.11700000000002,2.70015,81.7995,16.3,957.4,2.26416,-1.10274,-128.533 -2016-02-12 08:45:15,40.3485332,115.786453,18.287000000000035,2.69214,88.1674,16.3,957.4,2.26025,-1.94088,-122.849 -2016-02-12 08:45:16,40.3485245,115.7864337,18.45500000000004,3.78728,89.9081,16.3,957.4,2.25168,-3.04325,-117.301 -2016-02-12 08:45:17,40.3485173,115.7864131,18.396000000000015,4.16305,89.0334,16.3,957.4,2.25147,-3.31608,-111.595 -2016-02-12 08:45:18,40.3485111,115.786391,18.156000000000006,4.32816,88.5418,16.4,957.4,2.25652,-3.47936,-110.1 -2016-02-12 08:45:19,40.3485051,115.7863681,18.30000000000001,4.57069,83.1046,16.4,957.4,2.24823,-2.257,-110.004 -2016-02-12 08:45:20,40.348499,115.7863454,18.563000000000045,4.63882,82.4551,16.4,957.4,2.25442,-2.3749,-109.707 -2016-02-12 08:45:21,40.3484927,115.786323,18.28800000000001,4.55507,82.4027,16.4,957.4,2.26189,-2.34621,-109.863 -2016-02-12 08:45:22,40.3484865,115.7863004,18.225000000000023,4.52532,83.4422,16.4,957.4,2.26022,-2.46761,-109.93 -2016-02-12 08:45:23,40.3484803,115.7862778,18.161,4.26556,86.1035,16.4,957.4,2.25502,-2.08226,-109.794 -2016-02-12 08:45:24,40.3484741,115.7862556,18.208000000000027,4.23751,87.8882,16.4,957.4,2.25048,-2.05877,-109.916 -2016-02-12 08:45:25,40.348468,115.7862333,18.089,4.12006,88.2306,16.4,957.4,2.24768,-2.21128,-109.852 -2016-02-12 08:45:26,40.3484618,115.7862112,18.319000000000017,3.95742,89.733,16.4,957.4,2.25324,-1.93889,-109.628 -2016-02-12 08:45:27,40.3484557,115.7861892,18.310000000000002,3.98109,89.0515,16.4,957.4,2.25249,-2.38076,-109.893 -2016-02-12 08:45:28,40.3484497,115.7861672,18.201999999999998,3.97322,90.7361,16.4,957.4,2.25567,-2.45486,-109.649 -2016-02-12 08:45:29,40.3484439,115.7861451,18.471000000000004,3.97965,94.0065,16.4,957.4,2.26075,-2.21297,-106.317 -2016-02-12 08:45:30,40.3484394,115.7861226,18.227000000000032,3.89264,97.9598,16.4,957.4,2.25305,-2.42729,-101.534 -2016-02-12 08:45:31,40.3484363,115.7860996,18.062000000000012,3.88647,103.014,16.4,957.4,2.26572,-2.24522,-97.1811 -2016-02-12 08:45:32,40.3484347,115.7860764,18.20500000000004,3.96167,107.487,16.4,957.4,2.25969,-2.48252,-93.2813 -2016-02-12 08:45:33,40.3484342,115.7860533,18.545000000000016,4.19445,109.054,16.4,957.4,2.26069,-2.93529,-89.8609 -2016-02-12 08:45:34,40.3484348,115.7860307,18.602000000000032,4.59572,106.289,16.4,957.4,2.25846,-3.74323,-87.0064 -2016-02-12 08:45:35,40.3484361,115.7860075,18.62700000000001,4.55856,108.097,16.5,957.4,2.25328,-3.77968,-82.5635 -2016-02-12 08:45:36,40.3484388,115.7859842,18.871000000000038,4.94187,112.091,16.5,957.4,2.25766,-3.47161,-77.7257 -2016-02-12 08:45:37,40.3484431,115.7859614,18.620000000000005,4.99916,114.421,16.5,957.4,2.24696,-4.25361,-73.8859 -2016-02-12 08:45:38,40.3484484,115.7859379,18.662000000000035,5.041,118.194,16.5,957.4,2.24988,-2.40826,-72.456 -2016-02-12 08:45:39,40.3484539,115.7859151,18.590000000000032,4.86597,121.342,16.5,957.4,2.23913,-2.65323,-72.0437 -2016-02-12 08:45:40,40.3484598,115.7858929,18.458000000000027,4.57349,122.896,16.5,957.4,2.24802,-2.92134,-72.8244 -2016-02-12 08:45:41,40.3484654,115.7858701,18.50400000000002,4.62556,125.251,16.5,957.4,2.25008,-2.46242,-72.5329 -2016-02-12 08:45:42,40.3484709,115.7858478,18.313000000000045,4.34028,123.989,16.5,957.4,2.2451,-3.08264,-72.7796 -2016-02-12 08:45:43,40.3484763,115.7858252,17.950000000000045,4.58716,121.914,16.5,957.4,2.24825,-2.61072,-72.9401 -2016-02-12 08:45:44,40.3484817,115.7858026,17.908000000000015,4.45187,123.576,16.5,957.4,2.2571,-2.53661,-72.1734 -2016-02-12 08:45:45,40.3484873,115.7857801,18.42700000000002,4.56513,122.201,16.5,957.4,2.24877,-2.19526,-72.9211 -2016-02-12 08:45:46,40.3484926,115.7857577,18.236000000000047,4.27496,122.441,16.5,957.4,2.25316,-2.56898,-72.6472 -2016-02-12 08:45:47,40.3484981,115.7857353,18.04000000000002,4.05575,123.342,16.5,957.4,2.24489,-2.28949,-71.977 -2016-02-12 08:45:48,40.3485039,115.7857134,18.49200000000002,4.03684,127.936,16.5,957.4,2.25751,-2.46188,-67.2151 -2016-02-12 08:45:49,40.348511,115.785693,18.735000000000014,4.11837,133.691,16.5,957.4,2.25974,-3.48746,-61.2099 -2016-02-12 08:45:50,40.3485197,115.7856737,18.715000000000032,4.69469,136.928,16.5,957.4,2.24865,-3.85436,-55.4787 -2016-02-12 08:45:51,40.3485302,115.785655,18.584000000000003,4.95181,138.959,16.5,957.4,2.25789,-3.25282,-50.9018 -2016-02-12 08:45:52,40.3485445,115.7856342,19.019000000000005,5.16532,142.967,16.5,957.4,2.25162,-3.51994,-44.9958 -2016-02-12 08:45:53,40.3485551,115.7856217,18.930000000000007,5.17427,145.326,16.5,957.4,2.25415,-3.20807,-40.945 -2016-02-12 08:45:54,40.3485718,115.7856049,19.383000000000038,5.22752,149.735,16.5,957.4,2.23934,-4.49393,-34.1759 -2016-02-12 08:45:55,40.3485865,115.7855928,19.444000000000017,5.46417,153.647,16.5,957.4,2.24285,-3.81437,-28.297 -2016-02-12 08:45:56,40.3486022,115.7855819,19.15900000000005,5.61763,151.635,16.5,957.4,2.24025,-3.88984,-25.5592 -2016-02-12 08:45:57,40.3486185,115.7855714,19.13100000000003,5.22492,151.447,16.5,957.4,2.24517,-4.60596,-25.7129 -2016-02-12 08:45:58,40.348635,115.7855608,18.66500000000002,5.22477,152.331,16.5,957.4,2.25713,-3.54813,-26.0158 -2016-02-12 08:45:59,40.3486512,115.78555,18.549000000000035,5.00249,156.044,16.5,957.4,2.2507,-3.84303,-26.0043 -2016-02-12 08:46:00,40.3486673,115.7855394,18.598000000000013,4.90608,159.322,16.5,957.4,2.24678,-3.58029,-25.9375 -2016-02-12 08:46:01,40.3486837,115.7855294,18.55400000000003,4.89749,161.021,16.5,957.4,2.24366,-3.33764,-25.6277 -2016-02-12 08:46:02,40.3486999,115.7855194,18.826999999999998,4.74312,160.992,16.5,957.4,2.24832,-3.63823,-25.437 -2016-02-12 08:46:03,40.3487159,115.7855095,18.734000000000037,5.08126,160.834,16.5,957.4,2.24889,-3.83332,-25.7044 -2016-02-12 08:46:04,40.348732,115.7854993,18.697000000000003,5.29667,161.546,16.5,957.4,2.24539,-3.81592,-25.3915 -2016-02-12 08:46:05,40.3487486,115.7854894,18.629999999999995,5.33145,161.929,16.5,957.4,2.24517,-3.09275,-23.3054 -2016-02-12 08:46:06,40.3487655,115.7854806,18.716000000000008,4.78943,163.905,16.5,957.4,2.25106,-2.56043,-19.1261 -2016-02-12 08:46:07,40.348782,115.7854734,18.864000000000033,4.65857,165.761,16.5,957.4,2.24854,-3.60127,-15.6055 -2016-02-12 08:46:08,40.3487988,115.7854675,19.091000000000008,4.77459,166.962,16.5,957.4,2.24936,-4.10476,-12.4039 -2016-02-12 08:46:09,40.3488161,115.785463,19.161,5.17038,169.08,16.5,957.4,2.26161,-3.88614,-10.0499 -2016-02-12 08:46:10,40.3488335,115.7854591,19.347000000000037,5.30009,171.894,16.5,957.4,2.25124,-4.02029,-7.24302 -2016-02-12 08:46:11,40.3488513,115.7854566,19.013000000000034,5.39223,174.83,16.5,957.4,2.24748,-4.18501,-4.02827 -2016-02-12 08:46:12,40.3488692,115.7854554,18.531000000000006,5.22289,177.792,16.5,957.4,2.24002,-3.68792,-0.138169 -2016-02-12 08:46:13,40.348887,115.7854559,18.712000000000046,5.29908,176.119,16.5,957.4,2.24991,-4.16261,3.40361 -2016-02-12 08:46:14,40.3489049,115.7854579,18.876000000000033,5.18513,175.604,16.5,957.4,2.25581,-3.8008,4.82798 -2016-02-12 08:46:15,40.3489226,115.7854601,18.70300000000003,5.28377,174.7,16.5,957.4,2.25573,-4.42704,5.10422 -2016-02-12 08:46:16,40.3489402,115.7854625,18.723000000000013,5.07867,173.898,16.5,957.4,2.25527,-4.51496,5.49623 -2016-02-12 08:46:17,40.3489577,115.7854654,19.19500000000005,5.09618,175.518,16.5,957.4,2.25583,-4.36611,5.46923 -2016-02-12 08:46:18,40.3489756,115.7854678,18.958000000000027,5.11867,176.609,16.4,957.4,2.25081,-4.54822,5.33563 -2016-02-12 08:46:19,40.3489936,115.7854701,18.870000000000005,5.4073,176.796,16.4,957.4,2.25643,-4.75882,5.40797 -2016-02-12 08:46:20,40.3490114,115.7854722,18.610000000000014,5.58391,175.575,16.4,957.4,2.24946,-5.50701,5.03366 -2016-02-12 08:46:21,40.3490293,115.7854738,18.632000000000005,5.9049,176.505,16.4,957.4,2.25577,-4.83407,5.36974 -2016-02-12 08:46:22,40.3490473,115.7854761,18.746000000000038,5.91032,176.712,16.4,957.4,2.26172,-4.47638,5.38053 -2016-02-12 08:46:23,40.3490654,115.7854787,18.749000000000024,5.8128,175.791,16.4,957.4,2.24897,-4.6601,5.14888 -2016-02-12 08:46:24,40.3490833,115.7854808,18.635000000000048,5.96479,174.72,16.4,957.4,2.26363,-5.30749,5.15921 -2016-02-12 08:46:25,40.3491012,115.7854828,18.662000000000035,5.69564,172.094,16.4,957.4,2.2571,-0.473702,4.87027 -2016-02-12 08:46:26,40.3491131,115.7854838,18.741000000000042,3.78275,164.729,16.4,957.4,2.25241,-0.887125,4.75248 -2016-02-12 08:46:27,40.3491144,115.7854838,18.359000000000037,3.20324,161.213,16.4,957.4,2.25493,-3.26957,5.54402 -2016-02-12 08:46:28,40.3491142,115.7854837,18.223000000000013,2.40983,155.756,16.3,957.4,2.25721,-3.09028,5.36807 -2016-02-12 08:46:29,40.3491141,115.7854836,18.116000000000042,2.11352,157.024,16.3,957.4,2.25414,-2.34086,5.54559 -2016-02-12 08:46:30,40.349114,115.7854839,18.098000000000013,1.80536,155.986,16.3,957.4,2.24952,-2.62845,5.28901 -2016-02-12 08:46:31,40.3491139,115.7854841,18.104000000000042,1.53764,153.71,16.3,957.4,2.25496,-2.72331,4.91931 -2016-02-12 08:46:32,40.3491141,115.785484,18.013000000000034,1.25194,135.14,16.3,957.4,2.25252,-2.51398,5.07391 -2016-02-12 08:46:33,40.3491145,115.7854839,18.096000000000004,0.909581,119.528,16.3,957.4,2.26502,-2.23522,4.9321 -2016-02-12 08:46:34,40.3491148,115.7854839,18.11500000000001,1.00363,116.368,16.3,957.4,2.25633,-1.86102,4.94461 -2016-02-12 08:46:35,40.3491147,115.7854839,18.156000000000006,1.29567,116.279,16.3,957.4,2.24816,-3.27238,4.93432 -2016-02-12 08:46:36,40.3491148,115.7854839,18.29200000000003,1.80343,117.547,16.3,957.4,2.25323,-3.03301,5.0516 -2016-02-12 08:46:37,40.3491153,115.7854844,18.262,2.20721,129.988,16.3,957.4,2.23802,-2.33693,-3.56446 -2016-02-12 08:46:38,40.349117,115.7854858,18.539000000000044,2.41458,130.441,16.3,957.4,2.25003,-3.03663,-32.2437 -2016-02-12 08:46:39,40.3491192,115.7854854,18.525000000000034,2.51248,120.631,16.3,957.4,2.2485,-2.14594,-62.1644 -2016-02-12 08:46:40,40.3491202,115.7854843,18.311000000000035,2.39774,119.713,16.3,957.4,2.26122,-1.66167,-82.6586 -2016-02-12 08:46:41,40.3491201,115.7854826,18.40100000000001,2.6669,112.549,16.3,957.4,2.24148,-9.69869,-94.4252 -2016-02-12 08:46:42,40.349119,115.785474,18.451999999999998,3.58092,114.107,16.3,957.4,2.24515,-8.18198,-94.3401 -2016-02-12 08:46:43,40.3491177,115.7854533,18.446000000000026,4.36065,111.498,16.3,957.4,2.24984,-6.39408,-94.1511 -2016-02-12 08:46:44,40.3491158,115.7854241,18.548000000000002,4.83268,107.56,16.2,957.4,2.25608,-5.52217,-93.985 -2016-02-12 08:46:45,40.3491136,115.7853904,18.562000000000012,5.63733,104.996,16.2,957.4,2.25285,-3.73582,-93.9406 -2016-02-12 08:46:46,40.3491117,115.7853556,18.718000000000018,5.98308,99.2656,16.2,957.4,2.25147,-1.55215,-94.2177 -2016-02-12 08:46:47,40.3491101,115.7853231,18.66900000000004,5.99918,99.0378,16.2,957.4,2.25063,-1.4597,-93.9427 -2016-02-12 08:46:48,40.3491088,115.7852936,18.864000000000033,5.58521,98.8318,16.2,957.4,2.25688,-1.74784,-94.2138 -2016-02-12 08:46:49,40.3491076,115.7852665,18.647000000000048,5.06914,102.902,16.2,957.4,2.25241,-1.92998,-93.8656 -2016-02-12 08:46:50,40.3491069,115.7852413,18.53800000000001,4.57836,107.973,16.2,957.4,2.25181,-1.92374,-92.0432 -2016-02-12 08:46:51,40.3491072,115.785218,18.536,4.43143,115.332,16.2,957.4,2.25353,-2.10617,-85.8288 -2016-02-12 08:46:52,40.3491093,115.7851963,18.79000000000002,4.43013,123.816,16.2,957.4,2.25323,-2.65061,-78.6565 -2016-02-12 08:46:53,40.3491127,115.7851749,18.78800000000001,4.58193,121.516,16.2,957.4,2.24977,-2.85184,-78.4132 -2016-02-12 08:46:54,40.3491161,115.7851532,18.649,4.63984,120.281,16.2,957.4,2.2551,-3.52654,-78.4899 -2016-02-12 08:46:55,40.3491197,115.7851304,18.391999999999996,4.82902,119.083,16.2,957.4,2.25016,-3.82069,-78.4761 -2016-02-12 08:46:56,40.3491238,115.7851057,18.468999999999994,4.82599,118.463,16.2,957.4,2.25212,-4.37022,-78.4759 -2016-02-12 08:46:57,40.3491283,115.7850782,18.476,5.24285,115.506,16.2,957.4,2.2514,-5.29125,-78.4982 -2016-02-12 08:46:58,40.3491332,115.7850471,18.605999999999995,5.63871,114.027,16.2,957.4,2.25888,-4.89839,-78.6514 -2016-02-12 08:46:59,40.3491386,115.7850129,18.64300000000003,6.21575,110.912,16.2,957.4,2.23991,-4.85329,-78.5702 -2016-02-12 08:47:00,40.3491446,115.7849764,18.474000000000046,6.52411,109.303,16.2,957.4,2.25149,-4.43201,-78.5637 -2016-02-12 08:47:01,40.349151,115.784938,18.80800000000005,6.77679,107.561,16.2,957.4,2.24558,-4.74183,-78.8267 -2016-02-12 08:47:02,40.3491576,115.7848981,18.956999999999994,7.09753,106.696,16.2,957.4,2.25637,-4.52781,-78.8386 -2016-02-12 08:47:03,40.3491644,115.7848569,18.587000000000046,7.33927,106.749,16.2,957.4,2.26023,-4.96421,-78.5891 -2016-02-12 08:47:04,40.3491715,115.784814,18.772000000000048,7.50092,106.624,16.2,957.4,2.25672,-5.29089,-78.658 -2016-02-12 08:47:05,40.3491788,115.7847687,18.714,7.58947,106.181,16.2,957.4,2.24472,-4.61858,-78.6736 -2016-02-12 08:47:06,40.3491862,115.7847216,18.861000000000047,7.58499,106.907,16.2,957.4,2.26091,-2.96341,-78.4489 -2016-02-12 08:47:07,40.3491932,115.7846768,19.076000000000022,7.63955,107.249,16.1,957.4,2.24757,-2.96918,-78.5038 -2016-02-12 08:47:08,40.3492001,115.7846343,18.950000000000045,7.56674,107.19,16.1,957.4,2.25598,-1.65859,-78.5213 -2016-02-12 08:47:09,40.3492063,115.7845963,18.875,6.51291,106.081,16.1,957.4,2.25284,0.87737,-78.6438 -2016-02-12 08:47:10,40.3492115,115.7845658,18.902000000000044,5.94177,109.224,16.1,957.4,2.25329,-0.890602,-75.947 -2016-02-12 08:47:11,40.3492163,115.7845434,18.91700000000003,3.39562,124.224,16.1,957.4,2.25078,5.36068,-61.0265 -2016-02-12 08:47:12,40.3492168,115.7845391,18.373000000000047,2.35105,144.149,16.1,957.4,2.25335,0.560695,-45.7276 -2016-02-12 08:47:13,40.3492155,115.784539,18.483000000000004,0.893619,174.724,16.1,957.4,2.25703,-1.3111,-23.1751 -2016-02-12 08:47:14,40.3492136,115.7845378,18.56800000000004,0.103818,119.339,16.1,957.4,2.25902,-1.38589,10.1569 -2016-02-12 08:47:15,40.3492129,115.7845354,18.382000000000005,0.0326814,130.99,16.1,957.4,2.25777,-1.22882,35.8235 -2016-02-12 08:47:16,40.3492121,115.7845341,18.218999999999994,0.387784,31.1506,16.1,957.4,2.25355,-1.60541,40.0295 -2016-02-12 08:47:17,40.3492103,115.7845329,18.116000000000042,0.509455,87.3243,16.1,957.4,2.23954,-2.1407,39.683 -2016-02-12 08:47:18,40.3492105,115.7845333,17.775000000000034,0.381268,100.864,16.1,957.4,2.25254,-1.36341,39.8437 -2016-02-12 08:47:19,40.3492113,115.7845336,17.50200000000001,0.370224,45.6902,16.1,957.4,2.25597,-1.52545,39.8108 -2016-02-12 08:47:20,40.3492121,115.7845342,17.311000000000035,0.349136,85.5964,16.1,957.4,2.24971,-0.617308,39.8674 -2016-02-12 08:47:21,40.349212,115.7845348,16.980000000000018,0.418138,75.5565,16.1,957.4,2.25604,-1.80859,39.3206 -2016-02-12 08:47:22,40.3492118,115.7845347,16.562000000000012,0.729231,92.0266,16.1,957.4,2.24718,-1.91448,39.8363 -2016-02-12 08:47:23,40.3492116,115.784534,16.108000000000004,0.752719,77.3196,16.1,957.4,2.2566,-2.7967,40.4346 -2016-02-12 08:47:24,40.3492117,115.7845338,15.56800000000004,0.876472,112.876,16.2,957.6,2.24441,-2.74975,40.4632 -2016-02-12 08:47:25,40.3492114,115.7845344,14.550000000000011,0.910692,111.859,16.2,957.6,2.24345,-3.14775,40.1516 -2016-02-12 08:47:26,40.3492114,115.7845344,13.948000000000036,1.52511,98.9897,16.2,957.4,2.25048,-2.48058,39.9685 -2016-02-12 08:47:27,40.3492112,115.7845344,13.17100000000005,1.46838,143.535,16.2,957.4,2.25029,1.99029,39.8544 -2016-02-12 08:47:28,40.3492081,115.7845311,12.235000000000014,1.59666,132.338,16.2,957.4,2.24882,0.489737,39.9297 -2016-02-12 08:47:29,40.3492023,115.7845249,11.288000000000011,2.02849,101.22,16.2,957.6,2.24682,0.807989,40.035 -2016-02-12 08:47:30,40.3491942,115.7845164,10.459000000000003,2.41615,81.7842,16.2,957.6,2.24377,-1.64567,39.8959 -2016-02-12 08:47:31,40.3491866,115.7845083,9.474000000000046,2.36492,77.0593,16.2,957.4,2.25103,-9.16326,40.0477 -2016-02-12 08:47:32,40.3491841,115.7845057,8.593000000000018,2.04153,85.8787,16.2,957.4,2.25579,-3.23226,40.0162 -2016-02-12 08:47:33,40.3491831,115.7845048,7.691000000000031,2.01561,84.4265,16.2,957.4,2.24309,2.06283,40.2772 -2016-02-12 08:47:34,40.3491783,115.7844987,6.6720000000000255,2.23031,79.3183,16.2,957.4,2.24866,3.54644,46.1237 -2016-02-12 08:47:35,40.3491704,115.7844869,5.802000000000021,2.77827,78.7524,16.2,957.6,2.24481,0.782934,49.3694 -2016-02-12 08:47:36,40.3491614,115.7844734,5.021000000000015,2.6489,80.7009,16.2,957.6,2.24837,-3.47997,49.2569 diff --git a/examples/basic_usage/testconfig.yaml b/examples/basic_usage/testconfig.yaml deleted file mode 100644 index ee23d5d..0000000 --- a/examples/basic_usage/testconfig.yaml +++ /dev/null @@ -1,95 +0,0 @@ -# testconfig.yaml - -horizontal_pixels: 500 # Width of the concentration map in pixels -vertical_pixels: 100 # Height of the concentration map in pixels -num_plumes: 10 # Number of Gaussian plumes -groupiness: 0.5 # Groupiness of the plumes (0.0 to 1.0) -spread: 0.1 # Spread of the plumes (0.0 to 1.0) -wind_reference_height: 10 # Reference height for wind speed calculation (m) -windspeed_avg: 5 # Average wind speed at 10m height (m/s) -windspeed_rel_std: 0.2 # Relative standard deviation of wind speed (0.0 to inf), recommend 0.2-0.4 -surface_roughness: 0.1 # Surface roughness length (m) -seed: 42 # Random seed for reproducibility -simplex_octaves: 4 # Number of octaves for simplex noise (1 to inf, def 1) -simplex_persistence: 0.7 # Persistence of simplex noise (0.0 to 1.0, def 0.5) - specifies the amplitude of each octave relative to the one below it -simplex_lacunarity: 2.0 # Lacunarity of simplex noise (1.0 to inf, def 2.0) - specifies the frequency of each octave relative to the one below it -winddir_avg: 0.0 # Average wind direction in degrees rel to plane (0 is CW) -winddir_std: 10 # Standard deviation of wind direction in degrees -timestamp: "2022-09-26 02:03:00" -flight_time_seconds: 1000 -sample_frequency: 1 -start_coords: - - 54.87667 - - 15.41 -transect_azimuth: 260 # the wind will start off 90 degrees CW to this azimuth, and is modified relative to that by the winddir_avg. 260 is a good value to test N problems -sampling_altitude_ato_range: - - -10 # negative values should be fine - - 100 -sampling_horizontal_range: - - 50 - - 950 -scene_altitude_range: - - -20 - - 120 -scene_horizontal_range: - - 0 - - 1000 -number_of_transects: 10 -gases: - ch4: - - 1.95 - - 10.0 - co2: - - 380.0 - - 500.0 - c2h6: - - 0.0 - - 1.0 -temperature: 10.0 -pressure: 1000.0 - -output_dir: ./gasflux_reports - -algorithmic_baseline_settings: - algorithm: fastchrom - -semivariogram_settings: - model: spherical - estimator: cressie - n_lags: 20 - bin_func: even - fit_method: lm - maxlag: 100 - #fit_sigma: linear - tolerance: 10 - azimuth: 0 - bandwidth: 20 - -ordinary_kriging_settings: - min_points: 3 - max_points: 100 - grid_resolution: 500 - min_nodes: 10 - cut_ground: False - y_min: ~ - -required_cols: - latitude: [-90, 90] - longitude: [-180, 180] - height_ato: [-100, 500] - windspeed: [0, 30] - winddir: [0, 360] - temperature: [-50, 60] - pressure: [900, 1100] - -filters: - course_filter: - azimuth_filter: 10 - azimuth_window: 5 - elevation_filter: 5 - -strategies: - background: "algorithm" - sensor: "insitu" - spatial: "curtain" - interpolation: "kriging" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index fd52cb4..8085363 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,6 @@ Jinja2==3.1.6 joblib==1.3.2 matplotlib==3.10.0 molmass==2023.8.30 -noise==1.2.2 numpy==2.1.3 pandas==2.2.3 plotly==5.20.0 @@ -18,3 +17,8 @@ scikit-gstat==1.0.19 scikit-image==0.24.0 scipy==1.15.1 simplekml==1.3.6 +flask +werkzeug +flask-cors +waitress +psutil diff --git a/run_api.py b/run_api.py new file mode 100644 index 0000000..7a2c068 --- /dev/null +++ b/run_api.py @@ -0,0 +1,30 @@ +import os +import sys +from pathlib import Path + +# Add the project root and src directory to PYTHONPATH +project_root = Path(__file__).parent.absolute() +src_dir = project_root / "src" + +sys.path.append(str(project_root)) +sys.path.append(str(src_dir)) + +# Set environment variables for Flask +os.environ['FLASK_APP'] = 'src/gasflux/app.py' +os.environ['FLASK_ENV'] = 'development' + +if __name__ == "__main__": + print("Starting GasFlux Web API...") + + # Import and run the app + try: + import gasflux.app as gasflux_app + app = gasflux_app.app + print("GasFlux app imported successfully") + print("Starting Flask development server on http://0.0.0.0:5000") + app.run(host='0.0.0.0', port=5000, debug=True) + except Exception as e: + print(f"Error starting GasFlux app: {e}") + import traceback + traceback.print_exc() + sys.exit(1) diff --git a/server_waitress.py b/server_waitress.py new file mode 100644 index 0000000..58d4527 --- /dev/null +++ b/server_waitress.py @@ -0,0 +1,117 @@ +#!/usr/bin/env python3 +""" +GasFlux Web API Server using Waitress WSGI server. + +This is the production server entry point for the GasFlux Web API. +Includes full GasFlux processing capabilities with task pool management. + +Features: +- File upload and processing (.xlsx, .xls) +- Asynchronous task processing with background workers +- Task pool management with pagination and filtering +- Real-time task status monitoring +- Report generation and file download +- Health monitoring and statistics + +API Endpoints: +- /upload - File upload and processing initiation +- /task/ - Task status management +- /tasks - Task pool management (NEW) +- /download/ - File download +- /reports - Report listing +- /health - Health monitoring +- /stats - System statistics +- /config - Configuration info +- / - Web interface + +Usage: + python server_waitress.py + +Or package with PyInstaller: + pyinstaller --onefile --name GasFluxAPI server_waitress.py +""" + +import os +import sys +from pathlib import Path + +# Add the project root and src directory to PYTHONPATH +project_root = Path(__file__).parent.absolute() +src_dir = project_root / "src" + +sys.path.insert(0, str(project_root)) +sys.path.insert(0, str(src_dir)) + +# Set environment variables for production +os.environ['FLASK_APP'] = 'src/gasflux/app.py' +os.environ['FLASK_ENV'] = 'production' + +def main(): + """Main entry point for the GasFlux Web API server.""" + print("Starting GasFlux Web API with Waitress...") + + try: + # Import the Flask app + import gasflux.app as gasflux_app + from src.gasflux.app import Config + + app = gasflux_app.app + print("✓ GasFlux app imported successfully") + print("✓ Task pool management enabled") + print("✓ All blueprints loaded: upload, tasks, task_pool, download, reports, health, stats, config, web") + + # Import waitress + from waitress import serve + print("✓ Waitress WSGI server imported") + + # Server configuration from environment variables + host = Config.HOST + port = Config.PORT + threads = Config.THREADS + connection_limit = Config.CONNECTION_LIMIT + channel_timeout = Config.CHANNEL_TIMEOUT + + print(f"Starting Waitress server on {host}:{port}") + print(f"- Threads: {threads}") + print(f"- Connection limit: {connection_limit}") + print(f"- Channel timeout: {channel_timeout}s") + print("Press Ctrl+C to stop the server") + print("=" * 50) + print("Available API endpoints:") + print(" POST /upload - Upload files for processing") + print(" GET /task/ - Get task status") + print(" PUT /task/ - Update task status") + print(" DEL /task/ - Delete task") + print(" GET /tasks - List tasks (paginated)") + print(" GET /tasks/stats - Task pool statistics") + print(" GET /tasks/active - Active tasks") + print(" GET /tasks/queue - Queued tasks") + print(" GET /download/ - Download files") + print(" GET /reports - List reports") + print(" GET /health - Health check") + print(" GET /stats - System stats") + print(" GET /config - Configuration") + print(" GET / - Web interface") + print("=" * 50) + print(f"Configuration: {Config.to_dict()}") + + # Start the server with valid Waitress parameters + serve( + app, + host=host, + port=port, + threads=threads, + connection_limit=connection_limit, + channel_timeout=channel_timeout, + ) + + except KeyboardInterrupt: + print("\nServer stopped by user") + except Exception as e: + print(f"✗ Error starting GasFlux app: {e}") + import traceback + traceback.print_exc() + sys.exit(1) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/src/gasflux/app.py b/src/gasflux/app.py new file mode 100644 index 0000000..a3c1ab8 --- /dev/null +++ b/src/gasflux/app.py @@ -0,0 +1,728 @@ +import os +import shutil +import sys +import uuid +import logging +import threading +import time +from functools import wraps +from pathlib import Path +from flask import Flask, request, jsonify, send_file, render_template_string, url_for, g +from flask_cors import CORS +from werkzeug.utils import secure_filename +import yaml + +# Shared utilities imported from shared.py +try: + # Try relative import (when run as part of package) + from .shared import task_status, TASK_STATUS_PENDING, TASK_STATUS_PROCESSING, TASK_STATUS_COMPLETED, TASK_STATUS_FAILED +except ImportError: + # Fallback to absolute import (when run directly) + from shared import task_status, TASK_STATUS_PENDING, TASK_STATUS_PROCESSING, TASK_STATUS_COMPLETED, TASK_STATUS_FAILED + +# Blueprints will be imported after app initialization to avoid circular imports + +# Environment-based configuration management +class Config: + """Configuration management using environment variables with defaults.""" + + # Server configuration + HOST = os.getenv('GASFLUX_HOST', '0.0.0.0') + PORT = int(os.getenv('GASFLUX_PORT', '5000')) + DEBUG = os.getenv('GASFLUX_DEBUG', 'false').lower() in ('true', '1', 'yes', 'on') + + # Directory configuration + BASE_DIR = None # Will be set dynamically + UPLOAD_FOLDER_NAME = os.getenv('GASFLUX_UPLOAD_FOLDER', 'web_api_data/uploads') + OUTPUT_FOLDER_NAME = os.getenv('GASFLUX_OUTPUT_FOLDER', 'web_api_data/outputs') + + # File size limits (in bytes) + MAX_CONTENT_LENGTH = int(os.getenv('GASFLUX_MAX_CONTENT_LENGTH', str(100 * 1024 * 1024))) # 100MB + + # Logging configuration + LOG_LEVEL = os.getenv('GASFLUX_LOG_LEVEL', 'INFO').upper() + LOG_FILE = os.getenv('GASFLUX_LOG_FILE', 'logs/gasflux_api.log') + + # CORS configuration + CORS_ORIGINS = os.getenv('GASFLUX_CORS_ORIGINS', '*').split(',') + + # Task management + TASK_CLEANUP_INTERVAL = int(os.getenv('GASFLUX_TASK_CLEANUP_INTERVAL', '3600')) # 1 hour in seconds + MAX_TASK_AGE = int(os.getenv('GASFLUX_MAX_TASK_AGE', str(24 * 3600))) # 24 hours in seconds + + # Performance tuning + THREADS = int(os.getenv('GASFLUX_THREADS', '8')) # Waitress threads + CONNECTION_LIMIT = int(os.getenv('GASFLUX_CONNECTION_LIMIT', '100')) + CHANNEL_TIMEOUT = int(os.getenv('GASFLUX_CHANNEL_TIMEOUT', '300')) # 5 minutes + + @classmethod + def init_base_dir(cls): + """Initialize base directory based on environment.""" + try: + if getattr(sys, 'frozen', False): + # Running in PyInstaller bundle + cls.BASE_DIR = Path(sys.executable).parent + else: + # Running in normal Python environment + cls.BASE_DIR = Path(__file__).resolve().parent.parent.parent + except: + # Fallback to current working directory + cls.BASE_DIR = Path.cwd() + + # Initialize directories based on config + cls.init_directories() + + @classmethod + def init_directories(cls, output_dir=None): + """Initialize upload and output directories.""" + if output_dir: + # Use config-based output directory + output_base = Path(output_dir) + if not output_base.is_absolute(): + output_base = cls.BASE_DIR / output_base + else: + # Use default relative paths + output_base = cls.BASE_DIR + + # Set upload and output directories relative to output_base + cls.UPLOAD_FOLDER = output_base / "uploads" + cls.OUTPUT_FOLDER = output_base / "outputs" + + # Create directories + cls.UPLOAD_FOLDER.mkdir(parents=True, exist_ok=True) + cls.OUTPUT_FOLDER.mkdir(parents=True, exist_ok=True) + logger.info(f"Directories initialized - Upload: {cls.UPLOAD_FOLDER}, Output: {cls.OUTPUT_FOLDER}") + + @classmethod + def update_directories_from_config(cls, config_path=None): + """Update directories based on config file.""" + if config_path and Path(config_path).exists(): + try: + with open(config_path, 'r', encoding='utf-8') as f: + config = yaml.safe_load(f) + output_dir = config.get('output_dir') + if output_dir: + cls.init_directories(output_dir) + logger.info(f"Directories updated from config: {config_path}") + except Exception as e: + logger.warning(f"Failed to update directories from config {config_path}: {e}") + else: + logger.info("Using default directory configuration") + + @classmethod + def get_log_level(cls): + """Get logging level from string.""" + levels = { + 'DEBUG': logging.DEBUG, + 'INFO': logging.INFO, + 'WARNING': logging.WARNING, + 'ERROR': logging.ERROR, + 'CRITICAL': logging.CRITICAL + } + return levels.get(cls.LOG_LEVEL, logging.INFO) + + @classmethod + def to_dict(cls): + """Return configuration as dictionary for debugging.""" + return { + 'host': cls.HOST, + 'port': cls.PORT, + 'debug': cls.DEBUG, + 'base_dir': str(cls.BASE_DIR) if cls.BASE_DIR else None, + 'upload_folder': str(cls.UPLOAD_FOLDER) if hasattr(cls, 'UPLOAD_FOLDER') else None, + 'output_folder': str(cls.OUTPUT_FOLDER) if hasattr(cls, 'OUTPUT_FOLDER') else None, + 'max_content_length': cls.MAX_CONTENT_LENGTH, + 'log_level': cls.LOG_LEVEL, + 'log_file': cls.LOG_FILE, + 'cors_origins': cls.CORS_ORIGINS, + 'task_cleanup_interval': cls.TASK_CLEANUP_INTERVAL, + 'max_task_age': cls.MAX_TASK_AGE, + 'threads': cls.THREADS, + 'connection_limit': cls.CONNECTION_LIMIT, + 'channel_timeout': cls.CHANNEL_TIMEOUT + } + +# Initialize logging with environment-based configuration +logging.basicConfig( + level=Config.get_log_level(), + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + handlers=[ + logging.StreamHandler(), # Console output + ] +) +logger = logging.getLogger("gasflux_api") +logger.info("Basic logging initialized") + + +def log_performance(func): + """Decorator to log function performance.""" + @wraps(func) + def wrapper(*args, **kwargs): + start_time = time.time() + func_name = func.__name__ + logger.debug(f"PERF: Starting {func_name}") + try: + result = func(*args, **kwargs) + duration = time.time() - start_time + logger.info(f"PERF: {func_name} completed in {duration:.3f}s") + return result + except Exception as e: + duration = time.time() - start_time + logger.error(f"PERF: {func_name} failed after {duration:.3f}s - Error: {str(e)}") + raise + return wrapper + +# Task status management +# Task status constants and storage moved to shared.py + +def update_task_status(task_id, status, message=None, results=None, error=None): + """Update task status in the global dictionary.""" + timestamp = time.time() + old_status = task_status.get(task_id, {}).get("status", "unknown") + + task_status[task_id] = { + "status": status, + "message": message, + "results": results, + "error": error, + "updated_at": timestamp + } + + # Log detailed status change with context + log_msg = f"Task {task_id} status changed: {old_status} -> {status}" + if message: + log_msg += f" | Message: {message}" + if results: + log_msg += f" | Results count: {len(results) if isinstance(results, list) else 'N/A'}" + if error: + log_msg += f" | Error: {error}" + + log_level = logging.ERROR if status == TASK_STATUS_FAILED else logging.INFO + logger.log(log_level, log_msg) + + # Update task statistics + stats_collector.record_task_status_change(old_status, status) + + +# Statistics and Monitoring +class APIStatsCollector: + """Collect and manage API statistics.""" + + def __init__(self): + self.start_time = time.time() + self.reset_stats() + + def reset_stats(self): + """Reset all statistics.""" + self.stats = { + 'requests': { + 'total': 0, + 'by_method': {}, + 'by_endpoint': {}, + 'by_status': {}, + 'response_times': [], + 'errors': 0 + }, + 'tasks': { + 'total_created': 0, + 'total_completed': 0, + 'total_failed': 0, + 'by_status': { + 'pending': 0, + 'processing': 0, + 'completed': 0, + 'failed': 0 + }, + 'processing_times': [] + }, + 'performance': { + 'avg_response_time': 0, + 'max_response_time': 0, + 'min_response_time': float('inf'), + 'uptime_seconds': time.time() - self.start_time + } + } + + def record_request(self, method, endpoint, status_code, response_time): + """Record an API request.""" + self.stats['requests']['total'] += 1 + + # Method stats + if method not in self.stats['requests']['by_method']: + self.stats['requests']['by_method'][method] = 0 + self.stats['requests']['by_method'][method] += 1 + + # Endpoint stats + if endpoint not in self.stats['requests']['by_endpoint']: + self.stats['requests']['by_endpoint'][endpoint] = 0 + self.stats['requests']['by_endpoint'][endpoint] += 1 + + # Status stats + status_category = str(status_code // 100 * 100) # 200, 400, 500, etc. + if status_category not in self.stats['requests']['by_status']: + self.stats['requests']['by_status'][status_category] = 0 + self.stats['requests']['by_status'][status_category] += 1 + + # Response time stats + self.stats['requests']['response_times'].append(response_time) + + # Keep only last 1000 response times for memory efficiency + if len(self.stats['requests']['response_times']) > 1000: + self.stats['requests']['response_times'] = self.stats['requests']['response_times'][-1000:] + + # Error tracking + if status_code >= 400: + self.stats['requests']['errors'] += 1 + + # Update performance stats + self._update_performance_stats() + + def record_task_status_change(self, old_status, new_status): + """Record task status changes.""" + if old_status == "unknown": # New task + self.stats['tasks']['total_created'] += 1 + + if new_status == TASK_STATUS_COMPLETED: + self.stats['tasks']['total_completed'] += 1 + elif new_status == TASK_STATUS_FAILED: + self.stats['tasks']['total_failed'] += 1 + + # Update status counts + for status in [old_status, new_status]: + if status in self.stats['tasks']['by_status']: + if status == old_status and old_status != "unknown": + self.stats['tasks']['by_status'][old_status] -= 1 + elif status == new_status: + self.stats['tasks']['by_status'][new_status] += 1 + + def record_task_completion_time(self, completion_time): + """Record task completion time.""" + self.stats['tasks']['processing_times'].append(completion_time) + + # Keep only last 100 processing times + if len(self.stats['tasks']['processing_times']) > 100: + self.stats['tasks']['processing_times'] = self.stats['tasks']['processing_times'][-100:] + + def _update_performance_stats(self): + """Update performance statistics.""" + response_times = self.stats['requests']['response_times'] + if response_times: + self.stats['performance']['avg_response_time'] = sum(response_times) / len(response_times) + self.stats['performance']['max_response_time'] = max(response_times) + self.stats['performance']['min_response_time'] = min(response_times) + + self.stats['performance']['uptime_seconds'] = time.time() - self.start_time + + def get_summary(self): + """Get a summary of current statistics.""" + current_time = time.time() + uptime = current_time - self.start_time + + # Calculate rates + requests_per_second = self.stats['requests']['total'] / max(uptime, 1) + error_rate = (self.stats['requests']['errors'] / max(self.stats['requests']['total'], 1)) * 100 + + # Task completion rate + total_tasks_processed = self.stats['tasks']['total_completed'] + self.stats['tasks']['total_failed'] + task_success_rate = (self.stats['tasks']['total_completed'] / max(total_tasks_processed, 1)) * 100 + + return { + 'summary': { + 'uptime_seconds': uptime, + 'uptime_formatted': self._format_uptime(uptime), + 'requests_total': self.stats['requests']['total'], + 'requests_per_second': round(requests_per_second, 2), + 'error_rate_percent': round(error_rate, 2), + 'active_tasks': len([t for t in task_status.values() + if t.get('status') in [TASK_STATUS_PENDING, TASK_STATUS_PROCESSING]]) + }, + 'requests': { + 'by_method': self.stats['requests']['by_method'], + 'by_status': self.stats['requests']['by_status'], + 'top_endpoints': dict(sorted(self.stats['requests']['by_endpoint'].items(), + key=lambda x: x[1], reverse=True)[:10]) + }, + 'tasks': { + 'total_created': self.stats['tasks']['total_created'], + 'total_completed': self.stats['tasks']['total_completed'], + 'total_failed': self.stats['tasks']['total_failed'], + 'success_rate_percent': round(task_success_rate, 2), + 'by_status': self.stats['tasks']['by_status'] + }, + 'performance': { + 'avg_response_time_ms': round(self.stats['performance']['avg_response_time'] * 1000, 2), + 'max_response_time_ms': round(self.stats['performance']['max_response_time'] * 1000, 2), + 'min_response_time_ms': round(self.stats['performance']['min_response_time'] * 1000, 2) if self.stats['performance']['min_response_time'] != float('inf') else 0 + } + } + + def _format_uptime(self, seconds): + """Format uptime in human readable format.""" + days, remainder = divmod(int(seconds), 86400) + hours, remainder = divmod(remainder, 3600) + minutes, seconds = divmod(remainder, 60) + + parts = [] + if days > 0: + parts.append(f"{days}d") + if hours > 0: + parts.append(f"{hours}h") + if minutes > 0: + parts.append(f"{minutes}m") + parts.append(f"{seconds}s") + + return " ".join(parts) + + +# Global statistics collector +stats_collector = APIStatsCollector() + +# get_task_status moved to shared.py + +# cleanup_old_tasks moved to shared.py + +def process_data_async(task_id, data_path, config_path, job_output_dir): + """Background task to process data asynchronously.""" + logger.info(f"Job {task_id}: Background processing started for task {task_id}") + start_time = time.time() + + try: + update_task_status(task_id, TASK_STATUS_PROCESSING, "Starting data processing...") + + # 1. Load and override config FIRST + logger.info(f"Job {task_id}: Loading configuration from {config_path}") + config_start = time.time() + + try: + with open(config_path, 'r') as f: + config = yaml.safe_load(f) + logger.info(f"Job {task_id}: Configuration loaded successfully with {len(config)} keys") + except Exception as e: + logger.error(f"Job {task_id}: Failed to load config from {config_path}: {str(e)}") + raise + + # Update directories based on config output_dir + Config.update_directories_from_config(config_path) + + # Sync app.config with updated directories + app.config['UPLOAD_FOLDER'] = Config.UPLOAD_FOLDER + app.config['OUTPUT_FOLDER'] = Config.OUTPUT_FOLDER + + # Update task status file path to new output directory + from .shared import set_task_status_file_path, load_task_status_from_file + set_task_status_file_path(Config.OUTPUT_FOLDER / "task_status.json") + # 立即从新路径加载现有状态,避免后续保存清空文件 + load_task_status_from_file() + + # Update job directories to be under the correct config-based paths + from pathlib import Path + job_upload_dir = Path(Config.UPLOAD_FOLDER) / task_id + job_output_dir = Path(Config.OUTPUT_FOLDER) / task_id + job_upload_dir.mkdir(parents=True, exist_ok=True) + job_output_dir.mkdir(parents=True, exist_ok=True) + + # Move uploaded files to the correct config-based directories + try: + import shutil + + # Move data file to correct uploads directory + if data_path.parent != job_upload_dir: + new_data_path = job_upload_dir / data_path.name + if data_path != new_data_path: + shutil.move(str(data_path), str(new_data_path)) + data_path = new_data_path + logger.info(f"Job {task_id}: Moved data file to {data_path}") + + # Move config file to correct uploads directory (if it's a custom config) + if config_path.parent != job_upload_dir and config_path.parent != Config.BASE_DIR: + new_config_path = job_upload_dir / config_path.name + if config_path != new_config_path: + shutil.move(str(config_path), str(new_config_path)) + config_path = new_config_path + logger.info(f"Job {task_id}: Moved config file to {config_path}") + + except Exception as e: + logger.warning(f"Job {task_id}: Failed to move uploaded files to configured directories: {str(e)}") + + logger.debug(f"Job {task_id}: Keeping original output directory: {config.get('output_dir', 'not set')}") + logger.debug(f"Job {task_id}: Updated directories - Upload: {Config.UPLOAD_FOLDER}, Output: {Config.OUTPUT_FOLDER}, Job output: {job_output_dir}") + + config_duration = time.time() - config_start + logger.info(f"Job {task_id}: Configuration processing completed in {config_duration:.3f}s") + + update_task_status(task_id, TASK_STATUS_PROCESSING, "Configuration loaded, starting preprocessing...") + + # 2. Data Preprocessing (files are already in correct directories) + logger.info(f"Job {task_id}: Starting preprocessing phase...") + preprocess_start = time.time() + + processed_csv = data_path.parent / f"{data_path.stem}.processed.csv" + logger.debug(f"Job {task_id}: Input file: {data_path}, Output file: {processed_csv}") + + process_file(str(data_path), str(processed_csv), str(config_path)) + + preprocess_duration = time.time() - preprocess_start + logger.info(f"Job {task_id}: Preprocessing completed in {preprocess_duration:.3f}s") + + update_task_status(task_id, TASK_STATUS_PROCESSING, "Preprocessing completed, starting GasFlux analysis...") + + # Write modified config to a temp file + final_config_path = data_path.parent / "final_config.yaml" + try: + with open(final_config_path, 'w') as f: + yaml.safe_dump(config, f) + logger.info(f"Job {task_id}: Final config written to {final_config_path}") + except Exception as e: + logger.error(f"Job {task_id}: Failed to write final config: {str(e)}") + raise + + config_duration = time.time() - config_start + logger.info(f"Job {task_id}: Configuration processing completed in {config_duration:.3f}s") + + update_task_status(task_id, TASK_STATUS_PROCESSING, "Configuration loaded, starting GasFlux analysis...") + + # 3. GasFlux Processing + logger.info(f"Job {task_id}: Starting GasFlux analysis...") + analysis_start = time.time() + + process_main(processed_csv, final_config_path, task_id) + + analysis_duration = time.time() - analysis_start + logger.info(f"Job {task_id}: GasFlux analysis completed in {analysis_duration:.3f}s") + + update_task_status(task_id, TASK_STATUS_PROCESSING, "GasFlux analysis completed, generating reports...") + + # Collect results and generate full URLs + logger.info(f"Job {task_id}: Collecting generated files from {job_output_dir}") + results_start = time.time() + results = [] + + try: + for f in job_output_dir.rglob("*"): + if f.is_file(): + rel_path = f.relative_to(app.config['OUTPUT_FOLDER']).as_posix() + file_size = f.stat().st_size + results.append({ + "name": f.name, + "rel_path": rel_path, + "download_url": f"/download/{rel_path}", # Relative URL that client can use + "size": file_size + }) + logger.debug(f"Job {task_id}: Found output file: {f.name} ({file_size} bytes)") + + results_duration = time.time() - results_start + logger.info(f"Job {task_id}: Results collection completed in {results_duration:.3f}s - {len(results)} files generated") + + total_size = sum(r.get('size', 0) for r in results) + logger.info(f"Job {task_id}: Total output size: {total_size} bytes across {len(results)} files") + + except Exception as e: + logger.error(f"Job {task_id}: Failed to collect results: {str(e)}") + raise + + total_duration = time.time() - start_time + logger.info(f"Job {task_id}: Processing complete. Total duration: {total_duration:.3f}s, {len(results)} files generated.") + + # Record task completion time for statistics + stats_collector.record_task_completion_time(total_duration) + + update_task_status(task_id, TASK_STATUS_COMPLETED, "Processing completed successfully", results=results) + + except Exception as e: + total_duration = time.time() - start_time + logger.error(f"Job {task_id}: Processing failed after {total_duration:.3f}s - Error: {str(e)}", exc_info=True) + + # Record failed task processing time for statistics + stats_collector.record_task_completion_time(total_duration) + logger.error(f"Job {task_id}: Failed task details - Data: {data_path}, Config: {config_path}, Output: {job_output_dir}") + + # Try to capture any partial results + partial_results = [] + try: + for f in job_output_dir.rglob("*"): + if f.is_file(): + rel_path = f.relative_to(app.config['OUTPUT_FOLDER']).as_posix() + partial_results.append({ + "name": f.name, + "rel_path": rel_path, + "download_url": f"/download/{rel_path}", # Relative URL that client can use + "size": f.stat().st_size, + "note": "partial_result" + }) + except Exception as collect_error: + logger.warning(f"Job {task_id}: Failed to collect partial results: {str(collect_error)}") + + error_msg = f"Processing failed: {str(e)}" + if partial_results: + error_msg += f" (partial results available: {len(partial_results)} files)" + + update_task_status(task_id, TASK_STATUS_FAILED, error=error_msg, results=partial_results if partial_results else None) + +# Import GasFlux modules +logger.info("Importing GasFlux modules...") +import_start = time.time() + +try: + # Try absolute imports first (more reliable) + from src.gasflux.processing_pipelines import process_main + from src.gasflux.data_processor import process_file + from src.gasflux.reporting import generate_reports + import_duration = time.time() - import_start + logger.info(f"GasFlux modules imported successfully in {import_duration:.3f}s (absolute import)") +except ImportError as e1: + logger.warning(f"Absolute import failed, trying relative import: {e1}") + try: + from .processing_pipelines import process_main + from .data_processor import process_file + from .reporting import generate_reports + import_duration = time.time() - import_start + logger.info(f"GasFlux modules imported successfully in {import_duration:.3f}s (relative import)") + except ImportError as e2: + import_duration = time.time() - import_start + logger.error(f"Failed to import GasFlux modules after {import_duration:.3f}s - Absolute error: {e1}, Relative error: {e2}") + raise ImportError(f"Cannot import GasFlux modules: {e2}") + +app = Flask(__name__) +CORS(app) # Initialize CORS + +# Enhanced logging configuration after app initialization +try: + log_file_path = Path(Config.LOG_FILE) + log_file_path.parent.mkdir(parents=True, exist_ok=True) + + # Create file handler + file_handler = logging.FileHandler(log_file_path, encoding='utf-8') + file_handler.setLevel(Config.get_log_level()) + formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + file_handler.setFormatter(formatter) + + # Add file handler to logger + logger.addHandler(file_handler) + logger.info(f"File logging initialized. Log file: {log_file_path.absolute()}") + print(f"Log file: {log_file_path.absolute()}") # Also print to console +except Exception as e: + print(f"Warning: Failed to initialize file logging: {e}") + logger.warning(f"Failed to initialize file logging: {e}") + +logger.info("Flask application initialized") + +# Request logging middleware +@app.before_request +def log_request_info(): + """Log incoming request details.""" + g.start_time = time.time() + logger.info(f"REQUEST: {request.method} {request.url} - IP: {request.remote_addr} - User-Agent: {request.headers.get('User-Agent', 'Unknown')}") + +@app.after_request +def log_response_info(response): + """Log response details.""" + duration = time.time() - g.start_time + logger.info(f"RESPONSE: {request.method} {request.url} - Status: {response.status_code} - Duration: {duration:.3f}s") + + # Record statistics + endpoint = request.url_rule.rule if request.url_rule else request.path + stats_collector.record_request(request.method, endpoint, response.status_code, duration) + + return response + +# Initialize configuration from environment variables +Config.init_base_dir() + +# Apply configuration to app (directories will be created dynamically based on config) +# ALLOWED_DATA_EXTENSIONS and ALLOWED_CONFIG_EXTENSIONS moved to shared.py + +app.config['MAX_CONTENT_LENGTH'] = Config.MAX_CONTENT_LENGTH +# Don't set UPLOAD_FOLDER and OUTPUT_FOLDER here - they will be set dynamically per request +# Set defaults to avoid KeyError if any handler reads before config is applied +app.config.setdefault('UPLOAD_FOLDER', None) +app.config.setdefault('OUTPUT_FOLDER', None) + +# Log current configuration +logger.info(f"Upload folder: {Config.UPLOAD_FOLDER}") +logger.info(f"Output folder: {Config.OUTPUT_FOLDER}") +logger.info(f"Configuration: {Config.to_dict()}") + +# Ensure directories exist at startup +def setup_directories(): + logger.info("Initializing application directories...") + start_time = time.time() + + try: + # Check if directories already exist + upload_exists = Config.UPLOAD_FOLDER.exists() + output_exists = Config.OUTPUT_FOLDER.exists() + + Config.UPLOAD_FOLDER.mkdir(parents=True, exist_ok=True) + Config.OUTPUT_FOLDER.mkdir(parents=True, exist_ok=True) + + duration = time.time() - start_time + logger.info(f"Directories initialized in {duration:.3f}s: {Config.UPLOAD_FOLDER} ({'existing' if upload_exists else 'created'}), {Config.OUTPUT_FOLDER} ({'existing' if output_exists else 'created'})") + + # Log directory permissions + upload_writable = os.access(Config.UPLOAD_FOLDER, os.W_OK) + output_writable = os.access(Config.OUTPUT_FOLDER, os.W_OK) + logger.info(f"Directory permissions - Upload writable: {upload_writable}, Output writable: {output_writable}") + + except Exception as e: + duration = time.time() - start_time + logger.error(f"Failed to create directories after {duration:.3f}s: {e}") + raise + +# setup_directories() - commented out to avoid creating directories at startup +# Directories will be created dynamically based on config when processing tasks + +# allowed_file moved to shared.py + +# Import blueprints after app initialization to avoid circular imports +from .blueprints.health import health_bp +from .blueprints.upload import upload_bp +from .blueprints.tasks import tasks_bp +from .blueprints.task_pool import task_pool_bp +from .blueprints.stats import stats_bp +from .blueprints.config import config_bp +from .blueprints.reports import reports_bp +from .blueprints.download import download_bp +from .blueprints.web import web_bp + +# Register blueprints +app.register_blueprint(health_bp) +app.register_blueprint(upload_bp) +app.register_blueprint(tasks_bp) +app.register_blueprint(task_pool_bp) +app.register_blueprint(stats_bp) +app.register_blueprint(config_bp) +app.register_blueprint(reports_bp) +app.register_blueprint(download_bp) +app.register_blueprint(web_bp) + +# Load persisted task status after app initialization +try: + from .shared import ( + load_task_status_from_file, + save_task_status_to_file, + set_task_status_file_path, + ) + + # 只有在 OUTPUT_FOLDER 有效时才启用持久化 + if hasattr(Config, 'OUTPUT_FOLDER') and Config.OUTPUT_FOLDER: + task_status_path = Config.OUTPUT_FOLDER / "task_status.json" + set_task_status_file_path(task_status_path) + logger.info(f"Task status persistence path set to: {task_status_path}") + with app.app_context(): + load_task_status_from_file() + + import atexit + def _save_on_exit(): + with app.app_context(): + save_task_status_to_file() + atexit.register(_save_on_exit) + else: + logger.info("Task status persistence will be configured after config is loaded") +except Exception as e: + print(f"⚠ Failed to setup task persistence: {e}") + +# _get_file_type and _format_response moved to shared.py + + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5000, debug=False) diff --git a/src/gasflux/blueprints/__init__.py b/src/gasflux/blueprints/__init__.py new file mode 100644 index 0000000..c60db7b --- /dev/null +++ b/src/gasflux/blueprints/__init__.py @@ -0,0 +1 @@ +# GasFlux API Blueprints \ No newline at end of file diff --git a/src/gasflux/blueprints/config.py b/src/gasflux/blueprints/config.py new file mode 100644 index 0000000..3305639 --- /dev/null +++ b/src/gasflux/blueprints/config.py @@ -0,0 +1,67 @@ +""" +Configuration Blueprint +Provides configuration information and environment variables endpoints. +""" + +import os +from flask import Blueprint + +from ..app import Config +from ..shared import _format_response, log_performance, logger + +# Create blueprint +config_bp = Blueprint('config', __name__, url_prefix='/config') + + +@config_bp.route('', methods=['GET']) +@log_performance +def get_config(): + """Get current configuration (without sensitive information).""" + logger.debug("Configuration requested") + + try: + config_info = Config.to_dict() + + # Remove potentially sensitive information + safe_config = config_info.copy() + + data = { + "configuration": safe_config, + "environment_variables": { + "supported": [ + "GASFLUX_HOST", + "GASFLUX_PORT", + "GASFLUX_DEBUG", + "GASFLUX_UPLOAD_FOLDER", + "GASFLUX_OUTPUT_FOLDER", + "GASFLUX_MAX_CONTENT_LENGTH", + "GASFLUX_LOG_LEVEL", + "GASFLUX_LOG_FILE", + "GASFLUX_CORS_ORIGINS", + "GASFLUX_TASK_CLEANUP_INTERVAL", + "GASFLUX_MAX_TASK_AGE", + "GASFLUX_THREADS", + "GASFLUX_CONNECTION_LIMIT", + "GASFLUX_CHANNEL_TIMEOUT" + ], + "current_values": { + key: os.getenv(key, "not set") if key.startswith("GASFLUX_") else "internal" + for key in [ + "GASFLUX_HOST", "GASFLUX_PORT", "GASFLUX_DEBUG", + "GASFLUX_UPLOAD_FOLDER", "GASFLUX_OUTPUT_FOLDER", + "GASFLUX_MAX_CONTENT_LENGTH", "GASFLUX_LOG_LEVEL", + "GASFLUX_LOG_FILE", "GASFLUX_CORS_ORIGINS", + "GASFLUX_TASK_CLEANUP_INTERVAL", "GASFLUX_MAX_TASK_AGE", + "GASFLUX_THREADS", "GASFLUX_CONNECTION_LIMIT", + "GASFLUX_CHANNEL_TIMEOUT" + ] + } + } + } + return _format_response(200, "配置信息获取成功", data) + + except Exception as e: + logger.error(f"Failed to retrieve configuration: {str(e)}", exc_info=True) + return _format_response(500, "获取配置信息失败", { + "error_details": str(e) + }) \ No newline at end of file diff --git a/src/gasflux/blueprints/download.py b/src/gasflux/blueprints/download.py new file mode 100644 index 0000000..47dc3f3 --- /dev/null +++ b/src/gasflux/blueprints/download.py @@ -0,0 +1,68 @@ +""" +Download Blueprint +Handles file download endpoints. +""" + +from pathlib import Path +from flask import Blueprint, send_file, current_app + +from ..shared import _format_response, log_performance, logger + +# Create blueprint +download_bp = Blueprint('download', __name__, url_prefix='/download') + + +@download_bp.route('/') +@log_performance +def download_file(filename): + """Download a processed file.""" + from flask import request + + logger.info(f"Download request for file: {filename} from IP {request.remote_addr}") + + try: + # 支持两种路径格式: + # 1. 绝对路径(以 / 开头,如 /full/path/to/file) + # 2. 相对路径(task_id/filename) + if filename.startswith('/'): + # 绝对路径 - 直接使用 + file_path = Path(filename) + else: + # 相对路径 - 相对于 OUTPUT_FOLDER + output_folder = Path(current_app.config.get('OUTPUT_FOLDER') or '') + if not output_folder: + logger.error("OUTPUT_FOLDER not configured") + return _format_response(500, "服务器配置错误") + + # 解析 task_id/filename 格式 + parts = filename.split('/', 1) + if len(parts) != 2: + logger.warning(f"Invalid relative path format: {filename}") + return _format_response(400, "无效的文件路径") + + task_id, filename_part = parts + file_path = output_folder / task_id / filename_part + + # Security check - ensure file is within output folder + file_path = file_path.resolve() + output_folder = Path(current_app.config.get('OUTPUT_FOLDER') or '').resolve() + if output_folder and not str(file_path).startswith(str(output_folder)): + logger.warning(f"Security violation: Attempted to access file outside output folder: {filename}") + return _format_response(403, "访问被拒绝") + + if not file_path.exists(): + logger.warning(f"File not found: {filename}") + return _format_response(404, "文件未找到") + + if not file_path.is_file(): + logger.warning(f"Path is not a file: {filename}") + return _format_response(400, "不是文件") + + file_size = file_path.stat().st_size + logger.info(f"Serving file: {filename} ({file_size} bytes)") + + return send_file(file_path) + + except Exception as e: + logger.error(f"Error serving file {filename}: {str(e)}", exc_info=True) + return _format_response(500, "内部服务器错误") \ No newline at end of file diff --git a/src/gasflux/blueprints/health.py b/src/gasflux/blueprints/health.py new file mode 100644 index 0000000..d0213aa --- /dev/null +++ b/src/gasflux/blueprints/health.py @@ -0,0 +1,94 @@ +""" +Health Check Blueprint +Provides API health monitoring and system status endpoints. +""" + +import os +import time +import logging +from flask import Blueprint, request + +from ..app import Config, stats_collector +from ..shared import task_status, TASK_STATUS_PENDING, TASK_STATUS_PROCESSING +from ..shared import _format_response, log_performance, logger + +# Create blueprint +health_bp = Blueprint('health', __name__, url_prefix='/health') + + +@health_bp.route('', methods=['GET']) +@log_performance +def health_check(): + """API Health Check""" + logger.debug("Health check requested") + + try: + # Check storage accessibility + uploads_writable = os.access(Config.UPLOAD_FOLDER, os.W_OK) + outputs_writable = os.access(Config.OUTPUT_FOLDER, os.W_OK) + + # Check active tasks + active_tasks = len([t for t in task_status.values() if t.get("status") in [TASK_STATUS_PENDING, TASK_STATUS_PROCESSING]]) + + # Get basic stats for health check + stats_summary = stats_collector.get_summary() + + health_data = { + "status": "healthy", + "version": "1.0.0", + "timestamp": time.time(), + "uptime": stats_summary['summary']['uptime_formatted'], + "storage": { + "uploads_writable": uploads_writable, + "outputs_writable": outputs_writable + }, + "tasks": { + "active_count": active_tasks, + "total_tracked": len(task_status), + "total_processed": stats_summary['tasks']['total_completed'] + stats_summary['tasks']['total_failed'], + "success_rate_percent": stats_summary['tasks']['success_rate_percent'] + }, + "performance": { + "requests_per_second": stats_summary['summary']['requests_per_second'], + "avg_response_time_ms": stats_summary['performance']['avg_response_time_ms'], + "error_rate_percent": stats_summary['summary']['error_rate_percent'] + } + } + + # Determine health status based on metrics + is_healthy = True + issues = [] + + if not uploads_writable: + issues.append("上传文件夹不可写") + is_healthy = False + if not outputs_writable: + issues.append("输出文件夹不可写") + is_healthy = False + if active_tasks > 20: # High load threshold + issues.append(f"活跃任务数量过多 ({active_tasks})") + if stats_summary['summary']['error_rate_percent'] > 10: # High error rate + issues.append(f"错误率过高 ({stats_summary['summary']['error_rate_percent']:.1f}%)") + is_healthy = False + + health_data["status"] = "healthy" if is_healthy else "degraded" + if issues: + health_data["issues"] = issues + + # Log warnings for potential issues + for issue in issues: + logger.warning(f"Health check issue: {issue}") + + status_level = logging.DEBUG if is_healthy else logging.WARNING + logger.log(status_level, f"Health check: {health_data['status']} (active tasks: {active_tasks})") + + status_code = 200 if is_healthy else 503 # 503 Service Unavailable for degraded + return _format_response(status_code, "健康检查完成" if is_healthy else "服务不可用", health_data) + + except Exception as e: + logger.error(f"Health check failed: {str(e)}", exc_info=True) + return _format_response(500, "健康检查失败", { + "status": "unhealthy", + "error": str(e), + "timestamp": time.time() + }) \ No newline at end of file diff --git a/src/gasflux/blueprints/reports.py b/src/gasflux/blueprints/reports.py new file mode 100644 index 0000000..e80201e --- /dev/null +++ b/src/gasflux/blueprints/reports.py @@ -0,0 +1,192 @@ +""" +Reports Blueprint +Provides report listing and management endpoints. +""" + +import time +from pathlib import Path +from flask import Blueprint, request, current_app + + +from ..shared import _get_file_type, _format_response, log_performance, logger, task_status +from ..app import Config + +# Create blueprint +reports_bp = Blueprint('reports', __name__, url_prefix='/reports') + + +@reports_bp.route('', methods=['GET']) +@log_performance +def list_reports(): + """List all generated reports with pagination and filtering.""" + logger.debug("Reports list requested") + + try: + # Parse query parameters + try: + page = int(request.args.get('page', 1)) + if page < 1: + return _format_response(400, "Invalid parameter: page must be >= 1") + except (ValueError, TypeError): + return _format_response(400, "Invalid parameter: page must be a valid integer") + + try: + per_page = int(request.args.get('per_page', 20)) + if per_page < 1 or per_page > 100: + return _format_response(400, "Invalid parameter: per_page must be between 1 and 100") + except (ValueError, TypeError): + return _format_response(400, "Invalid parameter: per_page must be a valid integer") + + sort_by = request.args.get('sort_by', 'created_at') + sort_order = request.args.get('sort_order', 'desc') + status_filter = request.args.get('status', None) # 'completed', 'failed', or None for all + + # Validate sort parameters + valid_sort_fields = ['created_at', 'task_id', 'file_size', 'processing_time'] + if sort_by not in valid_sort_fields: + return _format_response(400, f"Invalid parameter: sort_by must be one of {valid_sort_fields}") + if sort_order not in ['asc', 'desc']: + return _format_response(400, "Invalid parameter: sort_order must be 'asc' or 'desc'") + + # Validate status filter + valid_statuses = ['completed', 'failed', None] + if status_filter is not None and status_filter not in ['completed', 'failed']: + return _format_response(400, "Invalid parameter: status must be 'completed', 'failed', or not specified") + + # 兼容缺省:优先 app.config,其次 Config.OUTPUT_FOLDER + output_root = current_app.config.get('OUTPUT_FOLDER') or getattr(Config, 'OUTPUT_FOLDER', None) + if not output_root: + return _format_response(200, "报告列表获取成功", { + 'reports': [], + 'pagination': {'page': page, 'per_page': per_page, 'total_reports': 0, 'total_pages': 0, 'has_next': False, 'has_prev': False}, + 'filters': {'sort_by': sort_by, 'sort_order': sort_order, 'status': status_filter} + }) + + output_folder = Path(output_root) + reports = [] + + # Scan all task directories + if output_folder.exists(): + for task_dir in output_folder.iterdir(): + if not task_dir.is_dir(): + continue + task_id = task_dir.name + + # Get task information from global task_status + task_info = task_status.get(task_id, {}) + task_status_value = task_info.get('status') + + # Log task status for debugging + logger.debug(f"Task {task_id}: status from memory={task_status_value}, info={task_info}") + + # 直接扫描平铺文件 + files = [p for p in task_dir.iterdir() if p.is_file()] + if not files: + # 按需应用状态过滤 + if status_filter: + continue + reports.append({ + 'task_id': task_id, + 'report_name': "N/A", + 'status': 'failed', + 'created_at': task_dir.stat().st_mtime, + 'file_count': 0, + 'total_size': 0, + 'processing_time_seconds': None, + 'main_report': None, + 'all_files': [], + 'run_directory': f'{task_id}' + }) + continue + + # 识别主报告与统计 + total_size = sum(f.stat().st_size for f in files) + created_at = max(f.stat().st_mtime for f in files) if files else task_dir.stat().st_mtime + + def file_entry(p): + return { + 'name': p.name, + 'size': p.stat().st_size, + 'type': _get_file_type(p.name), + # 使用相对路径下载,清晰且安全 + 'download_url': f"/download/{task_id}/{p.name}" + } + + all_files = [file_entry(f) for f in files] + # 优先 CO2_report,其次任意 *_report_*.html + report_html = None + for f in files: + if f.name.endswith('_report_') and f.suffix == '.html': + report_html = file_entry(f) + break + if not report_html: + for f in files: + if f.name.endswith('.html'): + report_html = file_entry(f) + break + + # 任务状态:若有报告或关键产物则视为 completed + has_outputs = any(f.name.startswith(('config_', 'output_vars_', 'processed_data_', 'CO2_report_')) for f in files) + task_status_value = 'completed' if has_outputs else 'unknown' + if status_filter and task_status_value != status_filter: + continue + + # Create report entry + report_entry = { + 'task_id': task_id, + 'report_name': task_id, + 'status': task_status_value, + 'created_at': created_at, + 'file_count': len(files), + 'total_size': total_size, + 'processing_time_seconds': None, + 'main_report': report_html, + 'all_files': all_files, + 'run_directory': f'{task_id}' + } + + reports.append(report_entry) + + # Sort reports + reverse_order = sort_order == 'desc' + if sort_by == 'created_at': + reports.sort(key=lambda x: x['created_at'], reverse=reverse_order) + elif sort_by == 'task_id': + reports.sort(key=lambda x: x['task_id'], reverse=reverse_order) + elif sort_by == 'file_size': + reports.sort(key=lambda x: x['total_size'], reverse=reverse_order) + elif sort_by == 'processing_time': + reports.sort(key=lambda x: x['processing_time_seconds'] or 0, reverse=reverse_order) + + # Paginate results + total_reports = len(reports) + start_idx = (page - 1) * per_page + end_idx = start_idx + per_page + paginated_reports = reports[start_idx:end_idx] + + # Calculate pagination metadata + total_pages = (total_reports + per_page - 1) // per_page + + response_data = { + 'reports': paginated_reports, + 'pagination': { + 'page': page, + 'per_page': per_page, + 'total_reports': total_reports, + 'total_pages': total_pages, + 'has_next': page < total_pages, + 'has_prev': page > 1 + }, + 'filters': { + 'sort_by': sort_by, + 'sort_order': sort_order, + 'status': status_filter + } + } + + logger.info(f"Returning {len(paginated_reports)} reports (page {page}/{total_pages})") + return _format_response(200, "报告列表获取成功", response_data) + + except Exception as e: + logger.error(f"Error listing reports: {str(e)}", exc_info=True) + return _format_response(500, "内部服务器错误") \ No newline at end of file diff --git a/src/gasflux/blueprints/stats.py b/src/gasflux/blueprints/stats.py new file mode 100644 index 0000000..fc0d1a2 --- /dev/null +++ b/src/gasflux/blueprints/stats.py @@ -0,0 +1,93 @@ +""" +Statistics Blueprint +Provides API statistics and monitoring endpoints. +""" + +import time +from flask import Blueprint, current_app + + +from ..shared import _format_response, log_performance, logger,stats_collector, task_status + +# Create blueprint +stats_bp = Blueprint('stats', __name__, url_prefix='/stats') + + +@stats_bp.route('', methods=['GET']) +@log_performance +def get_stats(): + """Get detailed API statistics and monitoring data.""" + logger.debug("Statistics requested") + + try: + # Get detailed statistics + stats_data = stats_collector.get_summary() + + # Add current system information + try: + import psutil + memory = psutil.virtual_memory() + disk = psutil.disk_usage(str(current_app.config['OUTPUT_FOLDER'])) + + stats_data['system'] = { + 'memory_usage_percent': memory.percent, + 'memory_used_gb': round(memory.used / (1024**3), 2), + 'memory_total_gb': round(memory.total / (1024**3), 2), + 'disk_usage_percent': disk.percent, + 'disk_used_gb': round(disk.used / (1024**3), 2), + 'disk_total_gb': round(disk.total / (1024**3), 2) + } + except ImportError: + # psutil not available + stats_data['system'] = { + 'note': 'System metrics unavailable - install psutil for detailed monitoring' + } + except Exception as e: + logger.warning(f"Failed to collect system metrics: {e}") + stats_data['system'] = {'error': str(e)} + + # Add recent task information + recent_tasks = [] + current_time = time.time() + for task_id, task_info in list(task_status.items())[-20:]: # Last 20 tasks + age = current_time - task_info.get('updated_at', 0) + recent_tasks.append({ + 'task_id': task_id, + 'status': task_info.get('status'), + 'age_seconds': round(age, 1), + 'message': task_info.get('message', '')[:100] # Truncate long messages + }) + + stats_data['recent_tasks'] = recent_tasks + + return _format_response(200, "统计信息获取成功", stats_data) + + except Exception as e: + logger.error(f"Failed to retrieve statistics: {str(e)}", exc_info=True) + return _format_response(500, "获取统计信息失败", { + "error_details": str(e) + }) + + +@stats_bp.route('/reset', methods=['POST']) +@log_performance +def reset_stats(): + """Reset API statistics (admin function).""" + logger.warning("Statistics reset requested") + + try: + # Reset statistics + stats_collector.reset_stats() + + # Log the reset + logger.info("API statistics have been reset") + + return _format_response(200, "统计信息重置成功", { + "timestamp": time.time() + }) + + except Exception as e: + logger.error(f"Failed to reset statistics: {str(e)}", exc_info=True) + return _format_response(500, "重置统计信息失败", { + "error_details": str(e) + }) \ No newline at end of file diff --git a/src/gasflux/blueprints/task_pool.py b/src/gasflux/blueprints/task_pool.py new file mode 100644 index 0000000..7c39e4b --- /dev/null +++ b/src/gasflux/blueprints/task_pool.py @@ -0,0 +1,228 @@ +""" +Task Pool Blueprint +Handles task pool management endpoints: listing tasks with pagination, pool statistics. +""" + +from flask import Blueprint, request +from pathlib import Path + +from ..shared import ( + get_task_list, + get_task_pool_stats, + _format_response, + log_performance, + logger, + task_status, + TASK_STATUS_PENDING, + TASK_STATUS_PROCESSING, + TASK_STATUS_COMPLETED, + TASK_STATUS_FAILED +) + +# Create blueprint +task_pool_bp = Blueprint('task_pool', __name__, url_prefix='/tasks') + + +def _build_simple_downloads_from_results(results: list[dict]) -> dict: + """ + Build direct download shortcuts for common files, based on task results. + This is intentionally minimal and frontend-friendly. + """ + downloads: dict = {} + + def set_once(key: str, url: str): + if key not in downloads and url: + downloads[key] = url + + for item in results or []: + if not isinstance(item, dict): + continue + rel_path = item.get('rel_path') + if not rel_path: + continue + + name_l = (item.get('name') or '').lower() + url = f"/download/{rel_path}" + + if name_l.endswith('.xlsx'): + set_once('data_xlsx', url) + elif name_l.endswith('.xls'): + set_once('data_xls', url) + elif name_l.endswith('ch4_report.html'): + set_once('report_ch4', url) + elif name_l.endswith('co2_report.html'): + set_once('report_co2', url) + elif name_l.endswith(('.yaml', '.yml')): + set_once('config', url) + elif name_l.endswith('.json') and 'output_vars' in name_l: + set_once('metadata', url) + elif name_l.endswith('.html'): + # fallback: any html report + set_once('report_html', url) + + return downloads + + +def _lean_task_summary(task_summary: dict) -> dict: + """Return a minimal task representation for frontend consumption.""" + task_id = task_summary.get('task_id') + status = task_summary.get('status') + + lean = { + 'task_id': task_id, + 'status': status, + 'message': task_summary.get('message'), + 'updated_at': task_summary.get('updated_at'), + } + + if status == TASK_STATUS_COMPLETED and task_id: + full_task_info = task_status.get(task_id, {}) + results = full_task_info.get('results', []) or [] + downloads = _build_simple_downloads_from_results(results) + if downloads: + lean['downloads'] = downloads + + return lean + + +@task_pool_bp.route('', methods=['GET']) +@log_performance +def list_tasks(): + """Get paginated list of tasks with optional filtering.""" + logger.debug(f"Task list request from IP {request.remote_addr}") + + try: + # Parse query parameters + status_filter = request.args.get('status') + if status_filter: + # Support comma-separated status values + status_filter = status_filter.split(',') + + page = int(request.args.get('page', 1)) + page_size = int(request.args.get('page_size', 20)) + sort_by = request.args.get('sort_by', 'updated_at') + sort_order = request.args.get('sort_order', 'desc') + + # Validate parameters + if page < 1: + return _format_response(400, "页码必须大于0") + + if page_size < 1 or page_size > 100: + return _format_response(400, "每页数量必须在1-100之间") + + valid_sort_fields = ['created_at', 'updated_at', 'status'] + if sort_by not in valid_sort_fields: + return _format_response(400, f"排序字段必须是以下之一: {', '.join(valid_sort_fields)}") + + if sort_order.lower() not in ['asc', 'desc']: + return _format_response(400, "排序顺序必须是 'asc' 或 'desc'") + + # Get task list + result = get_task_list( + status_filter=status_filter, + page=page, + page_size=page_size, + sort_by=sort_by, + sort_order=sort_order, + cleanup=False + ) + + # Slim response: only task status + downloads (completed only) + result['tasks'] = [_lean_task_summary(t) for t in result.get('tasks', [])] + + logger.debug(f"Returning {len(result['tasks'])} tasks (page {page} of {result['total_pages']})") + + return _format_response(200, "任务列表查询成功", result) + + except ValueError as e: + logger.warning(f"Invalid parameter in task list request: {str(e)}") + return _format_response(400, "参数格式错误") + except Exception as e: + logger.error(f"Error listing tasks: {str(e)}", exc_info=True) + return _format_response(500, "内部服务器错误") + + +@task_pool_bp.route('/stats', methods=['GET']) +@log_performance +def get_pool_stats(): + """Get task pool statistics.""" + logger.debug(f"Task pool stats request from IP {request.remote_addr}") + + try: + stats = get_task_pool_stats() + + logger.debug(f"Pool stats: {stats['total_tasks']} total tasks, " + f"{stats['active_tasks']} active, {stats['queued_tasks']} queued") + + return _format_response(200, "任务池统计信息查询成功", stats) + + except Exception as e: + logger.error(f"Error getting pool stats: {str(e)}", exc_info=True) + return _format_response(500, "内部服务器错误") + + +@task_pool_bp.route('/active', methods=['GET']) +@log_performance +def get_active_tasks(): + """Get list of currently active (processing) tasks.""" + logger.debug(f"Active tasks request from IP {request.remote_addr}") + + try: + # Get all processing tasks, no pagination needed for active tasks + result = get_task_list( + status_filter=TASK_STATUS_PROCESSING, + page=1, + page_size=1000, # Large page size to get all active tasks + sort_by='updated_at', + sort_order='asc', # Oldest first + cleanup=False + ) + + active_tasks = result['tasks'] + + active_tasks = [_lean_task_summary(t) for t in active_tasks] + + logger.debug(f"Returning {len(active_tasks)} active tasks") + + return _format_response(200, "活跃任务查询成功", { + 'active_tasks': active_tasks, + 'count': len(active_tasks) + }) + + except Exception as e: + logger.error(f"Error getting active tasks: {str(e)}", exc_info=True) + return _format_response(500, "内部服务器错误") + + +@task_pool_bp.route('/queue', methods=['GET']) +@log_performance +def get_queued_tasks(): + """Get list of queued (pending) tasks.""" + logger.debug(f"Queued tasks request from IP {request.remote_addr}") + + try: + # Get all pending tasks, sorted by creation time + result = get_task_list( + status_filter=TASK_STATUS_PENDING, + page=1, + page_size=1000, # Large page size to get all queued tasks + sort_by='created_at', + sort_order='asc', # Oldest first (FIFO) + cleanup=False + ) + + queued_tasks = result['tasks'] + + queued_tasks = [_lean_task_summary(t) for t in queued_tasks] + + logger.debug(f"Returning {len(queued_tasks)} queued tasks") + + return _format_response(200, "队列任务查询成功", { + 'queued_tasks': queued_tasks, + 'count': len(queued_tasks), + 'queue_position_info': "任务按创建时间排序,较早的任务优先处理" + }) + + except Exception as e: + logger.error(f"Error getting queued tasks: {str(e)}", exc_info=True) + return _format_response(500, "内部服务器错误") \ No newline at end of file diff --git a/src/gasflux/blueprints/tasks.py b/src/gasflux/blueprints/tasks.py new file mode 100644 index 0000000..946a6be --- /dev/null +++ b/src/gasflux/blueprints/tasks.py @@ -0,0 +1,220 @@ +""" +Tasks Blueprint +Handles task management endpoints: status query, update, and deletion. +""" + +from flask import Blueprint, request + +from ..shared import ( + get_task_status, + update_task_status, + cleanup_old_tasks, + _format_response, + log_performance, + logger, + task_status, + _build_simple_downloads_from_results, + TASK_STATUS_COMPLETED, + TASK_STATUS_FAILED, + TASK_STATUS_PROCESSING, + TASK_STATUS_PENDING, +) + +# Create blueprint +tasks_bp = Blueprint('tasks', __name__, url_prefix='/task') + + +@tasks_bp.route('/', methods=['GET']) +@log_performance +def get_task_status_endpoint(task_id): + """Get the status of a processing task.""" + logger.debug(f"Status request for task {task_id}") + + try: + # Note: cleanup_old_tasks() is disabled for individual task queries + # to preserve historical task data for task pool management + # cleanup_old_tasks() + + task_info = get_task_status(task_id) + if task_info.get("status") == "not_found": + logger.warning(f"Status request for non-existent task {task_id} from IP {request.remote_addr}") + return _format_response(404, "任务未找到") + + data = { + "task_id": task_id, + "status": task_info["status"], + "message": task_info.get("message", ""), + "updated_at": task_info.get("updated_at", 0) + } + + if task_info["status"] == TASK_STATUS_COMPLETED: + results = task_info.get("results", []) + data["results"] = results + # Add direct download shortcuts for frontend (if available or can be derived) + downloads = task_info.get("downloads") or _build_simple_downloads_from_results(results) + if downloads: + data["downloads"] = downloads + logger.debug(f"Task {task_id}: Returning {len(results)} completed results") + return _format_response(200, "任务查询成功", data) + elif task_info["status"] == TASK_STATUS_FAILED: + error_msg = task_info.get("error", "未知错误") + data["error"] = error_msg + logger.warning(f"Task {task_id}: Returning failure status - {error_msg}") + # Return 200 for failed tasks since this is expected behavior, not an HTTP error + return _format_response(200, "任务处理失败", data) + else: + # Processing or pending status + return _format_response(200, "任务查询成功", data) + + except Exception as e: + logger.error(f"Error retrieving status for task {task_id}: {str(e)}", exc_info=True) + return _format_response(500, "内部服务器错误") + + +@tasks_bp.route('/', methods=['PUT']) +@log_performance +def update_task(task_id): + """Update task status and information.""" + logger.info(f"Task update request for {task_id} from IP {request.remote_addr}") + + try: + # Validate task exists + task_info = get_task_status(task_id) + if task_info.get("status") == "not_found": + logger.warning(f"Update request for non-existent task {task_id}") + return _format_response(404, "任务未找到") + + # Parse request data + data = request.get_json() + if not data: + return _format_response(400, "请求体必须是 JSON 格式") + + # Validate allowed fields + allowed_fields = ['status', 'message', 'priority'] + valid_statuses = [TASK_STATUS_PENDING, TASK_STATUS_PROCESSING, + TASK_STATUS_COMPLETED, TASK_STATUS_FAILED] + + updates = {} + for field in allowed_fields: + if field in data: + if field == 'status' and data[field] not in valid_statuses: + return _format_response(400, f"无效状态。必须是以下之一: {', '.join(valid_statuses)}") + updates[field] = data[field] + + if not updates: + return _format_response(400, "没有有效的字段可更新") + + # Update task status + current_status = task_info.get('status') + new_status = updates.get('status', current_status) + message = updates.get('message', task_info.get('message')) + + # Special handling for status changes + if 'status' in updates: + if new_status == TASK_STATUS_COMPLETED: + # For completed tasks, we might want to add fake results if none exist + if not task_info.get('results'): + logger.warning(f"Marking task {task_id} as completed but no results found") + elif new_status == TASK_STATUS_FAILED: + # For failed tasks, error message is required + error_msg = updates.get('message', 'Task manually marked as failed') + update_task_status(task_id, new_status, error_msg) + else: + update_task_status(task_id, new_status, message) + else: + # Only update message + update_task_status(task_id, current_status, message) + + # Update priority if provided + if 'priority' in updates: + task_status[task_id]['priority'] = updates['priority'] + + # Get updated task info + updated_task = get_task_status(task_id) + + data = { + "task_id": task_id, + "status": "updated", + "task_info": { + "status": updated_task.get("status"), + "message": updated_task.get("message"), + "updated_at": updated_task.get("updated_at", 0), + "priority": updated_task.get("priority", "normal") + } + } + + logger.info(f"Task {task_id} updated: {updates}") + return _format_response(200, "任务更新成功", data) + + except Exception as e: + logger.error(f"Error updating task {task_id}: {str(e)}", exc_info=True) + return _format_response(500, "内部服务器错误") + + +@tasks_bp.route('/', methods=['DELETE']) +@log_performance +def delete_task(task_id): + """Delete a task and its associated files.""" + logger.info(f"Task deletion request for {task_id} from IP {request.remote_addr}") + + try: + # Validate task exists + task_info = get_task_status(task_id) + if task_info.get("status") == "not_found": + logger.warning(f"Delete request for non-existent task {task_id}") + return _format_response(404, "任务未找到") + + # Check if task is currently processing + if task_info.get("status") in [TASK_STATUS_PROCESSING, TASK_STATUS_PENDING]: + return _format_response(409, "无法删除当前正在处理或等待处理的任务", { + "task_status": task_info.get("status") + }) + + # Delete associated files + from pathlib import Path + from flask import current_app + import shutil + + output_folder = Path(current_app.config['OUTPUT_FOLDER']) + task_folder = output_folder / task_id + + files_deleted = 0 + total_size_deleted = 0 + + if task_folder.exists(): + try: + # Calculate total size before deletion + for file_path in task_folder.rglob('*'): + if file_path.is_file(): + total_size_deleted += file_path.stat().st_size + + # Delete the entire task folder + shutil.rmtree(task_folder) + files_deleted = 1 # Count as one folder deleted + logger.info(f"Deleted task folder: {task_folder}") + + except Exception as e: + logger.error(f"Error deleting task folder {task_folder}: {str(e)}") + return _format_response(500, f"删除任务文件失败: {str(e)}") + + # Remove from task status tracking + if task_id in task_status: + del task_status[task_id] + logger.info(f"Removed task {task_id} from status tracking") + + data = { + "task_id": task_id, + "status": "deleted", + "details": { + "folders_deleted": files_deleted, + "total_size_deleted": total_size_deleted, + "task_status": task_info.get("status") + } + } + + logger.info(f"Task {task_id} deleted successfully") + return _format_response(200, "任务及相关文件删除成功", data) + + except Exception as e: + logger.error(f"Error deleting task {task_id}: {str(e)}", exc_info=True) + return _format_response(500, "内部服务器错误") \ No newline at end of file diff --git a/src/gasflux/blueprints/upload.py b/src/gasflux/blueprints/upload.py new file mode 100644 index 0000000..5749c8b --- /dev/null +++ b/src/gasflux/blueprints/upload.py @@ -0,0 +1,134 @@ +""" +Upload Blueprint +Handles file upload and processing initiation endpoints. +""" + +import uuid +import threading +from pathlib import Path +from flask import Blueprint, request, current_app +from werkzeug.utils import secure_filename +import yaml +from io import BytesIO + + +from ..app import process_data_async +from ..shared import _format_response, log_performance, logger, ALLOWED_DATA_EXTENSIONS, ALLOWED_CONFIG_EXTENSIONS, allowed_file,update_task_status, TASK_STATUS_PENDING, TASK_STATUS_FAILED + +# Create blueprint +upload_bp = Blueprint('upload', __name__, url_prefix='/upload') + + +@upload_bp.route('', methods=['POST']) +@log_performance +def upload_file(): + logger.info("Received upload request") + logger.info(f"Request content length: {request.content_length} bytes") + + # Check if data file is present + if 'file' not in request.files: + logger.warning("Upload failed: No data file part in request") + return _format_response(400, "未找到数据文件部分") + + data_file = request.files['file'] + config_file = request.files.get('config') + + # Log file details + logger.info(f"Data file: {data_file.filename} (size: {getattr(data_file, 'content_length', 'unknown')} bytes)") + if config_file: + logger.info(f"Config file: {config_file.filename} (size: {getattr(config_file, 'content_length', 'unknown')} bytes)") + else: + logger.info("No custom config file provided, will use default") + + if data_file.filename == '': + logger.warning("Upload failed: No data file selected (empty filename)") + return _format_response(400, "未选择数据文件") + + if not allowed_file(data_file.filename, ALLOWED_DATA_EXTENSIONS): + logger.warning(f"Upload failed: Invalid data file type {data_file.filename} - allowed: {ALLOWED_DATA_EXTENSIONS}") + return _format_response(400, "无效的数据文件类型。只允许 .xlsx 和 .xls 格式。") + + # Generate unique job ID + job_id = str(uuid.uuid4()) + logger.info(f"Generated job ID: {job_id}") + + # 1) Parse config content (parse in memory without saving first) + if config_file and config_file.filename != '': + if not allowed_file(config_file.filename, ALLOWED_CONFIG_EXTENSIONS): + return _format_response(400, "无效的配置文件类型。只允许 .yaml 和 .yml 格式。") + config_file.stream.seek(0) + config_text = config_file.read().decode('utf-8', errors='ignore') + try: + active_config = yaml.safe_load(config_text) + except Exception: + return _format_response(400, "配置文件解析失败") + # Reset stream for saving + config_file.stream = BytesIO(config_text.encode('utf-8')) + else: + default_config_path = Path(__file__).parent.parent / "gasflux_config.yaml" + with open(default_config_path, 'r', encoding='utf-8') as f: + active_config = yaml.safe_load(f) + + # 2) Create job directories based on config['output_dir'] + output_base = Path(active_config['output_dir']).expanduser() + job_upload_dir = output_base / "uploads" / job_id + job_output_dir = output_base / "outputs" / job_id + job_upload_dir.mkdir(parents=True, exist_ok=True) + job_output_dir.mkdir(parents=True, exist_ok=True) + logger.info(f"Job {job_id}: Created directories - Upload: {job_upload_dir}, Output: {job_output_dir}") + + # 3) Save data file to job_upload_dir + data_filename = secure_filename(data_file.filename) + data_path = job_upload_dir / data_filename + try: + data_file.seek(0) + data_file.save(str(data_path)) + logger.info(f"Job {job_id}: Data file saved successfully - Path: {data_path}") + except Exception as e: + logger.error(f"Job {job_id}: Failed to save data file {data_filename}: {str(e)}") + return _format_response(500, "保存数据文件失败") + + # 4) Save config file to job_upload_dir + if config_file and config_file.filename != '': + config_filename = secure_filename(config_file.filename) + config_path = job_upload_dir / config_filename + try: + config_file.seek(0) + config_file.save(str(config_path)) + active_config_path = config_path + logger.info(f"Job {job_id}: Custom config saved successfully - Path: {config_path}") + except Exception as e: + logger.error(f"Job {job_id}: Failed to save config file {config_filename}: {str(e)}") + return _format_response(500, "保存配置文件失败") + else: + # Copy default config for record keeping + config_path = job_upload_dir / "config.yaml" + with open(config_path, 'w', encoding='utf-8') as f: + yaml.safe_dump(active_config, f, allow_unicode=True) + active_config_path = config_path + logger.info(f"Job {job_id}: Default config saved for record - Path: {config_path}") + + # Initialize task status + update_task_status(job_id, TASK_STATUS_PENDING, "Task queued for processing") + logger.info(f"Job {job_id}: Task status initialized as PENDING") + + # Start background processing + try: + thread = threading.Thread( + target=process_data_async, + args=(job_id, data_path, active_config_path, job_output_dir) + ) + thread.daemon = True + thread.start() + logger.info(f"Job {job_id}: Background processing thread started successfully") + except Exception as e: + logger.error(f"Job {job_id}: Failed to start background processing thread: {str(e)}") + update_task_status(job_id, TASK_STATUS_FAILED, error=str(e)) + return _format_response(500, "启动处理失败") + + logger.info(f"Job {job_id}: Upload process completed successfully, returning job ID to client") + return _format_response(202, "任务已接受并加入处理队列", { + "status": "accepted", + "job_id": job_id, + "task_status_url": f"/task/{job_id}" + }) \ No newline at end of file diff --git a/src/gasflux/blueprints/web.py b/src/gasflux/blueprints/web.py new file mode 100644 index 0000000..18dcc6d --- /dev/null +++ b/src/gasflux/blueprints/web.py @@ -0,0 +1,233 @@ +""" +Web Blueprint +Provides web interface for the GasFlux API. +""" + +import time +from pathlib import Path +from flask import Blueprint, render_template_string, current_app + +from ..shared import log_performance, logger +from ..app import Config + +# Create blueprint +web_bp = Blueprint('web', __name__) + + +@web_bp.route('/') +@log_performance +def index(): + logger.debug("Index page requested") + + # 递归查找所有生成的 HTML 报告 + start_time = time.time() + all_reports = [] + # 优先用 app.config 中的目录,其次回退到 Config.OUTPUT_FOLDER;都不存在则不列出文件 + output_root = current_app.config.get('OUTPUT_FOLDER') or getattr(Config, 'OUTPUT_FOLDER', None) + if not output_root: + output_path = None + else: + output_path = Path(output_root) + + if output_path and output_path.exists(): + try: + for file in output_path.rglob("*.html"): + # 获取相对于 OUTPUT_FOLDER 的相对路径,用于下载链接 + rel_path = file.relative_to(output_path).as_posix() + all_reports.append(rel_path) + + scan_duration = time.time() - start_time + logger.debug(f"Report scan completed in {scan_duration:.3f}s - found {len(all_reports)} HTML reports") + + except Exception as e: + logger.error(f"Error scanning for reports: {str(e)}") + all_reports = [] + else: + logger.debug("No output directory configured yet, skipping report scan") + all_reports = [] + + return render_template_string(''' + + + + GasFlux Web API + + + +
+

GasFlux Web API 控制台

+ +
+

新建处理任务

+
+
+ + +
+
+ + +
+ +
+ +
+ +
+

已生成的报告

+
+ {% for report in reports %} +
+
+ {{ report.split('/')[-1] }} + 任务 ID: {{ report.split('/')[0] }} +
+ 下载 +
+ {% else %} +

暂无已生成的报告。

+ {% endfor %} +
+
+ +
+

API 调用指南 (开发者)

+

健康检查: GET /health

+

上传分析: POST /upload

+

查询任务状态: GET /task/<task_id>

+

参数: file (Excel), config (YAML, 可选)

+

示例: curl -X POST -F "file=@data.xlsx" http://localhost:5000/upload

+

状态查询: curl http://localhost:5000/task/your-task-id

+
+ + +
+ + + ''', reports=all_reports) \ No newline at end of file diff --git a/src/gasflux/data_processor.py b/src/gasflux/data_processor.py index 15e8c63..528b52f 100644 --- a/src/gasflux/data_processor.py +++ b/src/gasflux/data_processor.py @@ -29,13 +29,14 @@ from datetime import datetime import sys import os from collections import Counter +import yaml try: from tqdm import tqdm HAS_TQDM = True except ImportError: HAS_TQDM = False - print("⚠️ 未安装tqdm库,将不显示进度条。如需进度条,请运行: pip install tqdm") + print("WARNING: 未安装tqdm库,将不显示进度条。如需进度条,请运行: pip install tqdm") def create_height_bins(heights, bin_size=2.0): @@ -82,7 +83,7 @@ def create_height_bins(heights, bin_size=2.0): # 导入qiya模块 try: from .qiya import get_pressure_at_location - print("✅ 成功导入qiya模块") + except ImportError as e: print(f"❌ 导入qiya模块失败: {e}") print("请确保GasFlux包结构完整") @@ -104,13 +105,13 @@ def load_excel_data(file_path): # 读取Excel文件 df = pd.read_excel(file_path) - print(f"✅ 成功读取数据:{len(df)} 行,{len(df.columns)} 列") + print(f"SUCCESS: Successfully loaded data: {len(df)} rows, {len(df.columns)} columns") print(f"列名:{list(df.columns)}") return df except Exception as e: - print(f"❌ 读取文件失败: {e}") + print(f"ERROR: Failed to read file: {e}") sys.exit(1) @@ -132,11 +133,11 @@ def remove_columns(df, columns_to_remove): missing_columns = [col for col in columns_to_remove if col not in df.columns] if missing_columns: - print(f"⚠️ 以下列不存在(跳过): {missing_columns}") + print(f"以下列不存在(跳过): {missing_columns}") if existing_columns: df = df.drop(columns=existing_columns) - print(f"✅ 已删除 {len(existing_columns)} 列") + print(f"已删除 {len(existing_columns)} 列") return df @@ -158,7 +159,7 @@ def extract_hour_from_filename(filename): if match: return match.group(1) else: - print(f"⚠️ 无法从文件名 '{filename}' 中提取小时信息,使用默认值 '00'") + print(f"无法从文件名 '{filename}' 中提取小时信息,使用默认值 '00'") return "00" @@ -181,7 +182,7 @@ def fix_time_column(df, filename): # 检查时间列是否存在 if '时间' not in df.columns: - print("❌ 未找到 '时间' 列") + print("未找到 '时间' 列") return df # 修正时间格式 @@ -231,18 +232,18 @@ def convert_coordinates(df): """ print("转换经纬度坐标...") - if '经度' in df.columns: - original_lon = df['经度'].head(3).tolist() - df['经度'] = df['经度'] / 1e7 - converted_lon = df['经度'].head(3).tolist() + if 'stGPSPositionX' in df.columns: + original_lon = df['stGPSPositionX'].head(3).tolist() + df['stGPSPositionX'] = df['stGPSPositionX'] / 1e7 + converted_lon = df['stGPSPositionX'].head(3).tolist() print("经度转换示例:") for orig, conv in zip(original_lon, converted_lon): print(".6f") - if '纬度' in df.columns: - original_lat = df['纬度'].head(3).tolist() - df['纬度'] = df['纬度'] / 1e7 - converted_lat = df['纬度'].head(3).tolist() + if 'stGPSPositionY' in df.columns: + original_lat = df['stGPSPositionY'].head(3).tolist() + df['stGPSPositionY'] = df['stGPSPositionY'] / 1e7 + converted_lat = df['stGPSPositionY'].head(3).tolist() print("纬度转换示例:") for orig, conv in zip(original_lat, converted_lat): print(".6f") @@ -265,42 +266,54 @@ def calculate_pressure(df, max_samples=None, height_tolerance=10.0, height_bin_s """ print("计算气压数据...") - # 检查必要列是否存在 - required_cols = ['日期', '时间', '经度', '纬度', '融合高程'] + # 检查必要列是否存在(支持原始列名和新列名) + # 原始数据中的列名 + original_cols = ['qStrDate', 'qStrTime', 'stGPSPositionX', 'stGPSPositionY', 'fAltitudeFused'] + # 坐标转换后的列名(经纬度已被除以1e7) + converted_cols = ['qStrDate', 'qStrTime', 'stGPSPositionX', 'stGPSPositionY', 'fAltitudeFused'] + + # 优先使用转换后的列名(如果存在),否则使用原始列名 + date_col = 'qStrDate' if 'qStrDate' in df.columns else '日期' + time_col = 'qStrTime' if 'qStrTime' in df.columns else '时间' + lon_col = 'stGPSPositionX' if 'stGPSPositionX' in df.columns else '经度' + lat_col = 'stGPSPositionY' if 'stGPSPositionY' in df.columns else '纬度' + height_col = 'fAltitudeFused' if 'fAltitudeFused' in df.columns else '融合高程' + + required_cols = [date_col, time_col, lon_col, lat_col, height_col] missing_cols = [col for col in required_cols if col not in df.columns] if missing_cols: - print(f"❌ 缺少必要列: {missing_cols}") + print(f"缺少必要列: {missing_cols}") return df # 检查高度变化范围 - height_min = df['融合高程'].min() - height_max = df['融合高程'].max() + height_min = df[height_col].min() + height_max = df[height_col].max() height_range = height_max - height_min - print(f"🏔️ 高度范围: {height_min:.1f} - {height_max:.1f} 米 (变化: {height_range:.1f} 米)") + print(f"高度范围: {height_min:.1f} - {height_max:.1f} 米 (变化: {height_range:.1f} 米)") # 创建高度分档 - height_bins = create_height_bins(df['融合高程'], height_bin_size) - print(f"📏 高度分档: {len(height_bins)} 个档位 (间隔: {height_bin_size:.1f} 米)") + height_bins = create_height_bins(df[height_col], height_bin_size) + print(f"高度分档: {len(height_bins)} 个档位 (间隔: {height_bin_size:.1f} 米)") for i, (bin_min, bin_max, bin_center, count) in enumerate(height_bins): print(f" 档位{i+1}: {bin_min:.1f}-{bin_max:.1f}m (中心: {bin_center:.1f}m, 数据: {count}行)") # 决定计算策略 if height_range <= height_tolerance: # 高度变化小,只计算一次气压 - print("🎯 高度变化小,将使用平均高度计算一次气压") + print("高度变化小,将使用平均高度计算一次气压") use_single_calculation = True - mean_height = df['融合高程'].mean() - print(f"📍 使用平均高度: {mean_height:.1f} 米") + mean_height = df[height_col].mean() + print(f"使用平均高度: {mean_height:.1f} 米") elif len(height_bins) == 1: # 只有一个高度档位,使用档位中心高度 - print("📦 只有一个高度档位,使用档位中心高度") + print("只有一个高度档位,使用档位中心高度") use_single_calculation = True mean_height = height_bins[0][2] # bin_center - print(f"📍 使用档位中心高度: {mean_height:.1f} 米") + print(f"使用档位中心高度: {mean_height:.1f} 米") else: # 高度变化大,使用分档计算 - print("🏗️ 使用高度分档策略,减少API调用") + print("使用高度分档策略,减少API调用") use_single_calculation = False # 确定要处理的行数 @@ -309,10 +322,10 @@ def calculate_pressure(df, max_samples=None, height_tolerance=10.0, height_bin_s sample_df = df.copy() actual_samples = len(df) if not use_single_calculation: - print(f"📊 将计算所有 {len(df)} 行的气压数据") + print(f"将计算所有 {len(df)} 行的气压数据") else: # 限制采样数量 - print(f"⚠️ 数据量较大 ({len(df)} 行),只对前 {max_samples} 行计算气压") + print(f"数据量较大 ({len(df)} 行),只对前 {max_samples} 行计算气压") sample_df = df.head(max_samples).copy() actual_samples = max_samples @@ -325,11 +338,11 @@ def calculate_pressure(df, max_samples=None, height_tolerance=10.0, height_bin_s first_row = sample_df.iloc[0] # 转换日期格式 - 只提取日期部分,移除任何时间信息 - date_str = str(first_row['日期']) + date_str = str(first_row[date_col]) if ' ' in date_str: - date_str = date_str.split(' ')[0] + date_str = date_str.split(' ')[0] # 处理 "2026-01-15 00:00:00" 格式 elif 'T' in date_str: - date_str = date_str.split('T')[0] + date_str = date_str.split('T')[0] # 处理ISO格式 if '/' in date_str: date_str = date_str.replace('/', '-') @@ -343,8 +356,15 @@ def calculate_pressure(df, max_samples=None, height_tolerance=10.0, height_bin_s # 使用数据的代表性时间(整点小时,众数) time_strings = [] - for time_val in sample_df['时间']: + for time_val in sample_df[time_col]: time_str = str(time_val).strip() + + # 处理时间字符串,提取正确的部分 + # 如果时间字符串包含多个时间部分(如 "00:00:00 08:37:12"),取最后一个 + if ' ' in time_str: + time_parts = time_str.split() + time_str = time_parts[-1] # 取最后一个有效的时间部分 + if ':' in time_str: # 确保是有效的 HH:MM 格式,然后取整点小时 parts = time_str.split(':') @@ -368,8 +388,8 @@ def calculate_pressure(df, max_samples=None, height_tolerance=10.0, height_bin_s print("正在计算平均气压...") pressure = get_pressure_at_location( - lat=sample_df['纬度'].mean(), - lon=sample_df['经度'].mean(), + lat=sample_df[lat_col].mean(), + lon=sample_df[lon_col].mean(), altitude=mean_height, date=formatted_date, time=formatted_time @@ -377,18 +397,18 @@ def calculate_pressure(df, max_samples=None, height_tolerance=10.0, height_bin_s if pressure is not None: pressures = [pressure] * len(sample_df) - print("✅ 平均气压计算成功,将应用到所有行") + print("平均气压计算成功,将应用到所有行") else: - print("❌ 平均气压计算失败") + print("平均气压计算失败") pressures = [None] * len(sample_df) except Exception as e: - print(f"❌ 平均气压计算失败: {e}") + print(f"平均气压计算失败: {e}") pressures = [None] * len(sample_df) else: # 使用高度分档策略 - print("🏗️ 开始分档计算气压...") + print("开始分档计算气压...") # 为每个高度档位计算气压 bin_pressures = {} # bin_center -> pressure @@ -402,19 +422,19 @@ def calculate_pressure(df, max_samples=None, height_tolerance=10.0, height_bin_s try: # 使用第一行数据作为代表来获取日期和时间 # 找到这个档位中的一行数据 - bin_rows = sample_df[(sample_df['融合高程'] >= bin_min) & - (sample_df['融合高程'] <= bin_max)] + bin_rows = sample_df[(sample_df[height_col] >= bin_min) & + (sample_df[height_col] <= bin_max)] if len(bin_rows) == 0: continue first_row = bin_rows.iloc[0] # 转换日期格式 - 只提取日期部分,移除任何时间信息 - date_str = str(first_row['日期']) + date_str = str(first_row[date_col]) if ' ' in date_str: - date_str = date_str.split(' ')[0] + date_str = date_str.split(' ')[0] # 处理 "2026-01-15 00:00:00" 格式 elif 'T' in date_str: - date_str = date_str.split('T')[0] + date_str = date_str.split('T')[0] # 处理ISO格式 if '/' in date_str: date_str = date_str.replace('/', '-') @@ -424,14 +444,21 @@ def calculate_pressure(df, max_samples=None, height_tolerance=10.0, height_bin_s year, month, day = date_parts formatted_date = f"{year}-{month.zfill(2)}-{day.zfill(2)}" else: - print(f"⚠️ 档位高度 {bin_center:.1f}m 日期格式异常: {date_str}") + print(f"档位高度 {bin_center:.1f}m 日期格式异常: {date_str}") bin_pressures[bin_center] = None continue # 使用该档位数据的代表性时间(整点小时) time_strings = [] - for time_val in bin_rows['时间']: + for time_val in bin_rows[time_col]: time_str = str(time_val).strip() + + # 处理时间字符串,提取正确的部分 + # 如果时间字符串包含多个时间部分(如 "00:00:00 08:37:12"),取最后一个 + if ' ' in time_str: + time_parts = time_str.split() + time_str = time_parts[-1] # 取最后一个有效的时间部分 + if ':' in time_str: # 确保是有效的 HH:MM 格式,然后取整点小时 parts = time_str.split(':') @@ -456,8 +483,8 @@ def calculate_pressure(df, max_samples=None, height_tolerance=10.0, height_bin_s print(" 无有效时间数据,使用默认中午12:00") # 计算这个档位的气压(使用平均位置和档位中心高度) - avg_lat = bin_rows['纬度'].mean() - avg_lon = bin_rows['经度'].mean() + avg_lat = bin_rows[lat_col].mean() + avg_lon = bin_rows[lon_col].mean() pressure = get_pressure_at_location( lat=avg_lat, @@ -475,14 +502,14 @@ def calculate_pressure(df, max_samples=None, height_tolerance=10.0, height_bin_s iterator.set_description(f"计算档位 (成功: {success_count}/{len(bin_pressures)})") except Exception as e: - print(f"❌ 计算高度档位 {bin_center:.1f}m 气压失败: {e}") + print(f"计算高度档位 {bin_center:.1f}m 气压失败: {e}") bin_pressures[bin_center] = None # 为每一行分配对应档位的气压 pressures = [] for idx, row in sample_df.iterrows(): # 找到这个高度对应的档位 - height = row['融合高程'] + height = row[height_col] assigned_pressure = None for bin_min, bin_max, bin_center, count in height_bins: @@ -492,7 +519,7 @@ def calculate_pressure(df, max_samples=None, height_tolerance=10.0, height_bin_s pressures.append(assigned_pressure) - print(f"✅ 完成分档气压计算,共 {len(bin_pressures)} 个档位,{len([p for p in bin_pressures.values() if p is not None])} 个成功") + print(f"完成分档气压计算,共 {len(bin_pressures)} 个档位,{len([p for p in bin_pressures.values() if p is not None])} 个成功") # 添加气压列 df['pressure'] = None # 初始化 @@ -513,7 +540,7 @@ def calculate_pressure(df, max_samples=None, height_tolerance=10.0, height_bin_s avg_pressure = sum(valid_pressures) / len(valid_pressures) print(f"成功计算 {len(valid_pressures)}/{actual_samples} 个气压值,平均值: {avg_pressure:.1f} hPa") else: - print("⚠️ 未能计算出任何气压值") + print("未能计算出任何气压值") return df @@ -529,13 +556,13 @@ def adjust_altitude(df): """ print("调整融合高程...") - if '融合高程' in df.columns: - min_altitude = df['融合高程'].min() + if 'fAltitudeFused' in df.columns: + min_altitude = df['fAltitudeFused'].min() print(".2f") - original_alt = df['融合高程'].head(3).tolist() - df['融合高程'] = df['融合高程'] - min_altitude - adjusted_alt = df['融合高程'].head(3).tolist() + original_alt = df['fAltitudeFused'].head(3).tolist() + df['fAltitudeFused'] = df['fAltitudeFused'] - min_altitude + adjusted_alt = df['fAltitudeFused'].head(3).tolist() print("高度调整示例:") for orig, adj in zip(original_alt, adjusted_alt): @@ -546,7 +573,7 @@ def adjust_altitude(df): def merge_timestamp(df): """ - 融合日期和时间列为时间戳 + 融合日期和时间列为时间戳(修正时间格式) Args: df: 输入DataFrame @@ -554,57 +581,48 @@ def merge_timestamp(df): Returns: pd.DataFrame: 融合后的DataFrame """ - print("融合日期和时间...") + print("融合日期和时间(修正时间格式)...") - if '日期' in df.columns and '时间' in df.columns: + if 'qStrDate' in df.columns and 'qStrTime' in df.columns: timestamps = [] for idx, row in df.iterrows(): try: - date_str = str(row['日期']) - time_str = str(row['时间']) + date_str = str(row['qStrDate']).strip() + time_str = str(row['qStrTime']).strip() - # 清理日期字符串 - 移除任何时间部分 - date_str = date_str.strip() + # 处理日期字符串,提取纯日期部分 + # 如果日期字符串包含时间部分(如 "2026-01-15 00:00:00"),取日期部分 if ' ' in date_str: - date_str = date_str.split(' ')[0] # 只取日期部分 - if 'T' in date_str: - date_str = date_str.split('T')[0] # 处理ISO格式 + date_parts = date_str.split() + date_str = date_parts[0] # 取第一个部分作为日期 - # 标准化日期格式 - if '/' in date_str: - date_str = date_str.replace('/', '-') + # 处理时间字符串,提取正确的部分 + # 如果时间字符串包含多个时间部分(如 "00:00:00 08:37:12"),取最后一个 + if ' ' in time_str: + time_parts = time_str.split() + # 取最后一个有效的时间部分 + time_str = time_parts[-1] - # 确保日期格式正确 - date_parts = date_str.split('-') - if len(date_parts) == 3: - year, month, day = date_parts - date_formatted = f"{year.zfill(4)}-{month.zfill(2)}-{day.zfill(2)}" - else: - print(f"⚠️ 日期格式异常: '{date_str}',使用当前日期") - date_formatted = datetime.now().strftime("%Y-%m-%d") - - # 时间字符串已经是修正后的格式(如 "08:34:01"),直接使用 - time_str = time_str.strip() + # 确保时间格式正确 if ':' in time_str and len(time_str.split(':')) >= 2: - time_formatted = time_str + # 组合日期和修正后的时间 + timestamp = f"{date_str} {time_str}" else: - print(f"⚠️ 时间格式异常: '{time_str}',使用默认时间") - time_formatted = "12:00:00" + timestamp = f"{date_str} 12:00:00" # 默认中午时间 + print(f" 时间格式异常 '{row['qStrTime']}',使用默认时间") - # 组合时间戳 - 直接连接日期和时间 - timestamp = f"{date_formatted} {time_formatted}" timestamps.append(timestamp) except Exception as e: - print(f"❌ 处理第 {idx+1} 行时间戳失败: {e}") + print(f"处理第 {idx+1} 行时间戳失败: {e}") timestamps.append(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") df['timestamp'] = timestamps print("时间戳融合示例:") for i in range(min(3, len(timestamps))): - print(f" {df.loc[i, '日期']} + {df.loc[i, '时间']} → {timestamps[i]}") + print(f" {df.loc[i, 'qStrDate']} + {df.loc[i, 'qStrTime']} → {timestamps[i]}") return df @@ -623,83 +641,104 @@ def rename_columns(df): # 定义字段映射 column_mapping = { - 'timestamp': 'timestamp', # 时间戳(已创建) - '经度': 'longitude', # 经度 → latitude - '纬度': 'latitude', # 纬度 → longitude - '融合高程': 'height_ato', # 融合高程 → height_ato - '修正风向': 'winddir', # 修正风向 → winddir - '修正风速': 'windspeed', # 修正风速 → windspeed - '风温': 'temperature', # 风温 → temperature - 'pressure': 'pressure', # 气压(已计算) - 'CH4': 'ch4', # CH4保持不变 - 'pitch': 'course_elevation', # pitch → course_elevation - 'yaw': 'course_azimuth' # yaw → course_azimuth + 'timestamp': 'timestamp', # 时间戳(已创建) + 'stGPSPositionX': 'longitude', # 经度 → longitude + 'stGPSPositionY': 'latitude', # 纬度 → latitude + 'fAltitudeFused': 'height_ato', # 融合高程 → height_ato + 'fFixedWindDirection': 'winddir', # 修正风向 → winddir + 'fFixedWindSpeed': 'windspeed', # 修正风速 → windspeed + 'fWindTemperature': 'temperature', # 风温 → temperature + 'CO2': 'CO2', # CO2浓度 → co2 + 'pitch': 'course_elevation', # pitch → course_elevation + 'yaw': 'course_azimuth' # yaw → course_azimuth } - # 重命名存在的列 - columns_to_rename = {} + # 先复制字段,再对复制的字段重命名 + columns_renamed = [] for old_name, new_name in column_mapping.items(): if old_name in df.columns: - columns_to_rename[old_name] = new_name + # 复制字段到新名称 + df[new_name] = df[old_name].copy() + columns_renamed.append((old_name, new_name)) + print(f" 复制并重命名: {old_name} → {new_name}") - if columns_to_rename: - df = df.rename(columns=columns_to_rename) - print("字段重命名:") - for old, new in columns_to_rename.items(): - print(f" {old} → {new}") - - # 只保留GasFlux需要的列 - required_columns = ['timestamp', 'latitude', 'longitude', 'height_ato', 'windspeed', 'winddir', 'temperature', 'pressure', 'ch4', 'course_elevation', 'course_azimuth'] - existing_required_columns = [col for col in required_columns if col in df.columns] - - if len(existing_required_columns) != len(required_columns): - missing = [col for col in required_columns if col not in df.columns] - print(f"⚠️ 缺少必需列: {missing}") - - # 移除不需要的列,只保留必需的列 - df = df[existing_required_columns] - print(f"最终保留列: {existing_required_columns}") + if columns_renamed: + print(f"共处理了 {len(columns_renamed)} 个字段") return df -def process_excel_file(file_path): +def ensure_float64_types(df, config=None): + """ + 确保数值字段为float64类型,以满足GasFlux处理要求 + + Args: + df: 输入DataFrame + config: 配置字典,包含gases字段 + + Returns: + pd.DataFrame: 数据类型转换后的DataFrame + """ + print("确保数值字段类型为float64...") + + # 定义基础需要转换为float64的字段 + float64_columns = [ + 'longitude', 'latitude', 'height_ato', # 位置和高度 + 'winddir', 'windspeed', 'temperature', # 风和温度 + 'pressure', # 气压 + 'course_elevation', 'course_azimuth' # 姿态角 + ] + + # 如果提供了配置,添加gases中的气体列 + if config and 'gases' in config: + gas_columns = list(config['gases'].keys()) + float64_columns.extend(gas_columns) + print(f"从配置中添加气体列: {gas_columns}") + + converted_count = 0 + for col in float64_columns: + if col in df.columns: + try: + original_dtype = df[col].dtype + df[col] = df[col].astype('float64') + new_dtype = df[col].dtype + if original_dtype != new_dtype: + print(f" 转换: {col} ({original_dtype} → {new_dtype})") + converted_count += 1 + except Exception as e: + print(f" 转换失败: {col} - {e}") + + if converted_count > 0: + print(f"共转换了 {converted_count} 个字段的数据类型为float64") + else: + print("所有数值字段已经是float64类型") + + return df + + +def process_excel_file(file_path, config_path=None): """ 处理单个Excel文件的主函数 Args: file_path: Excel文件路径 + config_path: 配置文件路径,用于读取gases配置 """ print(f"=== 开始处理文件: {file_path} ===\n") - # 获取文件名(用于时间修正) - filename = Path(file_path).name - # 1. 读取数据 df = load_excel_data(file_path) - # 2. 删除不需要的列 - columns_to_remove = [ - '高程', '速度x', '速度y', '速度z', - '四元数_q0', '四元数_q1', '四元数_q2', '四元数_q3', - 'roll', 'H2O', # 保留pitch和yaw,将重命名为course_elevation和course_azimuth - '原始风向', '原始风速' - ] - df = remove_columns(df, columns_to_remove) - - # 3. 修正时间格式 - df = fix_time_column(df, filename) - - # 4. 坐标转换 + # 2. 坐标转换 df = convert_coordinates(df) - # 5. 计算气压 + # 4. 计算气压数据 df = calculate_pressure(df, max_samples=None, height_tolerance=10.0, height_bin_size=2.0) # 计算所有行,高度容差10米,分档2米 - # 6. 高度调整 + # 5. 高度调整 df = adjust_altitude(df) - # 7. 时间戳融合 + # 6. 时间戳融合(保持原有时间格式) df = merge_timestamp(df) # 调试:检查当前列 @@ -707,28 +746,41 @@ def process_excel_file(file_path): if 'timestamp' in df.columns: print(f"timestamp列示例: {df['timestamp'].head(3).tolist()}") - # 8. 字段重命名 + # 7. 字段重命名 df = rename_columns(df) + # 8. 确保数值字段类型为float64 + # 读取配置以获取gases字段 + config = None + if config_path: + try: + with open(config_path, 'r', encoding='utf-8') as f: + config = yaml.safe_load(f) + except Exception as e: + print(f"读取配置文件失败: {e}") + + df = ensure_float64_types(df, config) + # 保存处理结果 output_path = Path(file_path).with_suffix('.processed.csv') - df.to_csv(output_path, index=False) + df.to_csv(output_path, index=False, encoding='utf-8-sig') - print(f"\n✅ 处理完成!") - print(f"📁 输出文件: {output_path}") - print(f"📊 最终数据形状: {df.shape[0]} 行 × {df.shape[1]} 列") - print(f"📋 最终列名: {list(df.columns)}") + print(f"\n处理完成!") + print(f"输出文件: {output_path}") + print(f"最终数据形状: {df.shape[0]} 行 × {df.shape[1]} 列") + print(f"最终列名: {list(df.columns)}") return df -def process_file(input_file, output_file=None): +def process_file(input_file, output_file=None, config_file=None): """ 直接处理Excel文件的函数(不使用命令行参数) Args: input_file: 输入Excel文件路径(字符串或Path对象) output_file: 输出CSV文件路径(可选,字符串或Path对象) + config_file: 配置文件路径(可选,用于读取gases配置) Returns: pd.DataFrame: 处理后的DataFrame @@ -744,13 +796,13 @@ def process_file(input_file, output_file=None): raise ValueError(f"输入文件必须是Excel格式 (.xlsx 或 .xls),当前文件: {input_path}") # 处理文件 - df = process_excel_file(str(input_path)) + df = process_excel_file(str(input_path), config_file) # 如果指定了输出路径,额外保存一份 if output_file: output_path = Path(output_file) - df.to_csv(output_path, index=False) - print(f"📁 额外保存到: {output_path}") + df.to_csv(output_path, index=False, encoding='utf-8-sig') + print(f"额外保存到: {output_path}") return df @@ -769,17 +821,17 @@ def interactive_input(): while True: input_file = input("请输入Excel文件路径 (例如: data.xlsx): ").strip() if not input_file: - print("❌ 文件路径不能为空,请重新输入") + print("文件路径不能为空,请重新输入") continue input_path = Path(input_file) if not input_path.exists(): - print(f"❌ 文件不存在: {input_path}") + print(f"文件不存在: {input_path}") print("提示: 请确保文件路径正确,或者将文件放在当前目录下") continue if input_path.suffix.lower() not in ['.xlsx', '.xls']: - print(f"❌ 文件格式错误: {input_path.suffix}") + print(f"文件格式错误: {input_path.suffix}") print("只支持 .xlsx 和 .xls 格式的Excel文件") continue @@ -791,13 +843,13 @@ def interactive_input(): output_file = None print("使用默认输出文件名") - print(f"\n✅ 输入确认:") + print(f"\n输入确认:") print(f" 输入文件: {input_file}") print(f" 输出文件: {output_file or '自动生成'}") confirm = input("\n确认开始处理? (y/N): ").strip().lower() if confirm not in ['y', 'yes', '是', '确认']: - print("❌ 用户取消操作") + print("用户取消操作") return None, None return input_file, output_file @@ -823,7 +875,7 @@ def main(input_file=None, output_file=None, interactive=False): try: return process_file(input_file, output_file) except Exception as e: - print(f"❌ 处理失败: {e}") + print(f"处理失败: {e}") raise # 否则使用命令行参数 @@ -881,7 +933,7 @@ def main(input_file=None, output_file=None, interactive=False): if not input_file: parser.print_help() print("\n" + "="*60) - print("📖 使用示例:") + print("使用示例:") print("="*60) print("1. 命令行模式:") print(" python data_processor.py your_file.xlsx") @@ -900,11 +952,11 @@ def main(input_file=None, output_file=None, interactive=False): # 检查输入文件 input_path = Path(input_file) if not input_path.exists(): - print(f"❌ 错误:输入文件不存在: {input_path}") + print(f"错误:输入文件不存在: {input_path}") sys.exit(1) if input_path.suffix.lower() not in ['.xlsx', '.xls']: - print(f"❌ 错误:输入文件必须是Excel格式 (.xlsx 或 .xls)") + print(f"错误:输入文件必须是Excel格式 (.xlsx 或 .xls)") sys.exit(1) # 处理文件 @@ -914,16 +966,16 @@ def main(input_file=None, output_file=None, interactive=False): # 如果指定了输出路径,额外保存一份 if output_file: output_path = Path(output_file) - df.to_csv(output_path, index=False) - print(f"📁 额外保存到: {output_path}") + df.to_csv(output_path, index=False, encoding='utf-8-sig') + print(f"额外保存到: {output_path}") return df except KeyboardInterrupt: - print("\n⚠️ 用户中断处理") + print("\n用户中断处理") sys.exit(1) except Exception as e: - print(f"\n❌ 处理失败: {e}") + print(f"\n处理失败: {e}") import traceback traceback.print_exc() sys.exit(1) diff --git a/src/gasflux/processing_pipelines.py b/src/gasflux/processing_pipelines.py index f3abb1e..1c2795b 100644 --- a/src/gasflux/processing_pipelines.py +++ b/src/gasflux/processing_pipelines.py @@ -192,8 +192,13 @@ class SpiralSpatialProcessingStrategy(SpatialProcessingStrategy): self.data_processor.circle_center_x, self.data_processor.circle_center_y, ) = processing.circle_deviation(self.data_processor.df, x_col="utm_easting", y_col="utm_northing") + + # 使用配置中第一个气体的归一化列名 + primary_gas = self.data_processor.gases[0] + y_col = f"{primary_gas}_normalised" + self.data_processor.df = processing.recentre_azimuth( - self.data_processor.df, r=self.data_processor.circle_radius + self.data_processor.df, r=self.data_processor.circle_radius, y=y_col ) self.data_processor.df["x"] = self.data_processor.df["circumference_distance"] for gas_name in self.data_processor.gases: @@ -304,10 +309,11 @@ class DataProcessor: ].std() -def process_main(data_file: Path, config_file: Path) -> None: +def process_main(data_file: Path, config_file: Path, task_id: str | None = None) -> None: """Main function to run the pipeline.""" config = load_config(config_file) - name = data_file.stem + # 优先使用 task_id,否则退回文件 stem + name = task_id if task_id else data_file.stem df = read_csv(data_file) processor = DataProcessor(config, df) diff --git a/src/gasflux/reporting.py b/src/gasflux/reporting.py index 4de5cee..15cea2c 100644 --- a/src/gasflux/reporting.py +++ b/src/gasflux/reporting.py @@ -66,47 +66,52 @@ def generate_reports(name: str, processor, config: dict): Generates reports, configuration files, and processed output variables for gasflux processing runs. Parameters: - name (str): The name identifier for the current processing run. + name (str): The name identifier for the current processing run (task_id). processor (object): The processing object containing report data and output variables. config (dict): Configuration dictionary used for processing. """ output_dir = Path(config["output_dir"]).expanduser() processing_time = datetime.now() - output_path = output_dir / name / processing_time.strftime("%Y-%m-%d_%H-%M-%S-%f_processing_run") + # Save directly to outputs/{task_id} directory + output_path = output_dir / "outputs" / name output_path.mkdir(parents=True, exist_ok=True) # Save reports for gas, report in processor.reports.items(): - report_path = output_path / f"{name}_{gas}_report.html" + timestamp_str = processing_time.strftime("%Y%m%d_%H%M%S") + report_path = output_path / f"{gas}_report_{timestamp_str}.html" with open(report_path, "w", encoding="utf-8") as file: file.write(report) # Save config - header = f"# Gasflux output config for file {name} from processing run at {processing_time}\n" - config_path = output_path / f"{name}_config.yaml" + header = f"# Gasflux output config for task {name} from processing run at {processing_time}\n" + timestamp_str = processing_time.strftime("%Y%m%d_%H%M%S") + config_path = output_path / f"config_{timestamp_str}.yaml" with open(config_path, "w") as file: file.write(header) yaml.safe_dump(config, file) - # Save DataFrame to CSV + # Save DataFrame to Excel if hasattr(processor, 'df') and processor.df is not None: - csv_path = output_path / f"{name}_data.csv" - processor.df.to_csv(csv_path, index=False) - logger.info(f"DataFrame saved to {csv_path}") + timestamp_str = processing_time.strftime("%Y%m%d_%H%M%S") + excel_path = output_path / f"processed_data_{timestamp_str}.xlsx" + processor.df.to_excel(excel_path, index=False, engine='openpyxl') + logger.info(f"DataFrame saved to {excel_path}") # Save output variables output_vars = processor.output_vars # output_vars = delete_large_arrays(output_vars, threshold_size=50) header = ( - f"# Gasflux output variables for file {name} from processing run at {processing_time}\n" + f"# Gasflux output variables for task {name} from processing run at {processing_time}\n" ) - filename = output_path / f"{name}_output_vars.json" + timestamp_str = processing_time.strftime("%Y%m%d_%H%M%S") + filename = output_path / f"output_vars_{timestamp_str}.json" with open(filename, "w") as file: file.write(header) json.dump( output_vars, file, default=lambda item: item.tolist() if isinstance(item, np.ndarray) else item, indent=4 ) - logger.info(f"Processing run saved to {output_path}") + logger.info(f"Task {name} results saved to {output_path}") def delete_large_arrays(output_vars: dict, threshold_size: int) -> dict: diff --git a/src/gasflux/run_example.py b/src/gasflux/run_example.py index 52509b9..8c41de4 100644 --- a/src/gasflux/run_example.py +++ b/src/gasflux/run_example.py @@ -81,7 +81,7 @@ def main(): if args.output: processed_csv = Path(args.output) else: - processed_csv = input_path.with_suffix('.processed.csv') + processed_csv = input_path.with_suffix('_processed.csv') # 确定配置文件 if args.config: @@ -98,7 +98,7 @@ def main(): try: # 第一步:数据预处理 print("🔄 第一步:数据预处理...") - processed_df = process_file(str(input_path), str(processed_csv)) + processed_df = process_file(str(input_path), str(processed_csv), str(config_file)) print(f"✅ 数据预处理完成,输出文件: {processed_csv}") print() diff --git a/src/gasflux/shared.py b/src/gasflux/shared.py new file mode 100644 index 0000000..8073d65 --- /dev/null +++ b/src/gasflux/shared.py @@ -0,0 +1,704 @@ +""" +Shared utilities and constants for GasFlux API. +This module contains shared functions and variables to avoid circular imports. +""" + +import time +import logging +from functools import wraps +from flask import request, current_app, g +from pathlib import Path +import threading + +# Task status constants +TASK_STATUS_PENDING = "pending" +TASK_STATUS_PROCESSING = "processing" +TASK_STATUS_COMPLETED = "completed" +TASK_STATUS_FAILED = "failed" + +# Global task status storage +task_status = {} + +# Task status persistence file override (set by app on startup) +_TASK_STATUS_FILE_PATH: Path | None = None +_TASK_STATUS_FILE_LOCK = threading.Lock() + + +def set_task_status_file_path(path: str | Path): + """Set the task status persistence file path (used across threads without Flask app context).""" + global _TASK_STATUS_FILE_PATH + _TASK_STATUS_FILE_PATH = Path(path) + + +def _build_simple_downloads_from_results(results: list[dict]) -> dict: + """Build direct download shortcuts for common files (minimal, frontend-friendly).""" + downloads: dict = {} + + def set_once(key: str, url: str): + if key not in downloads and url: + downloads[key] = url + + for item in results or []: + if not isinstance(item, dict): + continue + rel_path = item.get('rel_path') + if not rel_path: + continue + + name_l = (item.get('name') or '').lower() + url = f"/download/{rel_path}" + + if name_l.endswith('.xlsx'): + set_once('data_xlsx', url) + elif name_l.endswith('.xls'): + set_once('data_xls', url) + elif name_l.endswith('ch4_report.html'): + set_once('report_ch4', url) + elif name_l.endswith('co2_report.html'): + set_once('report_co2', url) + elif name_l.endswith(('.yaml', '.yml')): + set_once('config', url) + elif name_l.endswith('.json') and 'output_vars' in name_l: + set_once('metadata', url) + elif name_l.endswith('.html'): + set_once('report_html', url) + + return downloads + +# File extension constants +ALLOWED_DATA_EXTENSIONS = {'xlsx', 'xls'} +ALLOWED_CONFIG_EXTENSIONS = {'yaml', 'yml'} + +# Statistics collector +class StatisticsCollector: + """Collects and manages API statistics.""" + + def __init__(self): + self.start_time = time.time() + self.stats = { + 'requests': { + 'total': 0, + 'by_method': {}, + 'by_endpoint': {}, + 'by_status': {}, + 'response_times': [], + 'errors': 0 + }, + 'tasks': { + 'total_created': 0, + 'total_completed': 0, + 'total_failed': 0, + 'by_status': { + 'pending': 0, + 'processing': 0, + 'completed': 0, + 'failed': 0 + }, + 'processing_times': [] + }, + 'performance': { + 'avg_response_time': 0, + 'max_response_time': 0, + 'min_response_time': float('inf'), + 'uptime_seconds': time.time() - self.start_time + } + } + + def record_request(self, method, endpoint, status_code, response_time): + """Record an API request.""" + self.stats['requests']['total'] += 1 + + # Method stats + if method not in self.stats['requests']['by_method']: + self.stats['requests']['by_method'][method] = 0 + self.stats['requests']['by_method'][method] += 1 + + # Endpoint stats + if endpoint not in self.stats['requests']['by_endpoint']: + self.stats['requests']['by_endpoint'][endpoint] = 0 + self.stats['requests']['by_endpoint'][endpoint] += 1 + + # Status stats + status_category = str(status_code // 100 * 100) # 200, 400, 500, etc. + if status_category not in self.stats['requests']['by_status']: + self.stats['requests']['by_status'][status_category] = 0 + self.stats['requests']['by_status'][status_category] += 1 + + # Response time stats + self.stats['requests']['response_times'].append(response_time) + + # Keep only last 1000 response times for memory efficiency + if len(self.stats['requests']['response_times']) > 1000: + self.stats['requests']['response_times'] = self.stats['requests']['response_times'][-1000:] + + # Error tracking + if status_code >= 400: + self.stats['requests']['errors'] += 1 + + # Update performance stats + self._update_performance_stats() + + def record_task_status_change(self, old_status, new_status): + """Record task status changes.""" + if old_status == "unknown": # New task + self.stats['tasks']['total_created'] += 1 + + if new_status == TASK_STATUS_COMPLETED: + self.stats['tasks']['total_completed'] += 1 + self.stats['tasks']['by_status']['completed'] += 1 + elif new_status == TASK_STATUS_FAILED: + self.stats['tasks']['total_failed'] += 1 + self.stats['tasks']['by_status']['failed'] += 1 + elif new_status == TASK_STATUS_PROCESSING: + self.stats['tasks']['by_status']['processing'] += 1 + elif new_status == TASK_STATUS_PENDING: + self.stats['tasks']['by_status']['pending'] += 1 + + def record_task_completion_time(self, completion_time): + """Record task completion time.""" + self.stats['tasks']['processing_times'].append(completion_time) + + def reset_stats(self): + """Reset all statistics.""" + current_time = time.time() + self.start_time = current_time + self.stats = { + 'requests': { + 'total': 0, + 'by_method': {}, + 'by_endpoint': {}, + 'by_status': {}, + 'response_times': [], + 'errors': 0 + }, + 'tasks': { + 'total_created': 0, + 'total_completed': 0, + 'total_failed': 0, + 'by_status': { + 'pending': 0, + 'processing': 0, + 'completed': 0, + 'failed': 0 + }, + 'processing_times': [] + }, + 'performance': { + 'avg_response_time': 0, + 'max_response_time': 0, + 'min_response_time': float('inf'), + 'uptime_seconds': current_time - self.start_time + } + } + + def _update_performance_stats(self): + """Update performance statistics.""" + response_times = self.stats['requests']['response_times'] + if response_times: + self.stats['performance']['avg_response_time'] = sum(response_times) / len(response_times) + self.stats['performance']['max_response_time'] = max(response_times) + self.stats['performance']['min_response_time'] = min(response_times) + + self.stats['performance']['uptime_seconds'] = time.time() - self.start_time + + def get_summary(self): + """Get a summary of current statistics.""" + current_time = time.time() + uptime = current_time - self.start_time + + # Calculate rates + requests_per_second = self.stats['requests']['total'] / max(uptime, 1) + error_rate = (self.stats['requests']['errors'] / max(self.stats['requests']['total'], 1)) * 100 + + # Task completion rate + total_tasks_processed = self.stats['tasks']['total_completed'] + self.stats['tasks']['total_failed'] + task_success_rate = (self.stats['tasks']['total_completed'] / max(total_tasks_processed, 1)) * 100 + + return { + 'summary': { + 'uptime_seconds': uptime, + 'uptime_formatted': self._format_uptime(uptime), + 'requests_total': self.stats['requests']['total'], + 'requests_per_second': round(requests_per_second, 2), + 'error_rate_percent': round(error_rate, 2), + 'active_tasks': len([t for t in task_status.values() + if t.get('status') in [TASK_STATUS_PENDING, TASK_STATUS_PROCESSING]]) + }, + 'requests': { + 'by_method': self.stats['requests']['by_method'], + 'by_status': self.stats['requests']['by_status'], + 'top_endpoints': dict(sorted(self.stats['requests']['by_endpoint'].items(), + key=lambda x: x[1], reverse=True)[:10]) + }, + 'tasks': { + 'total_created': self.stats['tasks']['total_created'], + 'total_completed': self.stats['tasks']['total_completed'], + 'total_failed': self.stats['tasks']['total_failed'], + 'success_rate_percent': round(task_success_rate, 2), + 'by_status': self.stats['tasks']['by_status'] + }, + 'performance': { + 'avg_response_time_ms': round(self.stats['performance']['avg_response_time'] * 1000, 2), + 'max_response_time_ms': round(self.stats['performance']['max_response_time'] * 1000, 2), + 'min_response_time_ms': round(self.stats['performance']['min_response_time'] * 1000, 2) + if self.stats['performance']['min_response_time'] != float('inf') else 0 + } + } + + def _format_uptime(self, seconds): + """Format uptime in human readable format.""" + days, remainder = divmod(int(seconds), 86400) + hours, remainder = divmod(remainder, 3600) + minutes, seconds = divmod(remainder, 60) + + parts = [] + if days > 0: + parts.append(f"{days}d") + if hours > 0: + parts.append(f"{hours}h") + if minutes > 0: + parts.append(f"{minutes}m") + parts.append(f"{seconds}s") + + return " ".join(parts) + + +# Create global statistics collector instance +stats_collector = StatisticsCollector() + + +# Shared utility functions +def log_performance(func): + """Decorator to log function performance.""" + @wraps(func) + def wrapper(*args, **kwargs): + start_time = time.time() + try: + result = func(*args, **kwargs) + duration = time.time() - start_time + logger.debug(f"PERF: {func.__name__} completed in {duration:.3f}s") + return result + except Exception as e: + duration = time.time() - start_time + logger.error(f"PERF: {func.__name__} failed after {duration:.3f}s - Error: {str(e)}") + raise + return wrapper + + +def log_request_info(): + """Log incoming request information.""" + if hasattr(request, 'remote_addr'): + logger.info(f"REQUEST: {request.method} {request.url} - IP: {request.remote_addr} - User-Agent: {request.headers.get('User-Agent', 'Unknown')}") + + +def log_response_info(response): + """Log outgoing response information.""" + if hasattr(request, 'url_rule') and request.url_rule: + endpoint = request.url_rule.rule + else: + endpoint = request.path + + start_time = getattr(g, 'start_time', None) + if start_time: + duration = time.time() - start_time + + logger.info(f"RESPONSE: {request.method} {endpoint} - Status: {response.status_code} - Duration: {duration:.3f}s" if duration else f"RESPONSE: {request.method} {endpoint} - Status: {response.status_code}") + + +def update_task_status(task_id, status, message=None, results=None, error=None): + """Update task status in the global dictionary.""" + timestamp = time.time() + old_status = task_status.get(task_id, {}).get("status", "unknown") + + task_status[task_id] = { + "status": status, + "message": message, + "results": results, + "error": error, + "updated_at": timestamp, + "created_at": task_status.get(task_id, {}).get("created_at", timestamp) + } + + # Record status change in statistics + stats_collector.record_task_status_change(old_status, status) + + # Log detailed status change with context + log_msg = f"Task {task_id} status changed: {old_status} -> {status}" + if message: + log_msg += f" | Message: {message}" + if results: + log_msg += f" | Results count: {len(results) if isinstance(results, list) else 'N/A'}" + if error: + log_msg += f" | Error: {error}" + + log_level = logging.ERROR if status == TASK_STATUS_FAILED else logging.INFO + logger.log(log_level, log_msg) + + # Save task status to file for persistence + logger.debug(f"Saving task {task_id} status '{status}' to persistent storage") + save_task_status_to_file() + + +def get_task_status(task_id): + """Get task status from global dictionary.""" + if task_id in task_status: + return task_status[task_id] + return {"status": "not_found"} + + +def cleanup_old_tasks(): + """Clean up old completed tasks to prevent memory leak.""" + current_time = time.time() + max_age = 24 * 3600 # 24 hours + to_remove = [] + + for task_id, task_info in task_status.items(): + task_age = current_time - task_info.get("updated_at", 0) + if task_age > max_age: + to_remove.append(task_id) + logger.info(f"Task {task_id} scheduled for cleanup (age: {task_age:.1f}s, status: {task_info.get('status')})") + + initial_count = len(task_status) + for task_id in to_remove: + del task_status[task_id] + + if to_remove: + logger.info(f"Cleanup completed: removed {len(to_remove)} tasks, {len(task_status)} tasks remaining") + else: + logger.debug(f"Cleanup check: no old tasks to remove ({len(task_status)} active tasks)") + + +def get_task_list(status_filter=None, page=1, page_size=20, sort_by='updated_at', sort_order='desc', cleanup=True): + """ + Get paginated list of tasks with optional filtering and sorting. + + Args: + status_filter (str or list): Filter by task status. Can be single status or list of statuses. + page (int): Page number (1-based). + page_size (int): Number of tasks per page. + sort_by (str): Sort field ('created_at', 'updated_at', 'status'). + sort_order (str): Sort order ('asc' or 'desc'). + cleanup (bool): Whether to cleanup old tasks before returning list. + + Returns: + dict: { + 'tasks': list of task summaries, + 'total': total number of tasks, + 'page': current page, + 'page_size': page size, + 'total_pages': total pages, + 'has_next': has next page, + 'has_prev': has previous page + } + """ + if cleanup: + cleanup_old_tasks() # Clean up old tasks before returning list + + # Filter tasks + filtered_tasks = [] + for task_id, task_info in task_status.items(): + if status_filter: + if isinstance(status_filter, str): + if task_info.get('status') != status_filter: + continue + elif isinstance(status_filter, list): + if task_info.get('status') not in status_filter: + continue + filtered_tasks.append((task_id, task_info)) + + # Sort tasks + def safe_numeric_sort(value): + """Safely convert value to numeric for sorting.""" + try: + if isinstance(value, (int, float)): + return value + elif isinstance(value, str): + # Try to convert string timestamp to float + return float(value) + else: + return 0 + except (ValueError, TypeError): + return 0 + + reverse_order = sort_order.lower() == 'desc' + if sort_by == 'created_at': + filtered_tasks.sort(key=lambda x: safe_numeric_sort(x[1].get('created_at', 0)), reverse=reverse_order) + elif sort_by == 'updated_at': + filtered_tasks.sort(key=lambda x: safe_numeric_sort(x[1].get('updated_at', 0)), reverse=reverse_order) + elif sort_by == 'status': + filtered_tasks.sort(key=lambda x: x[1].get('status', ''), reverse=reverse_order) + else: + # Default sort by updated_at desc + filtered_tasks.sort(key=lambda x: safe_numeric_sort(x[1].get('updated_at', 0)), reverse=True) + + # Paginate + total_tasks = len(filtered_tasks) + total_pages = (total_tasks + page_size - 1) // page_size + start_idx = (page - 1) * page_size + end_idx = start_idx + page_size + + paginated_tasks = filtered_tasks[start_idx:end_idx] + + # Format task summaries + task_summaries = [] + for task_id, task_info in paginated_tasks: + summary = { + 'task_id': task_id, + 'status': task_info.get('status'), + 'message': task_info.get('message'), + 'created_at': task_info.get('created_at'), + 'updated_at': task_info.get('updated_at'), + 'has_results': bool(task_info.get('results')), + 'has_error': bool(task_info.get('error')) + } + task_summaries.append(summary) + + return { + 'tasks': task_summaries, + 'total': total_tasks, + 'page': page, + 'page_size': page_size, + 'total_pages': total_pages, + 'has_next': page < total_pages, + 'has_prev': page > 1 + } + + +def get_task_pool_stats(): + """ + Get task pool statistics. + + Returns: + dict: Task pool statistics including counts by status. + """ + # Note: cleanup_old_tasks() is disabled for task pool stats + # to preserve historical task data for management purposes + # cleanup_old_tasks() # Clean up old tasks before calculating stats + + stats = { + 'total_tasks': len(task_status), + 'status_counts': {}, + 'active_tasks': 0, + 'queued_tasks': 0, + 'completed_tasks': 0, + 'failed_tasks': 0 + } + + for task_info in task_status.values(): + status = task_info.get('status') + if status: + stats['status_counts'][status] = stats['status_counts'].get(status, 0) + 1 + + if status == TASK_STATUS_PROCESSING: + stats['active_tasks'] += 1 + elif status == TASK_STATUS_PENDING: + stats['queued_tasks'] += 1 + elif status == TASK_STATUS_COMPLETED: + stats['completed_tasks'] += 1 + elif status == TASK_STATUS_FAILED: + stats['failed_tasks'] += 1 + + return stats + + +def _get_status_file(): + """Get the task status file path, preferring OUTPUT_FOLDER for reliability.""" + if _TASK_STATUS_FILE_PATH is not None: + return _TASK_STATUS_FILE_PATH + try: + # Prefer OUTPUT_FOLDER which is more reliable and writable + from flask import current_app + output_dir = current_app.config.get('OUTPUT_FOLDER') + if output_dir: + return Path(output_dir) / "task_status.json" + except Exception: + pass + # Fall back to module directory (for development) + return Path(__file__).parent / "task_status.json" + + +def _to_json_safe(obj): + """Convert numpy types and other non-JSON-serializable objects to JSON-safe types.""" + # Preserve JSON-native types + if obj is None or isinstance(obj, (str, int, float, bool)): + return obj + # Recursively handle containers + if isinstance(obj, list): + return [_to_json_safe(v) for v in obj] + if isinstance(obj, tuple): + return [_to_json_safe(v) for v in obj] + if isinstance(obj, dict): + return {str(k): _to_json_safe(v) for k, v in obj.items()} + + try: + import numpy as np + if isinstance(obj, (np.integer,)): + return int(obj) + if isinstance(obj, (np.floating,)): + return float(obj) + if isinstance(obj, (np.bool_,)): + return bool(obj) + if isinstance(obj, (np.ndarray,)): + return obj.tolist() + except Exception: + pass + # Non-builtin/unknown types, fall back to string representation + try: + return str(obj) + except Exception: + return None + + +def save_task_status_to_file(): + """Save current task status to JSON file for persistence.""" + try: + import json + import os + from pathlib import Path + + status_file = _get_status_file() + logger.debug(f"Attempting to save {len(task_status)} task statuses to {status_file}") + + # Guard: 避免用空内存覆盖已有文件 + if not task_status and status_file.exists(): + logger.info("Skipping task status save: empty in-memory status and file already exists") + return + + # Ensure only one thread writes the status file at a time (prevents Windows replace/lock issues) + with _TASK_STATUS_FILE_LOCK: + + status_to_save = {} + for task_id, task_info in task_status.items(): + try: + clean_info = {} + for k, v in task_info.items(): + if k == 'results' and isinstance(v, list): + # Keep only metadata for results, remove potentially large data fields + cleaned_results = [] + for item in v: + if isinstance(item, dict): + cleaned_item = {kk: vv for kk, vv in item.items() if kk not in ['data', 'arrays']} + + # Normalize result metadata for persistence + name = cleaned_item.get('name') or '' + rel_path = cleaned_item.get('rel_path') or '' + + # Normalize size to int + size = cleaned_item.get('size', 0) + try: + size = int(size) + except Exception: + size = 0 + cleaned_item['size'] = size + + # Infer/normalize type if missing or unknown + t = cleaned_item.get('type') + if (not t) or (t == 'unknown'): + t = _get_file_type(name or rel_path) + cleaned_item['type'] = t + + # Convert numpy types / other objects to JSON-safe + for kk, vv in list(cleaned_item.items()): + cleaned_item[kk] = _to_json_safe(vv) + + cleaned_results.append(cleaned_item) + + clean_info['results'] = cleaned_results + + # Slim persistence: store only direct downloads for frontend + clean_info['downloads'] = _build_simple_downloads_from_results(cleaned_results) + + # Ensure each result has a download_url (optional but handy) + for r in clean_info['results']: + if isinstance(r, dict) and r.get('rel_path') and not r.get('download_url'): + r['download_url'] = f"/download/{r['rel_path']}" + else: + clean_info[k] = _to_json_safe(v) + + status_to_save[task_id] = clean_info + logger.debug(f"Processed task {task_id} with status {clean_info.get('status')}") + + except Exception as task_e: + logger.warning(f"Failed to process task {task_id}: {task_e}") + # Skip this task but continue with others + continue + + # Ensure the directory exists + status_file.parent.mkdir(parents=True, exist_ok=True) + + # Write to a unique temporary file first, then rename for atomicity with fsync + temp_file = status_file.with_suffix(f'.{os.getpid()}.tmp') + with open(temp_file, 'w', encoding='utf-8') as f: + json.dump(status_to_save, f, indent=2, ensure_ascii=False) + f.flush() + os.fsync(f.fileno()) # Force write to disk + + # Atomic rename + temp_file.replace(status_file) + + logger.info(f"Successfully saved {len(status_to_save)} task statuses to {status_file}") + + except Exception as e: + logger.error(f"Failed to save task status to file: {e}", exc_info=True) + + +def load_task_status_from_file(): + """Load task status from JSON file on startup.""" + try: + import json + + status_file = _get_status_file() + + if not status_file.exists(): + logger.info("No task status file found, starting with empty task pool") + return + + # Ensure no writer thread is updating the file while we read it + with _TASK_STATUS_FILE_LOCK: + with open(status_file, 'r', encoding='utf-8') as f: + loaded_status = json.load(f) + + # Restore task status + global task_status + task_status.clear() + task_status.update(loaded_status) + + logger.info(f"Loaded {len(loaded_status)} task statuses from {status_file}") + + except Exception as e: + logger.warning(f"Failed to load task status from file: {e}") + + +def allowed_file(filename, allowed_extensions): + """Check if file extension is allowed.""" + return '.' in filename and \ + filename.rsplit('.', 1)[1].lower() in allowed_extensions + + +def _format_response(code, message, data=None): + """Format API response in unified format.""" + response = { + "code": code, + "message": message, + "data": data if data is not None else {} + } + return response, code + + +def _get_file_type(filename): + """Determine file type from filename.""" + fn = (filename or '').lower() + if fn.endswith('.html'): + return 'report' + elif fn.endswith(('.csv', '.xlsx', '.xls')): + return 'data' + elif fn.endswith('.yaml') or fn.endswith('.yml'): + return 'config' + elif fn.endswith('.json'): + return 'metadata' + else: + return 'other' + + +# Initialize logger +logger = logging.getLogger('gasflux_api') \ No newline at end of file diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/test_processing.py b/tests/test_processing.py deleted file mode 100644 index 31de69b..0000000 --- a/tests/test_processing.py +++ /dev/null @@ -1,205 +0,0 @@ -import pandas as pd -from src.gasflux import processing -import yaml -from pathlib import Path -import numpy as np -from src.gasflux.processing import min_angular_displacement -import pytest - - -testdf = pd.read_csv(Path(__file__).parents[1] / "src" / "gasflux" / "testdata" / "testdata.csv") -testconfig = yaml.safe_load(open(Path(__file__).parents[1] / "src" / "gasflux" / "testdata" / "testconfig.yaml")) - - -def load_cols(cols): - return testdf[cols] - - -def test_min_angular_diff_def(): - def test_min_angular_displacement(): - assert min_angular_displacement(10, 350) == 20 - assert min_angular_displacement(0, 180) == 180 - x = np.array([10, 0]) - y = np.array([350, 180]) - expected = np.array([20, 180]) - result = min_angular_displacement(x, y) - assert np.all(result == expected), "Vectorized function failed" - - -def test_circ_median(): - x = np.array([0, 1, 2, 359, 4, 3]) - median = processing.circ_median(x) - assert median == 1.5, "Circular median not calculated correctly" - - -@pytest.mark.parametrize( - "plane_angle,expected_winddir_rel,expected_windspeed_normal", - [ - ( - 90, - [0, 90, 0, 90, 0], - [5, 0, 5, 0, 5], - ), - ( - 30, - [60, 30, 60, 30, 60], - np.array([1 / 2, np.sqrt(3) / 2, 1 / 2, np.sqrt(3) / 2, 1 / 2]) * 5, - ), - ( - 60, - [30, 60, 30, 60, 30], - np.array([np.sqrt(3) / 2, 1 / 2, np.sqrt(3) / 2, 1 / 2, np.sqrt(3) / 2]) * 5, - ), - ], -) -def test_wind_offset_correction_parametrized(plane_angle, expected_winddir_rel, expected_windspeed_normal): - data = {"winddir": [0, 90, 180, 270, 360], "windspeed": [5, 5, 5, 5, 5]} - df = pd.DataFrame(data) - corrected_df = processing.wind_offset_correction(df, plane_angle) - assert "winddir_rel" in corrected_df.columns, f"Relative wind direction column not added for angle {plane_angle}" - assert "windspeed" in corrected_df.columns, f"Normalised wind speed column not added for angle {plane_angle}" - assert np.allclose(corrected_df["winddir_rel"], expected_winddir_rel, rtol=1e-5, atol=1e-10), ( - f"Relative wind directions not calculated correctly for angle {plane_angle}" - ) - assert np.allclose(corrected_df["windspeed"], expected_windspeed_normal, rtol=1e-5, atol=1e-10), ( - f"Normalised wind speeds not calculated correctly for angle {plane_angle}" - ) - - -def test_bimodal_azimuth(): - input_mode = testconfig["transect_azimuth"] - input_reciprocal_mode = (input_mode + 180) % 360 - df = load_cols(["course_azimuth", "height_ato"]) - mode1, mode2 = processing.bimodal_azimuth(df) - assert ( - min_angular_displacement(mode1, input_mode) < 3 or min_angular_displacement(mode1, input_reciprocal_mode) < 3 - ), "Mode1 does not match expected azimuth or its reciprocal within 3 degrees" - - if min_angular_displacement(mode1, input_mode) < 3: - assert min_angular_displacement(mode2, input_reciprocal_mode) < 3, ( - "Mode2 does not match expected reciprocal azimuth within 3 degrees" - ) - else: - assert min_angular_displacement(mode2, input_mode) < 3, "Mode2 does not match expected azimuth within 3 degrees" - - -def test_bimodal_elevation(): - df = load_cols(["course_elevation", "height_ato"]) - input_mode = 0 - input_reciprocal_mode = 0 - input_mode - mode1, mode2 = processing.bimodal_elevation(df) - assert ( - min_angular_displacement(mode1, input_mode) < 3 or min_angular_displacement(mode1, input_reciprocal_mode) < 3 - ), "Mode1 does not match expected elevation or its reciprocal within 3 degrees" - if min_angular_displacement(mode1, input_mode) < 3: - assert min_angular_displacement(mode2, input_reciprocal_mode) < 3, ( - "Mode2 does not match expected reciprocal elevation within 3 degrees" - ) - else: - assert min_angular_displacement(mode2, input_mode) < 3, ( - "Mode2 does not match expected elevation within 3 degrees" - ) - - -def test_height_transect_splitter(): - df = load_cols(["height_ato"]) - df, fig = processing.height_transect_splitter(df) - assert "transect_num" in df.columns, "Transect number column not added to dataframe" - assert df["transect_num"].nunique() == testconfig["number_of_transects"], ( - "Dataframe was not split into the right number of transects" - ) - - -def test_add_transect_azimuth_switches(): - df = load_cols(["course_azimuth"]) - df = processing.add_transect_azimuth_switches(df) - assert df["transect_num"].nunique() == testconfig["number_of_transects"], ( - "Transect azimuth switches not added to dataframe" - ) - - -def test_course_filter(): - df = load_cols(["course_azimuth", "course_elevation", "height_ato"]) - azimuth_filter = testconfig["filters"]["course_filter"]["azimuth_filter"] - azimuth_window = testconfig["filters"]["course_filter"]["azimuth_window"] - elevation_filter = testconfig["filters"]["course_filter"]["elevation_filter"] - df_filtered, df_unfiltered = processing.course_filter( - df, azimuth_filter=azimuth_filter, azimuth_window=azimuth_window, elevation_filter=elevation_filter - ) - input_mode = testconfig["transect_azimuth"] - input_reciprocal_mode = (input_mode + 180) % 360 - # assert that the filtered dataframe contains the expected azimuth or its reciprocal within the window - df_filtered["near_mode1"] = df_filtered["rolling_course_azimuth"].apply( - lambda x: min_angular_displacement(x, input_mode) < azimuth_window - ) - df_filtered["near_mode2"] = df_filtered["rolling_course_azimuth"].apply( - lambda x: min_angular_displacement(x, input_reciprocal_mode) < azimuth_window - ) - assert df_filtered["near_mode1"].any() or df_filtered["near_mode2"].any(), ( - "Filtered dataframe does not contain expected azimuth or its reciprocal within the window" - ) - - -def test_mCount_max(): - data_dict = {1: -5.4, 2: 0.6, 3: 5.6, 4: 3.2, 5: 10.4, 6: 18.4, 7: 20.8, 8: 19.4} - start, end = processing.mCount_max(data_dict) - assert start == 4, "Start index of max count not calculated correctly" - assert end == 7, "End index of max count not calculated correctly" - - -def test_largest_monotonic_transect_series(): - df = load_cols( - ["timestamp", "height_ato", "course_azimuth", "longitude", "latitude", "utm_easting", "utm_northing"] - ) - df, starttransect, endtransect = processing.largest_monotonic_transect_series(df) - starttransect = 1 - endtransect = testconfig["number_of_transects"] - assert starttransect == starttransect, "Start index of largest monotonic transect not calculated correctly" - assert endtransect == endtransect, "End index of largest monotonic transect not calculated correctly" - - -def test_remove_non_transects(): - df = load_cols( - ["height_ato", "course_azimuth", "course_elevation", "longitude", "latitude", "utm_easting", "utm_northing"] - ) - retained_df, removed_df = processing.remove_non_transects(df) - assert retained_df is not None, "Retained dataframe is None" - assert removed_df is not None, "Removed dataframe is None" - - -def test_flatten_linear_plane(): - df = load_cols(["height_ato", "utm_easting", "utm_northing"]) - df, plane_angle = processing.flatten_linear_plane(df) - input_plane_angle = testconfig["transect_azimuth"] - reciprocal_plane_angle = (input_plane_angle + 180) % 360 - assert ( - min_angular_displacement(plane_angle, input_plane_angle) < 3 - or min_angular_displacement(plane_angle, reciprocal_plane_angle) < 3 - ), "Plane angle not calculated correctly" - - -def test_drone_anemo_to_point_wind(): - data = { - "yaw": [0, 90, 0, -90, 180], - "anemo_u": [0, 0, 10, 10, 10], - "anemo_v": [0, 0, 0, 0, 0], - "easting": [0, 10, 0, 10, 0], - "northing": [0, 0, 0, 0, 10], - } - df_test = pd.DataFrame(data) - yaw_col = "yaw" - anemo_u_col = "anemo_u" - anemo_v_col = "anemo_v" - easting_col = "easting" - northing_col = "northing" - result_df = processing.drone_anemo_to_point_wind( - df_test, yaw_col, anemo_u_col, anemo_v_col, easting_col, northing_col - ) - expected_windspeed = np.array([0, 10, 10, np.sqrt(200), np.sqrt(200)]) - expected_winddir = np.array( - [180, 270, 270, 225, 135] - ) # 180 not zero because of the way IEEE 754 handles floating point numbers - windspeed_diff = np.abs(result_df["windspeed"].values - expected_windspeed) - winddir_diff = processing.min_angular_displacement(result_df["winddir"].to_numpy(), expected_winddir) - assert np.all(windspeed_diff < 1e-10), "Wind speed not calculated correctly" - assert np.all(np.array(winddir_diff) < 3), "Wind direction not calculated correctly" diff --git a/tests/test_processing_pipelines.py b/tests/test_processing_pipelines.py deleted file mode 100644 index 54bbd7b..0000000 --- a/tests/test_processing_pipelines.py +++ /dev/null @@ -1,58 +0,0 @@ -from src.gasflux import processing_pipelines -import yaml -from pathlib import Path -import pytest - - -@pytest.fixture -def setup_test_environment(tmp_path): - """Prepare actual test data and configuration with a modified output directory.""" - df_path = Path(__file__).parents[1] / "src" / "gasflux" / "testdata" / "testdata.csv" - config_path = Path(__file__).parents[1] / "src" / "gasflux" / "testdata" / "testconfig.yaml" - - with open(config_path) as f: - config = yaml.safe_load(f) - config["output_dir"] = str(tmp_path) - - temp_config_path = tmp_path / "temp_testconfig.yaml" - with open(temp_config_path, "w") as f: - yaml.safe_dump(config, f) - - return df_path, temp_config_path - - -def test_process_main_config_output(setup_test_environment): - df_path, temp_config_path = setup_test_environment - processing_pipelines.process_main(df_path, temp_config_path) - with open(temp_config_path) as f: - temp_config = yaml.safe_load(f) - output_dir = Path(temp_config["output_dir"]) / df_path.stem - assert output_dir.exists(), "Output directory does not exist." - processing_run_dirs = [d for d in output_dir.iterdir() if d.is_dir()] - assert len(processing_run_dirs) > 0, "No processing run directory found." - processing_run_dir = processing_run_dirs[0] - - with open(temp_config_path) as f: - original_config = yaml.safe_load(f) - - for gas in original_config.get("gases", []): - report_path = processing_run_dir / f"{df_path.stem}_{gas}_report.html" - assert report_path.exists(), f"Report for {gas} does not exist." - - config_dump_path = processing_run_dir / f"{df_path.stem}_config.yaml" - assert config_dump_path.exists(), "Config dump file does not exist." - - def load_and_redump(yaml_file): - with open(yaml_file) as file: - data = yaml.safe_load(file) - redumped_data = yaml.dump(data, sort_keys=True, default_flow_style=False) - return redumped_data - - assert load_and_redump(temp_config_path) == load_and_redump( - config_dump_path - ), "The dumped config does not match the input config." - - -def test_process_main_deterministic_output(setup_test_environment): - df_path, temp_config_path = setup_test_environment - processing_pipelines.process_main(df_path, temp_config_path)