import tensorflow as tf from PIL import Image import numpy as np import cv2 import gradio as gr from tensorflow import keras from keras.models import load_model import folium import re def convert_coordinates(coord_str): # Regular expression pattern to match the coordinate format pattern = r"(\d+)°(\d+)'(\d+(?:\.\d+)?)\"([NS])\s+(\d+)°(\d+)'(\d+(?:\.\d+)?)\"([EW])" match = re.match(pattern, coord_str) if match: lat_deg = int(match.group(1)) lat_min = int(match.group(2)) lat_sec = float(match.group(3)) lat_dir = match.group(4) lon_deg = int(match.group(5)) lon_min = int(match.group(6)) lon_sec = float(match.group(7)) lon_dir = match.group(8) # Convert coordinates to decimal format lat_decimal = lat_deg + (lat_min / 60) + (lat_sec / 3600) lon_decimal = lon_deg + (lon_min / 60) + (lon_sec / 3600) # Apply sign based on direction if lat_dir == 'S': lat_decimal *= -1 if lon_dir == 'W': lon_decimal *= -1 return (lat_decimal, lon_decimal) else: return None # Example usage coordinates = "30°01'48.7\"N 30°58'35.1\"E" latitude, longitude = convert_coordinates(coordinates) print(f"Latitude: {latitude}, Longitude: {longitude}") mineral_locations = { 'biotite': [ convert_coordinates("45°26'54.0\"N 75°41'24.0\"W"), convert_coordinates("51°03'07.2\"N 114°04'28.8\"W"), convert_coordinates("37°47'24.0\"N 122°28'12.0\"W") ], 'granite': [ convert_coordinates("40°44'54.0\"N 73°59'08.0\"W"), convert_coordinates("34°03'08.0\"S 151°06'24.0\"E"), convert_coordinates("55°45'00.0\"N 37°37'00.0\"E") ], 'olivine': [ convert_coordinates("19°28'48.0\"N 155°36'00.0\"W"), convert_coordinates("38°41'24.0\"N 9°08'24.0\"W"), convert_coordinates("46°28'12.0\"N 7°57'36.0\"E") ], 'plagioclase': [ convert_coordinates("48°51'24.0\"N 2°21'05.0\"E"), convert_coordinates("35°40'48.0\"N 139°41'24.0\"E"), convert_coordinates("41°53'24.0\"N 12°29'24.0\"E") ], 'staurolite': [ convert_coordinates("43°04'12.0\"N 89°22'48.0\"W"), convert_coordinates("47°36'00.0\"N 7°36'00.0\"E"), convert_coordinates("51°30'00.0\"N 0°07'48.0\"W") ] } import folium def plot_mineral_locations(mineral_locations): map = folium.Map(location=[0, 0], zoom_start=2) for mineral, locations in mineral_locations.items(): for location in locations: lat, lon = location folium.Marker( location=[lat, lon], popup=mineral, icon=folium.Icon(color='green') ).add_to(map) return map def generate_mineral_map(mineral_name): # Create a map object mineral_map = folium.Map(location=[0, 0], zoom_start=2) # Get the locations for the specified mineral locations = mineral_locations.get(mineral_name, []) # Add markers for the mineral locations for location in locations: lat, lon = location folium.Marker( location=[lat, lon], popup=mineral_name, icon=folium.Icon(color='green') ).add_to(mineral_map) return mineral_map