File size: 3,218 Bytes
c70f023
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import streamlit as st
import pandas as pd
import folium
from streamlit_folium import st_folium
from streamlit_js_eval import get_geolocation
import time

# تنظیمات صفحه
st.set_page_config(page_title="برداشت مسیر فیبر نوری", layout="wide")

st.title("📍 سامانه ثبت مسیر و نقاط پروژه")
st.write("ابتدا اجازه دسترسی به GPS را در مرورگر تایید کنید.")

# ایجاد حافظه موقت برای ذخیره نقاط
if 'points' not in st.session_state:
    st.session_state.points = []

# دریافت موقعیت لحظه‌ای از مرورگر
location = get_geolocation()

col1, col2 = st.columns([1, 3])

with col1:
    st.subheader("کنترل")
    
    if location:
        lat = location['coords']['latitude']
        lon = location['coords']['longitude']
        acc = location['coords']['accuracy']
        
        st.success(f"موقعیت یافت شد!\nدقت: {acc} متر")
        st.info(f"Lat: {lat}\nLon: {lon}")

        if st.button("📌 ثبت نقطه (باکس/تقاطع)", use_container_width=True):
            new_point = {
                "time": time.strftime("%H:%M:%S"),
                "lat": lat,
                "lon": lon,
                "acc": acc
            }
            st.session_state.points.append(new_point)
            st.toast("نقطه با موفقیت ثبت شد")
    else:
        st.warning("در حال دریافت سیگنال GPS... (مطمئن شوید Location گوشی روشن است)")

    if st.button("🗑️ پاکسازی کل مسیر", type="primary", use_container_width=True):
        st.session_state.points = []
        st.rerun()

    # نمایش لیست نقاط ثبت شده
    if st.session_state.points:
        st.write("---")
        st.write("نقاط ثبت شده:")
        df = pd.DataFrame(st.session_state.points)
        st.dataframe(df[["time", "lat", "lon"]], hide_index=True)

with col2:
    # رسم نقشه
    # مرکز نقشه بر اساس آخرین نقطه یا مختصات پیش‌فرض تهران
    center_lat = st.session_state.points[-1]['lat'] if st.session_state.points else 35.6892
    center_lon = st.session_state.points[-1]['lon'] if st.session_state.points else 51.3890
    
    m = folium.Map(location=[center_lat, center_lon], zoom_start=18)
    
    # رسم نقاط و خطوط
    path_coords = []
    for p in st.session_state.points:
        path_coords.append([p['lat'], p['lon']])
        folium.CircleMarker(
            location=[p['lat'], p['lon']],
            radius=5,
            color='red',
            fill=True,
            popup=f"Time: {p['time']}"
        ).add_to(m)

    # وصل کردن نقاط به هم با خط
    if len(path_coords) > 1:
        folium.PolyLine(path_coords, color="blue", weight=3, opacity=0.8).add_to(m)

    # نمایش نقشه
    st_folium(m, width="100%", height=600, key="map")

# امکان دانلود خروجی ساده
if st.session_state.points:
    csv = pd.DataFrame(st.session_state.points).to_csv(index=False).encode('utf-8')
    st.download_button("📥 دانلود فایل CSV نقاط", csv, "survey_points.csv", "text/csv")