perezcatriel commited on
Commit
e2c45bb
·
1 Parent(s): 479fe69

modulo geocoding

Browse files
Files changed (3) hide show
  1. __pycache__/geocoding.cpython-311.pyc +0 -0
  2. app.py +7 -83
  3. geocoding.py +80 -0
__pycache__/geocoding.cpython-311.pyc ADDED
Binary file (2.99 kB). View file
 
app.py CHANGED
@@ -1,93 +1,17 @@
1
- import os
2
-
3
  import folium
4
  import matplotlib.pyplot as plt
5
- import requests
6
  import streamlit as st
7
- from dotenv import load_dotenv
8
  from sklearn.cluster import KMeans
9
  from streamlit_folium import folium_static
10
-
11
- load_dotenv()
12
 
13
  st.set_page_config(layout='wide') # Para usar todo el ancho de la página
14
 
15
- API_KEY = os.getenv('API_KEY')
16
- # BASE_URL = os.getenv('BASE_URL')
17
- BASE_URL = 'https://maps.googleapis.com/maps/api/geocode/json'
18
-
19
- def geocode_address(address):
20
- api_key = API_KEY
21
- base_url = BASE_URL
22
- params = {
23
- 'address': address,
24
- 'key': api_key
25
- }
26
-
27
- try:
28
- response = requests.get(base_url, params=params)
29
- data = response.json()
30
-
31
- if data['status'] == 'OK' and len(data['results']) > 0:
32
- location = data['results'][0]['geometry']['location']
33
- latitude = location['lat']
34
- longitude = location['lng']
35
-
36
- return latitude, longitude
37
- else:
38
- st.error(
39
- 'No se encontraron resultados para la dirección especificada.'
40
- )
41
- except requests.exceptions.RequestException as e:
42
- st.error('Error en la solicitud:', e)
43
-
44
-
45
- direcciones = [
46
- 'San Martín y Garibaldi',
47
- 'Avenida Emilio Civit s/n',
48
- 'Parque General San Martín',
49
- 'Calle Sarmiento, entre las calles Patricias Mendocinas y Garibaldi',
50
- 'Calle Belgrano y España',
51
- 'Calle Las Heras 50',
52
- 'Plaza Independencia',
53
- 'Avenida España y Costanera',
54
- 'Calle 9 de Julio 1228',
55
- 'Calle Chile 1754',
56
- 'Avenida Arístides Villanueva',
57
- 'Avenida Emilio Civit y España',
58
- 'Calle Chile y Avenida Colón',
59
- 'Calle Emilio Civit y Avenida San Martín',
60
- 'Acceso Este y Avenida San Francisco de Asís',
61
- 'Calle San Martín y Avellaneda',
62
- 'Plaza Pedro del Castillo',
63
- 'Calle San Martín y Avenida España',
64
- 'Calle Emilio Civit y Avenida San Martín',
65
- 'Avenida España',
66
- 'Calle Avellaneda y Patricias Mendocinas',
67
- 'Parque General San Martín',
68
- 'Ruta Nacional 7',
69
- 'Avenida Costanera y calle Peltier',
70
- 'Calle Montecaseros 2625',
71
- 'Calle Francisco Delgado 1220',
72
- 'Ruta Provincial 86, s/n',
73
- 'Ruta 15, km 23',
74
- 'Calle San Martín 2044',
75
- 'Ruta 7 y Acceso Sur'
76
- ]
77
-
78
- coordenadas = []
79
- for direccion in direcciones:
80
- resultado = geocode_address(direccion + ', Capital, Mendoza, Argentina')
81
- if resultado:
82
- coordenadas.append(resultado)
83
- else:
84
- coordenadas.append((None, None))
85
-
86
- max_k = len(coordenadas)
87
  inertias = []
88
  for k in range(2, max_k + 1):
89
  modelo = KMeans(n_clusters=k, random_state=42)
90
- modelo.fit(coordenadas)
91
  inertias.append(modelo.inertia_)
92
 
93
  # Titulo
@@ -111,7 +35,7 @@ k_optimo = st.number_input(
111
  )
112
 
113
  modelo = KMeans(n_clusters=k_optimo, random_state=42)
114
- modelo.fit(coordenadas)
115
 
116
  etiquetas = modelo.labels_
117
  num_zonas = len(set(etiquetas))
@@ -120,10 +44,10 @@ zonas = {}
120
  for i, etiqueta in enumerate(etiquetas):
121
  if etiqueta not in zonas:
122
  zonas[etiqueta] = []
123
- zonas[etiqueta].append(direcciones[i])
124
 
125
  # Crear el mapa centrado en la primera coordenada
126
- primer_coordenada = coordenadas[0]
127
  mapa = folium.Map(location=primer_coordenada, zoom_start=15)
128
 
