import json import html import folium import gradio as gr from folium import plugins from lib import RequestFunction def CreateMap() -> folium.Map: """Çizim araçları ve çoklu temel katmanlar içeren ana haritayı oluşturur.""" fmap = folium.Map(location=[37.511905, 38.51532], zoom_start=6, world_copy_jump=True, tiles=None) # Temel katmanlar folium.TileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", attr="OpenStreetMap", name="OpenStreetMap").add_to(fmap) folium.TileLayer("http://www.google.cn/maps/vt?lyrs=s@189&gl=cn&x={x}&y={y}&z={z}", attr="Google", name="Google Uydu").add_to(fmap) folium.TileLayer( "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}", attr="Esri", name="Esri Dünya Uydu" ).add_to(fmap) folium.TileLayer( "https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}", attr="Esri", name="Esri Dünya Sokak", ).add_to(fmap) folium.TileLayer( "https://cartodb-basemaps-a.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png", attr="CartoDB", name="CartoDB Açık" ).add_to(fmap) # Koordinat göstergesi formatter = "function(num) {return L.Util.formatNum(num, 5) + ' ° ';};" plugins.MousePosition( position="bottomright", separator=" | ", lng_first=True, prefix="Konum:", lat_formatter=formatter, lng_formatter=formatter ).add_to(fmap) plugins.Geocoder(position="topleft").add_to(fmap) plugins.Draw(export=True, filename="drawing.geojson", position="topleft", show_geometry_on_click=False).add_to(fmap) plugins.Fullscreen(position="topright").add_to(fmap) folium.LayerControl(position="bottomleft").add_to(fmap) # Çizim olaylarını Gradio bileşenlerine bağla map_name = fmap.get_name() fmap.get_root().html.add_child( folium.Element( f""" """ ) ) return fmap def CreateDatasetMap(geojson_data: str) -> str: """GeoJSON verisinden GEE haritası üretir ve iframe olarak döndürür.""" if not geojson_data: return "

Lütfen önce haritada bir bölge çizin.

" geojson = json.loads(geojson_data) features = geojson.get("features", []) if not features: return "

Çizili şekil bulunamadı.

" coords = features[0]["geometry"]["coordinates"][0] fmap = RequestFunction(coords) if fmap is None: return "

Veri alınamadı.

" raw_html = fmap._repr_html_() escaped = html.escape(raw_html) return f"""""" # Ana haritayı oluştur basemap = CreateMap() # Gradio Arayüzü with gr.Blocks(title="GEE Harita Uygulaması") as app: gr.Markdown("# GEE Harita Uygulaması") gr.Markdown("Çalışmak istediğiniz bölgeyi harita üzerinde çizin, ardından veri çekin.") with gr.Row(): geojson_process_btn = gr.Button("GeoJSON Al", elem_id="geojson_process", variant="secondary") prepare_dataset_btn = gr.Button("Veri Çek", elem_id="prepare_dataset", variant="primary") # Ana harita map_html = gr.HTML(basemap._repr_html_(), elem_id="map_container") # GEE sonuç haritası dataset_map_html = gr.HTML(elem_id="dataset_map_container") # Ham GeoJSON çıktısı (JS tarafından doldurulan gizli alan) geojson_output = gr.Textbox( value="", placeholder="Çizilen şekillerin GeoJSON verisi burada görünür.", label="Ham GeoJSON", lines=4, elem_id="geojson_output", interactive=False, ) # GeoJSON görünümü geojson_view = gr.JSON(label="GeoJSON Görünümü") # Event bağlantıları geojson_process_btn.click( fn=lambda data: json.loads(data) if data else {}, inputs=geojson_output, outputs=geojson_view, scroll_to_output=True ) prepare_dataset_btn.click(fn=CreateDatasetMap, inputs=geojson_output, outputs=dataset_map_html, scroll_to_output=True) app.queue(max_size=10) app.launch(share_server_protocol="https")