import gradio as gr
import plotly.graph_objects as go
import json
from shapely.geometry import Point, Polygon
with open('./dnp_bnd.geojson', 'r') as file:
dnp_area = json.load(file)
with open('./nrf_bnd.geojson', 'r') as file:
nrf_area = json.load(file)
def check_area(lat, lon, area):
# Create a Point
point = Point(lon, lat)
# Function to check if point is in any polygon
def is_point_in_any_polygon(point, geojson_data):
for feature in geojson_data['features']:
polygon = Polygon(feature['geometry']['coordinates'][0][0])
if point.within(polygon):
return True
return False
# Check if the point is in the polygon
return is_point_in_any_polygon(point, area)
def filter_map(lat, lon):
is_in_dnp = check_area(lat, lon, dnp_area)
is_in_nrf = check_area(lat, lon, nrf_area)
print(is_in_dnp)
print(is_in_nrf)
if is_in_dnp and not is_in_nrf:
text = 'อยู่ในขอบเขตป่าตามกฎ EUDR'
elif not is_in_dnp and is_in_nrf:
text = 'อยู่ในขอบเขตป่าตามกฎหมายไทย'
elif is_in_dnp and is_in_nrf:
text = 'อยู่ในขอบเขตป่าตามกฎหมายไทยและกฎ EUDR'
else:
text = 'ไม่อยู่ในขอบเขตป่า'
fig = go.Figure(go.Scattermapbox(
# customdata=text_list,
lat=[lat],
lon=[lon],
mode='markers',
marker=go.scattermapbox.Marker(
size=13
),
hoverinfo="text",
hovertemplate=f'ตำแหน่ง: {lat},{lon}
สถานะตำแหน่ง: {text}'
))
# fig.update_layout(
# mapbox_style="open-street-map",
# hovermode='closest',
# mapbox=dict(
# bearing=0,
# center=go.layout.mapbox.Center(
# lat=lat,
# lon=lon
# ),
# pitch=0,
# zoom=9
# ),
# )
fig.update_layout(
mapbox={
'style':"open-street-map",
'center': go.layout.mapbox.Center(
lat=lat,
lon=lon
),
'zoom': 9,
'layers':[
{'sourcetype': 'geojson',
'source': dnp_area['features']},
]
},
)
return fig
with gr.Blocks() as demo:
with gr.Column():
with gr.Row():
lat = gr.Number(value=9.00, label="ละจิจูด")
lon = gr.Number(value=99.076, label="ลองจิจูด")
btn = gr.Button(value="ค้นหาตำแหน่ง")
map = gr.Plot()
demo.load(filter_map, [lat, lon], map)
btn.click(filter_map, [lat, lon], map)
if __name__ == "__main__":
demo.launch()