129
  colors = ['red', 'blue', 'green', 'purple', 'orange', 'darkred', 'lightred',
@@ -131,7 +55,7 @@ colors = ['red', 'blue', 'green', 'purple', 'orange', 'darkred', 'lightred',
131
  'darkpurple', 'white', 'pink', 'lightblue', 'lightgreen', 'gray',
132
  'black', 'lightgray'] # Colores disponibles en Folium
133
 
134
- for i, coordenada in enumerate(coordenadas):
135
  zona = etiquetas[i] + 1
136
  color = colors[zona % len(colors)]
137
  if coordenada != (None, None):
 
 
 
1
  import folium
2
  import matplotlib.pyplot as plt
 
3
  import streamlit as st
 
4
  from sklearn.cluster import KMeans
5
  from streamlit_folium import folium_static
6
+ import geocoding
 
7
 
8
  st.set_page_config(layout='wide') # Para usar todo el ancho de la página
9
 
10
+ max_k = len(geocoding.coordenadas)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  inertias = []
12
  for k in range(2, max_k + 1):
13
  modelo = KMeans(n_clusters=k, random_state=42)
14
+ modelo.fit(geocoding.coordenadas)
15
  inertias.append(modelo.inertia_)
16
 
17
  # Titulo
 
35
  )
36
 
37
  modelo = KMeans(n_clusters=k_optimo, random_state=42)
38
+ modelo.fit(geocoding.coordenadas)
39
 
40
  etiquetas = modelo.labels_
41
  num_zonas = len(set(etiquetas))
 
44
  for i, etiqueta in enumerate(etiquetas):
45
  if etiqueta not in zonas:
46
  zonas[etiqueta] = []
47
+ zonas[etiqueta].append(geocoding.direcciones[i])
48
 
49
  # Crear el mapa centrado en la primera coordenada
50
+ primer_coordenada = geocoding.coordenadas[0]
51
  mapa = folium.Map(location=primer_coordenada, zoom_start=15)
52
 
53
  colors = ['red', 'blue', 'green', 'purple', 'orange', 'darkred', 'lightred',
 
55
  'darkpurple', 'white', 'pink', 'lightblue', 'lightgreen', 'gray',
56
  'black', 'lightgray'] # Colores disponibles en Folium
57
 
58
+ for i, coordenada in enumerate(geocoding.coordenadas):
59
  zona = etiquetas[i] + 1
60
  color = colors[zona % len(colors)]
61
  if coordenada != (None, None):
geocoding.py ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+
3
+ import requests
4
+ import streamlit as st
5
+ from dotenv import load_dotenv
6
+
7
+ load_dotenv()
8
+
9
+ API_KEY = os.getenv('API_KEY')
10
+ # BASE_URL = os.getenv('BASE_URL')
11
+ BASE_URL = 'https://maps.googleapis.com/maps/api/geocode/json'
12
+
13
+
14
+ def geocode_address(address):
15
+ api_key = API_KEY
16
+ base_url = BASE_URL
17
+ params = {
18
+ 'address': address,
19
+ 'key': api_key
20
+ }
21
+
22
+ try:
23
+ response = requests.get(base_url, params=params)
24
+ data = response.json()
25
+
26
+ if data['status'] == 'OK' and len(data['results']) > 0:
27
+ location = data['results'][0]['geometry']['location']
28
+ latitude = location['lat']
29
+ longitude = location['lng']
30
+
31
+ return latitude, longitude
32
+ else:
33
+ st.error(
34
+ 'No se encontraron resultados para la dirección '
35
+ 'especificada. Cargaste la API_KEY: https://console.cloud.google.com/google/maps-apis/credentials'
36
+ )
37
+ except requests.exceptions.RequestException as e:
38
+ st.error('Error en la solicitud:', e)
39
+
40
+
41
+ direcciones = [
42
+ 'San Martín y Garibaldi',
43
+ 'Avenida Emilio Civit s/n',
44
+ 'Parque General San Martín',
45
+ 'Calle Sarmiento, entre las calles Patricias Mendocinas y Garibaldi',
46
+ 'Calle Belgrano y España',
47
+ 'Calle Las Heras 50',
48
+ 'Plaza Independencia',
49
+ 'Avenida España y Costanera',
50
+ 'Calle 9 de Julio 1228',
51
+ 'Calle Chile 1754',
52
+ 'Avenida Arístides Villanueva',
53
+ 'Avenida Emilio Civit y España',
54
+ 'Calle Chile y Avenida Colón',
55
+ 'Calle Emilio Civit y Avenida San Martín',
56
+ 'Acceso Este y Avenida San Francisco de Asís',
57
+ 'Calle San Martín y Avellaneda',
58
+ 'Plaza Pedro del Castillo',
59
+ 'Calle San Martín y Avenida España',
60
+ 'Calle Emilio Civit y Avenida San Martín',
61
+ 'Avenida España',
62
+ 'Calle Avellaneda y Patricias Mendocinas',
63
+ 'Parque General San Martín',
64
+ 'Ruta Nacional 7',
65
+ 'Avenida Costanera y calle Peltier',
66
+ 'Calle Montecaseros 2625',
67
+ 'Calle Francisco Delgado 1220',
68
+ 'Ruta Provincial 86, s/n',
69
+ 'Ruta 15, km 23',
70
+ 'Calle San Martín 2044',
71
+ 'Ruta 7 y Acceso Sur'
72
+ ]
73
+
74
+ coordenadas = []
75
+ for direccion in direcciones:
76
+ resultado = geocode_address(direccion + ', Capital, Mendoza, Argentina')
77
+ if resultado:
78
+ coordenadas.append(resultado)
79
+ else:
80
+ coordenadas.append((None, None))