drguilhermeapolinario commited on
Commit
8cf0e23
·
verified ·
1 Parent(s): ace7076

Upload 9 files

Browse files
views/cad_cid.py ADDED
@@ -0,0 +1,350 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import plotly.express as px
3
+ import streamlit as st
4
+ from pathlib import Path
5
+ from streamlit_extras.add_vertical_space import add_vertical_space
6
+ from streamlit_extras.stylable_container import stylable_container
7
+
8
+
9
+ st.title("Atualização de cadastro - UBS Flamengo")
10
+
11
+ add_vertical_space(10)
12
+
13
+ # Load the Excel file
14
+ @st.cache_data
15
+ def load_data():
16
+ file_path = Path("src/atual.xlsx")
17
+ df = pd.read_excel(file_path, sheet_name="ANALISE", engine='openpyxl')
18
+ df["ATUALIZADO"] = pd.to_datetime(df["ATUALIZADO"], errors="coerce", dayfirst=True)
19
+ df["Trimestre"] = df["ATUALIZADO"].dt.to_period("Q")
20
+ df["Mês"] = df["ATUALIZADO"].dt.to_period("M")
21
+ df["Semestre"] = df["ATUALIZADO"].dt.to_period("6M")
22
+
23
+ # Convert RUA column to string to ensure consistent sorting
24
+ df["RUA"] = df["RUA"].astype(str)
25
+
26
+ return df
27
+
28
+ #df = load_data()
29
+ uploaded_file = st.sidebar.file_uploader("Adicione o arquivo Excel", type= ".xlsx")
30
+ if uploaded_file is not None:
31
+ df = load_data()
32
+
33
+
34
+ # Custom CSS for dark theme
35
+ st.markdown(
36
+ """
37
+ <style>
38
+ .reportview-container {
39
+ background: #0e1117;
40
+ color: #fafafa;
41
+ }
42
+ .big-font {
43
+ font-size:30px !important;
44
+ font-weight: bold;
45
+ color: #fafafa;
46
+ }
47
+ .stSelectbox [data-baseweb="select"] {
48
+ background-color: #262730;
49
+ }
50
+ .stSelectbox [data-baseweb="select"] > div {
51
+ background-color: #262730;
52
+ color: #fafafa;
53
+ }
54
+ </style>
55
+ """,
56
+ unsafe_allow_html=True,
57
+ )
58
+
59
+ if uploaded_file is not None:
60
+ col1, col2, col3, col4 = st.columns([1, 1, 1, 3])
61
+ with col1:
62
+ rua_selecionada = st.selectbox("Selecione a Rua", sorted(df["RUA"].unique()))
63
+ with col2:
64
+ anos_disponiveis = sorted(df["ATUALIZADO"].dt.year.dropna().unique(), reverse=True)
65
+ anos_disponiveis.insert(0, "Total")
66
+ ano_selecionado = st.selectbox("Selecione o Ano", anos_disponiveis)
67
+ with col3:
68
+ granularidade = st.selectbox(
69
+ "Selecione a Granularidade", ["Mensal", "Trimestral", "Semestral"]
70
+ )
71
+ with col4:
72
+ st.write('')
73
+ # Filter data
74
+ if ano_selecionado == "Total":
75
+ dados_filtrados = df[df["RUA"] == rua_selecionada]
76
+ else:
77
+ dados_filtrados = df[
78
+ (df["RUA"] == rua_selecionada) & (df["ATUALIZADO"].dt.year == ano_selecionado)
79
+ ]
80
+
81
+ # Add period column based on granularity
82
+ if granularidade == "Mensal":
83
+ dados_filtrados["Período"] = dados_filtrados["ATUALIZADO"].dt.strftime("%m-%Y")
84
+ elif granularidade == "Trimestral":
85
+ dados_filtrados["Período"] = (
86
+ dados_filtrados["ATUALIZADO"].dt.to_period("Q").astype(str)
87
+ )
88
+ else: # Semestral
89
+ dados_filtrados["Período"] = (
90
+ dados_filtrados["ATUALIZADO"].dt.to_period("6M").astype(str)
91
+ )
92
+
93
+ # Function to create scatter plot
94
+ def create_scatter_plot(data, title):
95
+ fig = px.scatter(
96
+ data,
97
+ x="ATUALIZADO",
98
+ y="IDADE",
99
+ color="Período",
100
+ hover_data=["NOME", "ATUALIZADO", "Período"],
101
+ title=title,
102
+ color_discrete_sequence=px.colors.qualitative.Set3,
103
+ )
104
+ fig.update_layout(
105
+ xaxis_title="Período",
106
+ yaxis_title="Idade",
107
+ legend_title="Período",
108
+ plot_bgcolor="#0e1117",
109
+ paper_bgcolor="#0e1117",
110
+ font=dict(color="#fafafa"),
111
+ )
112
+ fig.update_xaxes(showgrid=True, gridwidth=1, gridcolor='#31333F', tickangle=45)
113
+ fig.update_yaxes(showgrid=True, gridwidth=1, gridcolor='#31333F')
114
+ return fig
115
+
116
+ # Main scatter plot
117
+ st.subheader(
118
+ f"Última Atualização na Rua {rua_selecionada} ({granularidade} - {ano_selecionado})"
119
+ )
120
+
121
+ c1, c2= st.columns([0.8, 0.2])
122
+
123
+ with c1:
124
+ fig = create_scatter_plot(dados_filtrados, f"Pacientes Pendentes de Atualização - {rua_selecionada}")
125
+ st.plotly_chart(fig, use_container_width=True)
126
+
127
+ with c2:
128
+ total_usuarios = len(dados_filtrados)
129
+
130
+ st.dataframe(dados_filtrados[["NOME", "IDADE", "RUA", "NUM", "Período"]].sort_values(by="Período", ascending=True), hide_index=True)
131
+
132
+ st.write(f"Total de usuários: {total_usuarios}")
133
+ add_vertical_space()
134
+
135
+ st.write('-----')
136
+
137
+ add_vertical_space()
138
+
139
+ c3, c4, c5 = st.columns([2, 2, 1])
140
+
141
+ with c3:
142
+ st.markdown('')
143
+
144
+
145
+ with c4:
146
+ st.subheader("Análise por Faixa Etária")
147
+
148
+ with c5:
149
+ st.markdown('')
150
+
151
+
152
+ co1, co2, co3 = st.columns([2, 2, 2],)
153
+ with co1:
154
+ with stylable_container(
155
+ key="pueri",
156
+ css_styles="""
157
+ img {
158
+ width: 460px;
159
+ height: 180px;
160
+ overflow: hidden;
161
+ position: relative;
162
+ object-fit: cover;
163
+ border-radius: 14px; /* Adiciona bordas arredondadas */
164
+ mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0));
165
+ -webkit-mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0)); /* For Safari */
166
+ }
167
+ """,
168
+ ):
169
+ st.image("src/images/pueri.jpg")
170
+
171
+ with co2:
172
+ with stylable_container(
173
+ key="prev",
174
+ css_styles="""
175
+ img {
176
+ width: 460px;
177
+ height: 180px;
178
+ overflow: hidden;
179
+ position: relative;
180
+ object-fit: cover;
181
+ border-radius: 14px; /* Adiciona bordas arredondadas */
182
+ mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0));
183
+ -webkit-mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0)); /* For Safari */
184
+ }
185
+ """,
186
+ ):
187
+ st.image("src/images/prev.jpg")
188
+
189
+ with co3:
190
+ with stylable_container(
191
+ key="mamo",
192
+ css_styles="""
193
+ img {
194
+ width: 460px;
195
+ height: 180px;
196
+ overflow: hidden;
197
+ position: relative;
198
+ object-fit: cover;
199
+ border-radius: 14px; /* Adiciona bordas arredondadas */
200
+ mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0));
201
+ -webkit-mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0)); /* For Safari */
202
+ }
203
+ """,
204
+ ):
205
+ st.image("src/images/mamo.jpg")
206
+
207
+
208
+ # Preventivo (25-64 anos)
209
+ preventivo = dados_filtrados[
210
+ (dados_filtrados["IDADE"].between(25, 64)) & (dados_filtrados["SEXO"] == "F")
211
+ ]
212
+ st.markdown("### Preventivo (25-64 anos)")
213
+ fig_preventivo = create_scatter_plot(preventivo, f"Preventivo - {rua_selecionada}")
214
+ st.plotly_chart(fig_preventivo, use_container_width=True)
215
+
216
+
217
+ col1, col2 = st.columns([0.4, 0.6])
218
+ with col1:
219
+ st.dataframe(
220
+ preventivo[["NOME", "RUA", "NUM", "ATUALIZADO", "IDADE", "Período"]].sort_values(
221
+ by="ATUALIZADO", ascending=False
222
+ ),
223
+ hide_index=True,
224
+ )
225
+ with col2:
226
+ st.markdown(f"#### Total de usuários: {len(preventivo)}")
227
+
228
+
229
+
230
+ add_vertical_space()
231
+
232
+ st.write('-----')
233
+
234
+ add_vertical_space()
235
+
236
+
237
+ # Mamografia (50-69 anos)
238
+ mamografia = dados_filtrados[
239
+ (dados_filtrados["IDADE"].between(50, 69)) & (dados_filtrados["SEXO"] == "F")
240
+ ]
241
+ st.markdown("### Mamografia (50-69 anos)")
242
+ fig_mamografia = create_scatter_plot(mamografia, f"Mamografia - {rua_selecionada}")
243
+ st.plotly_chart(fig_mamografia, use_container_width=True)
244
+
245
+
246
+ col1, col2 = st.columns([0.4, 0.6])
247
+ with col1:
248
+ st.dataframe(
249
+ mamografia[["NOME", "RUA", "NUM", "ATUALIZADO", "IDADE", "Período"]].sort_values(
250
+ by="ATUALIZADO", ascending=False
251
+ ),
252
+ hide_index=True,
253
+ )
254
+ with col2:
255
+ st.markdown(f"#### Total de usuários: {len(mamografia)}")
256
+
257
+
258
+
259
+ add_vertical_space()
260
+
261
+ st.write('-----')
262
+
263
+ add_vertical_space()
264
+
265
+
266
+ st.markdown("### Crianças 0 - 2 anos e 0 - 4 anos.")
267
+
268
+ # Crianças até 4 anos
269
+ criancasdois = dados_filtrados[dados_filtrados["IDADE"] <= 2]
270
+ # Crianças até 4 anos
271
+ criancasquatro = dados_filtrados[dados_filtrados["IDADE"] <= 4]
272
+
273
+ on = st.toggle("Alterne para ver as crianças até dois anos ou até 4 anos.")
274
+ if on:
275
+ st.markdown("### Crianças até 2 anos")
276
+ fig_criancasdois = create_scatter_plot(criancasdois, f"Crianças até 2 anos - {rua_selecionada}")
277
+ st.plotly_chart(fig_criancasdois, use_container_width=True)
278
+
279
+ col1, col2 = st.columns([0.4, 0.6])
280
+ with col1:
281
+ st.dataframe(
282
+ criancasdois[["NOME", "RUA", "NUM", "ATUALIZADO", "IDADE", "Período"]].sort_values(
283
+ by="ATUALIZADO", ascending=False
284
+ ),
285
+ hide_index=True,
286
+ )
287
+ with col2:
288
+ st.markdown(f"#### Total de usuários: {len(criancasdois)}")
289
+ else:
290
+ st.markdown("### Crianças até 4 anos")
291
+ fig_criancasquatro = create_scatter_plot(criancasquatro, f"Crianças até 2 anos - {rua_selecionada}")
292
+ st.plotly_chart(fig_criancasquatro, use_container_width=True)
293
+
294
+ col1, col2 = st.columns([0.4, 0.6])
295
+ with col1:
296
+ st.dataframe(
297
+ criancasquatro[["NOME", "RUA", "NUM", "ATUALIZADO", "IDADE", "Período"]].sort_values(
298
+ by="ATUALIZADO", ascending=False
299
+ ),
300
+ hide_index=True,
301
+ )
302
+ with col2:
303
+ st.markdown(f"#### Total de usuários: {len(criancasquatro)}")
304
+
305
+ st.write('-----------')
306
+ # Percentage of updates by period
307
+ st.subheader(
308
+ f"Porcentagem de Atualizações por {granularidade} na Rua {rua_selecionada}"
309
+ )
310
+
311
+ period_count = dados_filtrados["Período"].value_counts().sort_index()
312
+ period_percent = (period_count / len(dados_filtrados)) * 100
313
+
314
+ period_data = pd.DataFrame(
315
+ {
316
+ "Período": period_count.index,
317
+ "Porcentagem": period_percent.values.round(2),
318
+ "Atualizações": period_count.values,
319
+ }
320
+ )
321
+
322
+ st.dataframe(period_data, hide_index=True)
323
+
324
+ fig_period = px.bar(
325
+ period_data,
326
+ x="Período",
327
+ y="Porcentagem",
328
+ text="Atualizações",
329
+ title=f"Porcentagem de Atualizações por {granularidade}",
330
+ color="Porcentagem",
331
+ color_continuous_scale="Viridis",
332
+ )
333
+
334
+ fig_period.update_traces(
335
+ texttemplate="%{text}",
336
+ textposition="outside",
337
+ hovertemplate="%{x}: %{y:.2f}%<br>Atualizações: %{text}<extra></extra>",
338
+ )
339
+ fig_period.update_layout(
340
+ xaxis_title=granularidade,
341
+ yaxis_title="Porcentagem",
342
+ yaxis_tickformat=".2f",
343
+ plot_bgcolor="white",
344
+ )
345
+ fig_period.update_xaxes(showgrid=True, gridwidth=1, gridcolor="lightgray")
346
+ fig_period.update_yaxes(showgrid=True, gridwidth=1, gridcolor="lightgray")
347
+
348
+ st.plotly_chart(fig_period, use_container_width=True)
349
+ else:
350
+ st.markdown('# Insira o arquivo com os dados')
views/exame.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from openai import OpenAI
3
+ from langchain.document_loaders import UnstructuredFileLoader
4
+
5
+ st.title("Extração de resultados")
6
+
7
+
8
+ def load_document(file_path, mode="single"):
9
+ loader = UnstructuredFileLoader(file_path, mode=mode)
10
+ docs = loader.load()
11
+
12
+ if mode == "single":
13
+ return docs[0].page_content, []
14
+ elif mode == "elements":
15
+ return " ".join([str(doc.page_content) for doc in docs]), docs
16
+
17
+
18
+ # Sidebar para entrada de chave API e seleção de modelo
19
+ with st.sidebar:
20
+ openai_api_key = st.text_input(
21
+ "OpenAI API Key", key="chatbot_api_key", type="password"
22
+ )
23
+ st.markdown(
24
+ "[Pegue aqui sua chave OpenAI API](https://platform.openai.com/account/api-keys)"
25
+ )
26
+
27
+ uploaded_file = st.file_uploader(
28
+ "Escolha um arquivo PDF ou imagem", type=["pdf", "png", "jpg", "jpeg", "docx"]
29
+ )
30
+
31
+ if st.button("Limpar Conversa"):
32
+ st.session_state["messages"] = [
33
+ {"role": "assistant", "content": "How can I help you?"}
34
+ ]
35
+ st.experimental_rerun()
36
+
37
+ st.title("💬 Chatbot")
38
+ st.caption("🚀 A Streamlit chatbot powered by OpenAI")
39
+
40
+ models = "asst_wXmB8syPqCxPWGtNqiuOXQtn"
41
+
42
+ if "messages" not in st.session_state:
43
+ st.session_state["messages"] = [
44
+ {"role": "assistant", "content": "How can I help you?"}
45
+ ]
46
+
47
+ for msg in st.session_state.messages:
48
+ st.chat_message(msg["role"]).write(msg["content"])
49
+
50
+
51
+ if prompt := st.chat_input():
52
+ if not openai_api_key:
53
+ st.info("Insira sua chave API OpenAI para continuar.")
54
+ st.stop()
55
+
56
+ client = OpenAI(api_key=openai_api_key)
57
+ st.session_state.messages.append({"role": "user", "content": prompt})
58
+ st.chat_message("user").write(prompt)
59
+ response = client.chat.completions.create(
60
+ model=models, messages=st.session_state.messages
61
+ )
62
+ msg = response.choices[0].message.content
63
+ st.session_state.messages.append({"role": "assistant", "content": msg})
64
+ st.chat_message("assistant").write(msg)
65
+
66
+
67
+ if uploaded_file is not None:
68
+ data = load_document(st.file_uploader)
69
+ if data := st.session_state.get("uploaded_file", None) is not None and st.button(
70
+ "Enviar", type="primary"
71
+ ):
72
+ if data is not None:
73
+ st.session_state.exames({"role": "uploaded_file", "content": data})
74
+ resposta = client.chat.completions.create(
75
+ model=models, messages=st.session_state.exames
76
+ )
77
+ msg = resposta.choices[0].message.content
78
+ st.session_state.exames.append({"role": "assistant", "content": msg})
79
+ st.chat_message("assistant").write(msg)
80
+ else:
81
+ st.error("Não foi possível extrair texto do arquivo carregado.")
82
+ else:
83
+ st.warning("Por favor, carregue um arquivo antes de enviar.")
views/flamengo_ibge2022.geojson ADDED
@@ -0,0 +1,1934 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "type" : "FeatureCollection",
3
+ "name" : "MG_Malha_Preliminar_2022",
4
+ "features" : [
5
+ {
6
+ "type" : "Feature",
7
+ "geometry" : {
8
+ "type" : "Polygon",
9
+ "coordinates" : [
10
+ [
11
+ [ -44.057807363, -19.958971486 ],
12
+ [ -44.057817653, -19.95869331 ],
13
+ [ -44.057816878, -19.958630952 ],
14
+ [ -44.057810522, -19.958564853 ],
15
+ [ -44.057798041, -19.958503341 ],
16
+ [ -44.057775551, -19.958445171 ],
17
+ [ -44.057733076, -19.958381173 ],
18
+ [ -44.057679612, -19.95832119 ],
19
+ [ -44.057621304, -19.958273659 ],
20
+ [ -44.057558024, -19.958237186 ],
21
+ [ -44.057473676, -19.958202946 ],
22
+ [ -44.05726076, -19.95815061 ],
23
+ [ -44.057081949, -19.958093525 ],
24
+ [ -44.057300509, -19.958096102 ],
25
+ [ -44.057503075, -19.958103675 ],
26
+ [ -44.057732051, -19.958125072 ],
27
+ [ -44.058038712, -19.958161148 ],
28
+ [ -44.058881586, -19.958274578 ],
29
+ [ -44.060115313, -19.958446344 ],
30
+ [ -44.061832902, -19.958686464 ],
31
+ [ -44.062742678, -19.958816062 ],
32
+ [ -44.063521235, -19.958923085 ],
33
+ [ -44.063696963, -19.958944355 ],
34
+ [ -44.063861483, -19.958956495 ],
35
+ [ -44.064034127, -19.958966735 ],
36
+ [ -44.064168411, -19.958969312 ],
37
+ [ -44.064999547, -19.958970364 ],
38
+ [ -44.065096404, -19.958968825 ],
39
+ [ -44.064796274, -19.959259605 ],
40
+ [ -44.064756665, -19.959305964 ],
41
+ [ -44.064660924, -19.959385923 ],
42
+ [ -44.06447872, -19.959538092 ],
43
+ [ -44.064467767, -19.959675528 ],
44
+ [ -44.064464407, -19.959717689 ],
45
+ [ -44.064462748, -19.959738508 ],
46
+ [ -44.064436321, -19.959839294 ],
47
+ [ -44.064406246, -19.95992623 ],
48
+ [ -44.064367533, -19.960003693 ],
49
+ [ -44.064281919, -19.960132939 ],
50
+ [ -44.064230695, -19.960206137 ],
51
+ [ -44.064191215, -19.960265713 ],
52
+ [ -44.064151998, -19.960335247 ],
53
+ [ -44.064113991, -19.960410626 ],
54
+ [ -44.0640674, -19.960517229 ],
55
+ [ -44.06405903, -19.96053638 ],
56
+ [ -44.06402989, -19.960631812 ],
57
+ [ -44.06400939, -19.960712237 ],
58
+ [ -44.063993953, -19.960782293 ],
59
+ [ -44.063986302, -19.960817016 ],
60
+ [ -44.063813773, -19.961921552 ],
61
+ [ -44.063808429, -19.961955763 ],
62
+ [ -44.063676402, -19.961940365 ],
63
+ [ -44.063403376, -19.961910942 ],
64
+ [ -44.063297847, -19.96189957 ],
65
+ [ -44.06042196, -19.96158965 ],
66
+ [ -44.060401203, -19.961587101 ],
67
+ [ -44.060336065, -19.961579105 ],
68
+ [ -44.060320746, -19.961577225 ],
69
+ [ -44.060206463, -19.961566323 ],
70
+ [ -44.060196199, -19.961565363 ],
71
+ [ -44.060120785, -19.961558307 ],
72
+ [ -44.060105792, -19.961556904 ],
73
+ [ -44.059454167, -19.96149176 ],
74
+ [ -44.0594186, -19.961488205 ],
75
+ [ -44.059402124, -19.961388253 ],
76
+ [ -44.059149845, -19.960230881 ],
77
+ [ -44.059133207, -19.960121414 ],
78
+ [ -44.059120135, -19.959991282 ],
79
+ [ -44.059116471, -19.959864036 ],
80
+ [ -44.059120192, -19.959764911 ],
81
+ [ -44.059132861, -19.95966042 ],
82
+ [ -44.059165294, -19.959429425 ],
83
+ [ -44.059188585, -19.959324228 ],
84
+ [ -44.059194707, -19.959258521 ],
85
+ [ -44.059199461, -19.959211607 ],
86
+ [ -44.059207185, -19.959167484 ],
87
+ [ -44.059211939, -19.959132857 ],
88
+ [ -44.059216692, -19.959094878 ],
89
+ [ -44.059219069, -19.959060251 ],
90
+ [ -44.059220091, -19.959024881 ],
91
+ [ -44.059217773, -19.958986505 ],
92
+ [ -44.059213348, -19.958947002 ],
93
+ [ -44.059204098, -19.958901213 ],
94
+ [ -44.059195598, -19.958859746 ],
95
+ [ -44.059181932, -19.958815624 ],
96
+ [ -44.059159352, -19.958765916 ],
97
+ [ -44.059130062, -19.958716752 ],
98
+ [ -44.059085614, -19.9586796 ],
99
+ [ -44.059021818, -19.958637152 ],
100
+ [ -44.058978716, -19.958611768 ],
101
+ [ -44.058933924, -19.958588196 ],
102
+ [ -44.058881425, -19.95856691 ],
103
+ [ -44.058828978, -19.958551449 ],
104
+ [ -44.058755297, -19.958534693 ],
105
+ [ -44.058611773, -19.958515975 ],
106
+ [ -44.058445308, -19.958497952 ],
107
+ [ -44.058374483, -19.958495677 ],
108
+ [ -44.05831086, -19.958501887 ],
109
+ [ -44.058248446, -19.958511794 ],
110
+ [ -44.05818246, -19.958529537 ],
111
+ [ -44.05811594, -19.958558709 ],
112
+ [ -44.05806882, -19.95858939 ],
113
+ [ -44.05802539, -19.958621132 ],
114
+ [ -44.057993535, -19.958651422 ],
115
+ [ -44.057948693, -19.958701481 ],
116
+ [ -44.057902278, -19.958772289 ],
117
+ [ -44.057870731, -19.958833833 ],
118
+ [ -44.057807363, -19.958971486 ]
119
+ ]
120
+ ]
121
+ },
122
+ "properties" : {
123
+ "CD_SETOR" : "311860110080005P",
124
+ "AREA_KM2" : 0.184352,
125
+ "POP" : 911 }
126
+ },
127
+ {
128
+ "type" : "Feature",
129
+ "geometry" : {
130
+ "type" : "Polygon",
131
+ "coordinates" : [
132
+ [
133
+ [ -44.059997268, -19.964183207 ],
134
+ [ -44.059432058, -19.961572772 ],
135
+ [ -44.0594186, -19.961488205 ],
136
+ [ -44.059454167, -19.96149176 ],
137
+ [ -44.060105792, -19.961556904 ],
138
+ [ -44.060120785, -19.961558307 ],
139
+ [ -44.060196199, -19.961565363 ],
140
+ [ -44.060206463, -19.961566323 ],
141
+ [ -44.060320746, -19.961577225 ],
142
+ [ -44.060336065, -19.961579105 ],
143
+ [ -44.060401203, -19.961587101 ],
144
+ [ -44.06042196, -19.96158965 ],
145
+ [ -44.063297847, -19.96189957 ],
146
+ [ -44.063403376, -19.961910942 ],
147
+ [ -44.063676402, -19.961940365 ],
148
+ [ -44.063808429, -19.961955763 ],
149
+ [ -44.063793407, -19.962050613 ],
150
+ [ -44.063613664, -19.963185545 ],
151
+ [ -44.06360457, -19.963327056 ],
152
+ [ -44.063604311, -19.96347573 ],
153
+ [ -44.063615346, -19.963604575 ],
154
+ [ -44.06364295, -19.963747643 ],
155
+ [ -44.063689398, -19.963877005 ],
156
+ [ -44.063742743, -19.963997701 ],
157
+ [ -44.063816182, -19.964121911 ],
158
+ [ -44.063895386, -19.964232065 ],
159
+ [ -44.063976523, -19.964339972 ],
160
+ [ -44.064092359, -19.964449525 ],
161
+ [ -44.064236617, -19.964553161 ],
162
+ [ -44.064280305, -19.964578256 ],
163
+ [ -44.064353445, -19.964620267 ],
164
+ [ -44.064399984, -19.964647 ],
165
+ [ -44.064598619, -19.964731983 ],
166
+ [ -44.064834181, -19.96482397 ],
167
+ [ -44.065598062, -19.965110517 ],
168
+ [ -44.065678769, -19.965140792 ],
169
+ [ -44.066216277, -19.965342422 ],
170
+ [ -44.066532613, -19.965459301 ],
171
+ [ -44.066612162, -19.965488693 ],
172
+ [ -44.066640107, -19.965499018 ],
173
+ [ -44.070077787, -19.966781649 ],
174
+ [ -44.070158204, -19.966815505 ],
175
+ [ -44.070217721, -19.966852018 ],
176
+ [ -44.070269745, -19.966890762 ],
177
+ [ -44.070336263, -19.966949194 ],
178
+ [ -44.070393, -19.967013707 ],
179
+ [ -44.070430803, -19.967071859 ],
180
+ [ -44.070467284, -19.967136843 ],
181
+ [ -44.070543949, -19.96733573 ],
182
+ [ -44.070561081, -19.967463723 ],
183
+ [ -44.070552205, -19.967600691 ],
184
+ [ -44.070515309, -19.967709993 ],
185
+ [ -44.07050419, -19.967742933 ],
186
+ [ -44.070453635, -19.967862269 ],
187
+ [ -44.070440811, -19.96789254 ],
188
+ [ -44.070379629, -19.967973102 ],
189
+ [ -44.070285277, -19.968036725 ],
190
+ [ -44.070125761, -19.968098797 ],
191
+ [ -44.06825241, -19.968589443 ],
192
+ [ -44.068102672, -19.968612899 ],
193
+ [ -44.067992152, -19.968629653 ],
194
+ [ -44.067870935, -19.968643057 ],
195
+ [ -44.067649894, -19.968649758 ],
196
+ [ -44.067580962, -19.968646264 ],
197
+ [ -44.067540735, -19.968644224 ],
198
+ [ -44.067504485, -19.968639775 ],
199
+ [ -44.06743014, -19.968630652 ],
200
+ [ -44.067300505, -19.96861625 ],
201
+ [ -44.067179289, -19.968596145 ],
202
+ [ -44.067096101, -19.968578274 ],
203
+ [ -44.066990334, -19.968549233 ],
204
+ [ -44.066812074, -19.968495619 ],
205
+ [ -44.064961741, -19.967882412 ],
206
+ [ -44.064911721, -19.967867043 ],
207
+ [ -44.064829862, -19.96784189 ],
208
+ [ -44.064776351, -19.967825448 ],
209
+ [ -44.062569499, -19.967091606 ],
210
+ [ -44.062437566, -19.967068421 ],
211
+ [ -44.06240308, -19.96706236 ],
212
+ [ -44.062394761, -19.967107038 ],
213
+ [ -44.062382384, -19.967144933 ],
214
+ [ -44.062362674, -19.967181875 ],
215
+ [ -44.062333635, -19.967218339 ],
216
+ [ -44.062305037, -19.967247217 ],
217
+ [ -44.062268003, -19.967273411 ],
218
+ [ -44.062224226, -19.967304182 ],
219
+ [ -44.062178167, -19.96732981 ],
220
+ [ -44.062136308, -19.967347256 ],
221
+ [ -44.062092163, -19.967357807 ],
222
+ [ -44.062027884, -19.96735962 ],
223
+ [ -44.06198724, -19.967354033 ],
224
+ [ -44.061946736, -19.9673416 ],
225
+ [ -44.06190511, -19.967325252 ],
226
+ [ -44.06186145, -19.967295448 ],
227
+ [ -44.06182633, -19.967263658 ],
228
+ [ -44.061799048, -19.967223105 ],
229
+ [ -44.061783478, -19.96717882 ],
230
+ [ -44.061776795, -19.967143898 ],
231
+ [ -44.061773186, -19.967104421 ],
232
+ [ -44.061774385, -19.967066049 ],
233
+ [ -44.061780628, -19.967019823 ],
234
+ [ -44.061794932, -19.966971002 ],
235
+ [ -44.061823475, -19.966914759 ],
236
+ [ -44.061865685, -19.966856839 ],
237
+ [ -44.061842182, -19.96683579 ],
238
+ [ -44.061744708, -19.966748494 ],
239
+ [ -44.061546666, -19.966576473 ],
240
+ [ -44.061461101, -19.966490217 ],
241
+ [ -44.061396023, -19.966408282 ],
242
+ [ -44.061334658, -19.96631613 ],
243
+ [ -44.061294512, -19.966234407 ],
244
+ [ -44.061253992, -19.966122055 ],
245
+ [ -44.061187592, -19.965881127 ],
246
+ [ -44.060780904, -19.964029312 ],
247
+ [ -44.060715775, -19.964042111 ],
248
+ [ -44.06067767, -19.9640496 ],
249
+ [ -44.059997268, -19.964183207 ]
250
+ ]
251
+ ]
252
+ },
253
+ "properties" : {
254
+ "CD_SETOR" : "311860110080006P",
255
+ "AREA_KM2" : 0.401953,
256
+ "POP" : 653 }
257
+ },
258
+ {
259
+ "type" : "Feature",
260
+ "geometry" : {
261
+ "type" : "Polygon",
262
+ "coordinates" : [
263
+ [
264
+ [ -44.057807363, -19.958971486 ],
265
+ [ -44.057870731, -19.958833833 ],
266
+ [ -44.057902278, -19.958772289 ],
267
+ [ -44.057948693, -19.958701481 ],
268
+ [ -44.057993535, -19.958651422 ],
269
+ [ -44.05802539, -19.958621132 ],
270
+ [ -44.05806882, -19.95858939 ],
271
+ [ -44.05811594, -19.958558709 ],
272
+ [ -44.05818246, -19.958529537 ],
273
+ [ -44.058248446, -19.958511794 ],
274
+ [ -44.05831086, -19.958501887 ],
275
+ [ -44.058374483, -19.958495677 ],
276
+ [ -44.058445308, -19.958497952 ],
277
+ [ -44.058611773, -19.958515975 ],
278
+ [ -44.058755297, -19.958534693 ],
279
+ [ -44.058828978, -19.958551449 ],
280
+ [ -44.058881425, -19.95856691 ],
281
+ [ -44.058933924, -19.958588196 ],
282
+ [ -44.058978716, -19.958611768 ],
283
+ [ -44.059021818, -19.958637152 ],
284
+ [ -44.059085614, -19.9586796 ],
285
+ [ -44.059130062, -19.958716752 ],
286
+ [ -44.059159352, -19.958765916 ],
287
+ [ -44.059181932, -19.958815624 ],
288
+ [ -44.059195598, -19.958859746 ],
289
+ [ -44.059204098, -19.958901213 ],
290
+ [ -44.059213348, -19.958947002 ],
291
+ [ -44.059217773, -19.958986505 ],
292
+ [ -44.059220091, -19.959024881 ],
293
+ [ -44.059219069, -19.959060251 ],
294
+ [ -44.059216692, -19.959094878 ],
295
+ [ -44.059211939, -19.959132857 ],
296
+ [ -44.059207185, -19.959167484 ],
297
+ [ -44.059199461, -19.959211607 ],
298
+ [ -44.059194707, -19.959258521 ],
299
+ [ -44.059188585, -19.959324228 ],
300
+ [ -44.059165294, -19.959429425 ],
301
+ [ -44.059132861, -19.95966042 ],
302
+ [ -44.059120192, -19.959764911 ],
303
+ [ -44.059116471, -19.959864036 ],
304
+ [ -44.059120135, -19.959991282 ],
305
+ [ -44.059133207, -19.960121414 ],
306
+ [ -44.059149845, -19.960230881 ],
307
+ [ -44.059402124, -19.961388253 ],
308
+ [ -44.0594186, -19.961488205 ],
309
+ [ -44.059432058, -19.961572772 ],
310
+ [ -44.059997268, -19.964183207 ],
311
+ [ -44.059326749, -19.964313338 ],
312
+ [ -44.058617765, -19.964444722 ],
313
+ [ -44.057963341, -19.961416833 ],
314
+ [ -44.057943937, -19.961332431 ],
315
+ [ -44.05792906, -19.961254967 ],
316
+ [ -44.057826629, -19.960782237 ],
317
+ [ -44.057763584, -19.960492856 ],
318
+ [ -44.057743761, -19.960377515 ],
319
+ [ -44.057713981, -19.960168802 ],
320
+ [ -44.057725552, -19.960015856 ],
321
+ [ -44.057729117, -19.9598874 ],
322
+ [ -44.057731494, -19.959774582 ],
323
+ [ -44.057737436, -19.959706723 ],
324
+ [ -44.057745161, -19.959610102 ],
325
+ [ -44.057770424, -19.959365347 ],
326
+ [ -44.057763236, -19.959285507 ],
327
+ [ -44.057795837, -19.959059292 ],
328
+ [ -44.057807363, -19.958971486 ]
329
+ ]
330
+ ]
331
+ },
332
+ "properties" : {
333
+ "CD_SETOR" : "311860110080007P",
334
+ "AREA_KM2" : 0.094629,
335
+ "POP" : 416 }
336
+ },
337
+ {
338
+ "type" : "Feature",
339
+ "geometry" : {
340
+ "type" : "Polygon",
341
+ "coordinates" : [
342
+ [
343
+ [ -44.055039901, -19.958660268 ],
344
+ [ -44.055183257, -19.958579051 ],
345
+ [ -44.056591497, -19.958127394 ],
346
+ [ -44.05675757, -19.958106793 ],
347
+ [ -44.057081949, -19.958093525 ],
348
+ [ -44.05726076, -19.95815061 ],
349
+ [ -44.057473676, -19.958202946 ],
350
+ [ -44.057558024, -19.958237186 ],
351
+ [ -44.057621304, -19.958273659 ],
352
+ [ -44.057679612, -19.95832119 ],
353
+ [ -44.057733076, -19.958381173 ],
354
+ [ -44.057775551, -19.958445171 ],
355
+ [ -44.057798041, -19.958503341 ],
356
+ [ -44.057810522, -19.958564853 ],
357
+ [ -44.057816878, -19.958630952 ],
358
+ [ -44.057817653, -19.95869331 ],
359
+ [ -44.057807363, -19.958971486 ],
360
+ [ -44.057795837, -19.959059292 ],
361
+ [ -44.057763236, -19.959285507 ],
362
+ [ -44.057770424, -19.959365347 ],
363
+ [ -44.057745161, -19.959610102 ],
364
+ [ -44.057737436, -19.959706723 ],
365
+ [ -44.057731494, -19.959774582 ],
366
+ [ -44.057729117, -19.9598874 ],
367
+ [ -44.057725552, -19.960015856 ],
368
+ [ -44.057713981, -19.960168802 ],
369
+ [ -44.057743761, -19.960377515 ],
370
+ [ -44.057763584, -19.960492856 ],
371
+ [ -44.057826629, -19.960782237 ],
372
+ [ -44.05792906, -19.961254967 ],
373
+ [ -44.057943937, -19.961332431 ],
374
+ [ -44.057836823, -19.961321437 ],
375
+ [ -44.056973339, -19.961232809 ],
376
+ [ -44.056946687, -19.961229327 ],
377
+ [ -44.05691153, -19.961224732 ],
378
+ [ -44.056909234, -19.96117511 ],
379
+ [ -44.056854487, -19.960896892 ],
380
+ [ -44.056837743, -19.96079882 ],
381
+ [ -44.056821074, -19.960707337 ],
382
+ [ -44.056810709, -19.96062611 ],
383
+ [ -44.056804051, -19.960554931 ],
384
+ [ -44.056795966, -19.960476474 ],
385
+ [ -44.056793083, -19.96041182 ],
386
+ [ -44.056793837, -19.959837948 ],
387
+ [ -44.056793457, -19.959781013 ],
388
+ [ -44.05678969, -19.95973436 ],
389
+ [ -44.056783196, -19.95969729 ],
390
+ [ -44.056770728, -19.959655736 ],
391
+ [ -44.056750506, -19.959615494 ],
392
+ [ -44.056727354, -19.959582539 ],
393
+ [ -44.056693162, -19.959543914 ],
394
+ [ -44.056650185, -19.959501523 ],
395
+ [ -44.056309442, -19.959199375 ],
396
+ [ -44.056281651, -19.95918424 ],
397
+ [ -44.05624894, -19.959172816 ],
398
+ [ -44.055426419, -19.959086547 ],
399
+ [ -44.055397977, -19.959082214 ],
400
+ [ -44.055372235, -19.959076364 ],
401
+ [ -44.055346323, -19.959066546 ],
402
+ [ -44.0553201, -19.959047197 ],
403
+ [ -44.05513739, -19.958796152 ],
404
+ [ -44.055088591, -19.958729102 ],
405
+ [ -44.055039901, -19.958660268 ]
406
+ ]
407
+ ]
408
+ },
409
+ "properties" : {
410
+ "CD_SETOR" : "311860110080008P",
411
+ "AREA_KM2" : 0.051722,
412
+ "POP" : 420 }
413
+ },
414
+ {
415
+ "type" : "Feature",
416
+ "geometry" : {
417
+ "type" : "Polygon",
418
+ "coordinates" : [
419
+ [
420
+ [ -44.055772391, -19.963736818 ],
421
+ [ -44.057759706, -19.963963625 ],
422
+ [ -44.057538962, -19.963275718 ],
423
+ [ -44.057323208, -19.962614469 ],
424
+ [ -44.057103527, -19.961917679 ],
425
+ [ -44.056941664, -19.96140555 ],
426
+ [ -44.056923647, -19.961325485 ],
427
+ [ -44.05691153, -19.961224732 ],
428
+ [ -44.056946687, -19.961229327 ],
429
+ [ -44.056973339, -19.961232809 ],
430
+ [ -44.057836823, -19.961321437 ],
431
+ [ -44.057943937, -19.961332431 ],
432
+ [ -44.057963341, -19.961416833 ],
433
+ [ -44.058617765, -19.964444722 ],
434
+ [ -44.058797568, -19.965304444 ],
435
+ [ -44.05869868, -19.965264208 ],
436
+ [ -44.058544568, -19.965195789 ],
437
+ [ -44.058489885, -19.965176105 ],
438
+ [ -44.058391313, -19.965151637 ],
439
+ [ -44.058334308, -19.965146133 ],
440
+ [ -44.058118239, -19.965144543 ],
441
+ [ -44.058092469, -19.965233256 ],
442
+ [ -44.058052439, -19.965302279 ],
443
+ [ -44.055722856, -19.96505309 ],
444
+ [ -44.05567605, -19.965000153 ],
445
+ [ -44.055655994, -19.964971007 ],
446
+ [ -44.055644554, -19.964943716 ],
447
+ [ -44.055642888, -19.964916105 ],
448
+ [ -44.055643604, -19.964882793 ],
449
+ [ -44.055702836, -19.964396451 ],
450
+ [ -44.055772391, -19.963736818 ]
451
+ ]
452
+ ]
453
+ },
454
+ "properties" : {
455
+ "CD_SETOR" : "311860110080010P",
456
+ "AREA_KM2" : 0.072069,
457
+ "POP" : 551 }
458
+ },
459
+ {
460
+ "type" : "Feature",
461
+ "geometry" : {
462
+ "type" : "Polygon",
463
+ "coordinates" : [
464
+ [
465
+ [ -44.055916664, -19.96573819 ],
466
+ [ -44.055958661, -19.965640595 ],
467
+ [ -44.055974708, -19.96557825 ],
468
+ [ -44.0559832, -19.965528242 ],
469
+ [ -44.055984611, -19.96548434 ],
470
+ [ -44.055981081, -19.965438215 ],
471
+ [ -44.055970805, -19.96539996 ],
472
+ [ -44.05595492, -19.965363347 ],
473
+ [ -44.055933849, -19.96532402 ],
474
+ [ -44.05590908, -19.96528307 ],
475
+ [ -44.055872044, -19.965232201 ],
476
+ [ -44.055825566, -19.965174033 ],
477
+ [ -44.055722856, -19.96505309 ],
478
+ [ -44.058052439, -19.965302279 ],
479
+ [ -44.058092469, -19.965233256 ],
480
+ [ -44.058118239, -19.965144543 ],
481
+ [ -44.058334308, -19.965146133 ],
482
+ [ -44.058391313, -19.965151637 ],
483
+ [ -44.058489885, -19.965176105 ],
484
+ [ -44.058544568, -19.965195789 ],
485
+ [ -44.05869868, -19.965264208 ],
486
+ [ -44.058797568, -19.965304444 ],
487
+ [ -44.058872422, -19.965660238 ],
488
+ [ -44.05902952, -19.966356928 ],
489
+ [ -44.058534381, -19.966454472 ],
490
+ [ -44.058479292, -19.966467508 ],
491
+ [ -44.058432945, -19.966483145 ],
492
+ [ -44.058391351, -19.966501016 ],
493
+ [ -44.058345558, -19.966525594 ],
494
+ [ -44.058299845, -19.966568593 ],
495
+ [ -44.058250118, -19.966620117 ],
496
+ [ -44.058197674, -19.966689919 ],
497
+ [ -44.058151918, -19.966754541 ],
498
+ [ -44.058016581, -19.966982967 ],
499
+ [ -44.057958181, -19.967119255 ],
500
+ [ -44.057939461, -19.967199241 ],
501
+ [ -44.057935047, -19.967258578 ],
502
+ [ -44.05793571, -19.967326718 ],
503
+ [ -44.05794708, -19.967405362 ],
504
+ [ -44.057964374, -19.967491939 ],
505
+ [ -44.057982211, -19.967559179 ],
506
+ [ -44.058135999, -19.967512068 ],
507
+ [ -44.058922511, -19.967286569 ],
508
+ [ -44.058999351, -19.967257715 ],
509
+ [ -44.059076284, -19.96722255 ],
510
+ [ -44.059138258, -19.967182363 ],
511
+ [ -44.059198866, -19.967134334 ],
512
+ [ -44.059258667, -19.967079626 ],
513
+ [ -44.059328071, -19.967211396 ],
514
+ [ -44.059405155, -19.967343925 ],
515
+ [ -44.059512639, -19.967517954 ],
516
+ [ -44.059619769, -19.967672456 ],
517
+ [ -44.059722411, -19.967802956 ],
518
+ [ -44.059889314, -19.967992147 ],
519
+ [ -44.06006935, -19.968175699 ],
520
+ [ -44.06059521, -19.96861482 ],
521
+ [ -44.06063317, -19.968636905 ],
522
+ [ -44.06064663, -19.968644736 ],
523
+ [ -44.060538068, -19.968730199 ],
524
+ [ -44.060291214, -19.968900363 ],
525
+ [ -44.060201599, -19.968956767 ],
526
+ [ -44.060077453, -19.969026097 ],
527
+ [ -44.05992459, -19.969094932 ],
528
+ [ -44.059742575, -19.969172924 ],
529
+ [ -44.059601932, -19.969219264 ],
530
+ [ -44.059471536, -19.969258 ],
531
+ [ -44.05927632, -19.969311619 ],
532
+ [ -44.059063597, -19.969370817 ],
533
+ [ -44.058832041, -19.969440194 ],
534
+ [ -44.058673122, -19.969492764 ],
535
+ [ -44.058510993, -19.969550645 ],
536
+ [ -44.058295187, -19.969638048 ],
537
+ [ -44.058262873, -19.969653452 ],
538
+ [ -44.058233372, -19.969667514 ],
539
+ [ -44.05820029, -19.96962002 ],
540
+ [ -44.05788518, -19.969040025 ],
541
+ [ -44.05756754, -19.968451606 ],
542
+ [ -44.057245545, -19.967867449 ],
543
+ [ -44.057567098, -19.967719735 ],
544
+ [ -44.057248735, -19.967398468 ],
545
+ [ -44.057197356, -19.967359526 ],
546
+ [ -44.056927113, -19.967145166 ],
547
+ [ -44.056983684, -19.967083361 ],
548
+ [ -44.057303715, -19.96653908 ],
549
+ [ -44.057678408, -19.965914443 ],
550
+ [ -44.055916664, -19.96573819 ]
551
+ ]
552
+ ]
553
+ },
554
+ "properties" : {
555
+ "CD_SETOR" : "311860110080011P",
556
+ "AREA_KM2" : 0.099217,
557
+ "POP" : 823 }
558
+ },
559
+ {
560
+ "type" : "Feature",
561
+ "geometry" : {
562
+ "type" : "Polygon",
563
+ "coordinates" : [
564
+ [
565
+ [ -44.059997268, -19.964183207 ],
566
+ [ -44.06067767, -19.9640496 ],
567
+ [ -44.060715775, -19.964042111 ],
568
+ [ -44.060780904, -19.964029312 ],
569
+ [ -44.061187592, -19.965881127 ],
570
+ [ -44.061253992, -19.966122055 ],
571
+ [ -44.061294512, -19.966234407 ],
572
+ [ -44.061334658, -19.96631613 ],
573
+ [ -44.061396023, -19.966408282 ],
574
+ [ -44.061461101, -19.966490217 ],
575
+ [ -44.061546666, -19.966576473 ],
576
+ [ -44.061744708, -19.966748494 ],
577
+ [ -44.061842182, -19.96683579 ],
578
+ [ -44.061865685, -19.966856839 ],
579
+ [ -44.061823475, -19.966914759 ],
580
+ [ -44.061794932, -19.966971002 ],
581
+ [ -44.061780628, -19.967019823 ],
582
+ [ -44.061774385, -19.967066049 ],
583
+ [ -44.061773186, -19.967104421 ],
584
+ [ -44.061776795, -19.967143898 ],
585
+ [ -44.061783478, -19.96717882 ],
586
+ [ -44.061799048, -19.967223105 ],
587
+ [ -44.06182633, -19.967263658 ],
588
+ [ -44.06186145, -19.967295448 ],
589
+ [ -44.06190511, -19.967325252 ],
590
+ [ -44.061946736, -19.9673416 ],
591
+ [ -44.06198724, -19.967354033 ],
592
+ [ -44.062027884, -19.96735962 ],
593
+ [ -44.062092163, -19.967357807 ],
594
+ [ -44.062136308, -19.967347256 ],
595
+ [ -44.062178167, -19.96732981 ],
596
+ [ -44.062224226, -19.967304182 ],
597
+ [ -44.062268003, -19.967273411 ],
598
+ [ -44.062305037, -19.967247217 ],
599
+ [ -44.062333635, -19.967218339 ],
600
+ [ -44.062362674, -19.967181875 ],
601
+ [ -44.062382384, -19.967144933 ],
602
+ [ -44.062394761, -19.967107038 ],
603
+ [ -44.06240308, -19.96706236 ],
604
+ [ -44.062437566, -19.967068421 ],
605
+ [ -44.062569499, -19.967091606 ],
606
+ [ -44.064776351, -19.967825448 ],
607
+ [ -44.064829862, -19.96784189 ],
608
+ [ -44.064911721, -19.967867043 ],
609
+ [ -44.064961741, -19.967882412 ],
610
+ [ -44.066812074, -19.968495619 ],
611
+ [ -44.066990334, -19.968549233 ],
612
+ [ -44.067096101, -19.968578274 ],
613
+ [ -44.067179289, -19.968596145 ],
614
+ [ -44.067300505, -19.96861625 ],
615
+ [ -44.06743014, -19.968630652 ],
616
+ [ -44.067504485, -19.968639775 ],
617
+ [ -44.067540735, -19.968644224 ],
618
+ [ -44.06753071, -19.96872734 ],
619
+ [ -44.067403129, -19.970041187 ],
620
+ [ -44.067302712, -19.971217488 ],
621
+ [ -44.067152339, -19.972761035 ],
622
+ [ -44.067144895, -19.972785351 ],
623
+ [ -44.067134085, -19.972796453 ],
624
+ [ -44.067112694, -19.972807622 ],
625
+ [ -44.067082213, -19.972810978 ],
626
+ [ -44.065842752, -19.972709502 ],
627
+ [ -44.06576888, -19.972700612 ],
628
+ [ -44.065691603, -19.97268627 ],
629
+ [ -44.065628288, -19.972667457 ],
630
+ [ -44.065560054, -19.972642876 ],
631
+ [ -44.06550053, -19.972612633 ],
632
+ [ -44.06545412, -19.972586845 ],
633
+ [ -44.065413483, -19.972560285 ],
634
+ [ -44.065375853, -19.972530067 ],
635
+ [ -44.065340201, -19.972498235 ],
636
+ [ -44.065305143, -19.972465285 ],
637
+ [ -44.065268897, -19.972429544 ],
638
+ [ -44.065239782, -19.972396036 ],
639
+ [ -44.065209478, -19.972358061 ],
640
+ [ -44.065177217, -19.972305339 ],
641
+ [ -44.065143673, -19.972245869 ],
642
+ [ -44.065123459, -19.972178831 ],
643
+ [ -44.065096417, -19.972090594 ],
644
+ [ -44.064419425, -19.9699366 ],
645
+ [ -44.064385361, -19.969816803 ],
646
+ [ -44.064370973, -19.969763389 ],
647
+ [ -44.064357695, -19.969699203 ],
648
+ [ -44.064347107, -19.969629241 ],
649
+ [ -44.064341179, -19.969560987 ],
650
+ [ -44.06433972, -19.969491591 ],
651
+ [ -44.064342975, -19.969395147 ],
652
+ [ -44.06436549, -19.969265267 ],
653
+ [ -44.064384511, -19.969165958 ],
654
+ [ -44.063744036, -19.968953865 ],
655
+ [ -44.063690207, -19.968939415 ],
656
+ [ -44.063637718, -19.968928779 ],
657
+ [ -44.063564737, -19.968916504 ],
658
+ [ -44.063508288, -19.968909802 ],
659
+ [ -44.063433442, -19.968906185 ],
660
+ [ -44.063358143, -19.968909774 ],
661
+ [ -44.063298536, -19.968918179 ],
662
+ [ -44.06323258, -19.968931024 ],
663
+ [ -44.06263978, -19.969094439 ],
664
+ [ -44.061965477, -19.969276633 ],
665
+ [ -44.061158037, -19.969490391 ],
666
+ [ -44.06112224, -19.969499319 ],
667
+ [ -44.061111505, -19.969501996 ],
668
+ [ -44.061068772, -19.969367013 ],
669
+ [ -44.061035963, -19.969268268 ],
670
+ [ -44.060962699, -19.969071869 ],
671
+ [ -44.060920087, -19.96898778 ],
672
+ [ -44.06086628, -19.968898534 ],
673
+ [ -44.060811042, -19.968817545 ],
674
+ [ -44.060703673, -19.968686063 ],
675
+ [ -44.06064663, -19.968644736 ],
676
+ [ -44.06063317, -19.968636905 ],
677
+ [ -44.06059521, -19.96861482 ],
678
+ [ -44.06006935, -19.968175699 ],
679
+ [ -44.059889314, -19.967992147 ],
680
+ [ -44.059722411, -19.967802956 ],
681
+ [ -44.059619769, -19.967672456 ],
682
+ [ -44.059512639, -19.967517954 ],
683
+ [ -44.059405155, -19.967343925 ],
684
+ [ -44.059328071, -19.967211396 ],
685
+ [ -44.059258667, -19.967079626 ],
686
+ [ -44.059201645, -19.966944017 ],
687
+ [ -44.059134559, -19.966765211 ],
688
+ [ -44.059082161, -19.966600729 ],
689
+ [ -44.05902952, -19.966356928 ],
690
+ [ -44.058872422, -19.965660238 ],
691
+ [ -44.058797568, -19.965304444 ],
692
+ [ -44.058617765, -19.964444722 ],
693
+ [ -44.059326749, -19.964313338 ],
694
+ [ -44.059997268, -19.964183207 ]
695
+ ]
696
+ ]
697
+ },
698
+ "properties" : {
699
+ "CD_SETOR" : "311860110080012P",
700
+ "AREA_KM2" : 0.312423,
701
+ "POP" : 686 }
702
+ },
703
+ {
704
+ "type" : "Feature",
705
+ "geometry" : {
706
+ "type" : "Polygon",
707
+ "coordinates" : [
708
+ [
709
+ [ -44.060201599, -19.968956767 ],
710
+ [ -44.060291214, -19.968900363 ],
711
+ [ -44.060538068, -19.968730199 ],
712
+ [ -44.06064663, -19.968644736 ],
713
+ [ -44.060703673, -19.968686063 ],
714
+ [ -44.060811042, -19.968817545 ],
715
+ [ -44.06086628, -19.968898534 ],
716
+ [ -44.060920087, -19.96898778 ],
717
+ [ -44.060962699, -19.969071869 ],
718
+ [ -44.061035963, -19.969268268 ],
719
+ [ -44.061068772, -19.969367013 ],
720
+ [ -44.061111505, -19.969501996 ],
721
+ [ -44.061209759, -19.969823215 ],
722
+ [ -44.061317092, -19.970174113 ],
723
+ [ -44.060549437, -19.970379507 ],
724
+ [ -44.060447568, -19.969697778 ],
725
+ [ -44.060389046, -19.969491704 ],
726
+ [ -44.060311848, -19.969212042 ],
727
+ [ -44.060201599, -19.968956767 ]
728
+ ]
729
+ ]
730
+ },
731
+ "properties" : {
732
+ "CD_SETOR" : "311860110080015P",
733
+ "AREA_KM2" : 0.012569,
734
+ "POP" : 510 }
735
+ },
736
+ {
737
+ "type" : "Feature",
738
+ "geometry" : {
739
+ "type" : "Polygon",
740
+ "coordinates" : [
741
+ [
742
+ [ -44.057587205, -19.971273003 ],
743
+ [ -44.057454577, -19.971126414 ],
744
+ [ -44.058068463, -19.970618777 ],
745
+ [ -44.058512926, -19.970261862 ],
746
+ [ -44.058531789, -19.970244495 ],
747
+ [ -44.058534317, -19.970244829 ],
748
+ [ -44.058565971, -19.970224374 ],
749
+ [ -44.059019605, -19.970996228 ],
750
+ [ -44.058984031, -19.971014401 ],
751
+ [ -44.057912815, -19.971591804 ],
752
+ [ -44.057591312, -19.971273003 ],
753
+ [ -44.057587205, -19.971273003 ]
754
+ ]
755
+ ]
756
+ },
757
+ "properties" : {
758
+ "CD_SETOR" : "311860110080019P",
759
+ "AREA_KM2" : 0.011998,
760
+ "POP" : 564 }
761
+ },
762
+ {
763
+ "type" : "Feature",
764
+ "geometry" : {
765
+ "type" : "Polygon",
766
+ "coordinates" : [
767
+ [
768
+ [ -44.056614572, -19.970833163 ],
769
+ [ -44.056810503, -19.970670445 ],
770
+ [ -44.05730448, -19.970257532 ],
771
+ [ -44.057561922, -19.970054964 ],
772
+ [ -44.057716107, -19.969948715 ],
773
+ [ -44.057900751, -19.969829113 ],
774
+ [ -44.058087293, -19.969732581 ],
775
+ [ -44.058162072, -19.969698475 ],
776
+ [ -44.058201246, -19.969681464 ],
777
+ [ -44.058233372, -19.969667514 ],
778
+ [ -44.058266259, -19.969715997 ],
779
+ [ -44.058561643, -19.970217009 ],
780
+ [ -44.058565971, -19.970224374 ],
781
+ [ -44.058534317, -19.970244829 ],
782
+ [ -44.058531789, -19.970244495 ],
783
+ [ -44.058512926, -19.970261862 ],
784
+ [ -44.058068463, -19.970618777 ],
785
+ [ -44.057454577, -19.971126414 ],
786
+ [ -44.057587205, -19.971273003 ],
787
+ [ -44.057590297, -19.97127642 ],
788
+ [ -44.057243578, -19.97158776 ],
789
+ [ -44.056674862, -19.970911118 ],
790
+ [ -44.056614572, -19.970833163 ]
791
+ ]
792
+ ]
793
+ },
794
+ "properties" : {
795
+ "CD_SETOR" : "311860110080020P",
796
+ "AREA_KM2" : 0.017939,
797
+ "POP" : 624 }
798
+ },
799
+ {
800
+ "type" : "Feature",
801
+ "geometry" : {
802
+ "type" : "Polygon",
803
+ "coordinates" : [
804
+ [
805
+ [ -44.055442293, -19.973611307 ],
806
+ [ -44.055204644, -19.973258511 ],
807
+ [ -44.0550877, -19.973116453 ],
808
+ [ -44.0548917, -19.97291421 ],
809
+ [ -44.055001841, -19.972828204 ],
810
+ [ -44.05502119, -19.972809411 ],
811
+ [ -44.055039375, -19.972822408 ],
812
+ [ -44.055062986, -19.972829882 ],
813
+ [ -44.055091142, -19.972832729 ],
814
+ [ -44.05511827, -19.972825124 ],
815
+ [ -44.055138345, -19.972812318 ],
816
+ [ -44.055159121, -19.972795254 ],
817
+ [ -44.055171666, -19.972770065 ],
818
+ [ -44.055174959, -19.972743538 ],
819
+ [ -44.055169561, -19.972715368 ],
820
+ [ -44.055155991, -19.972692457 ],
821
+ [ -44.056270762, -19.971766324 ],
822
+ [ -44.056294725, -19.971745884 ],
823
+ [ -44.056616226, -19.972088543 ],
824
+ [ -44.056607912, -19.972096372 ],
825
+ [ -44.056591629, -19.972109443 ],
826
+ [ -44.056522033, -19.972166909 ],
827
+ [ -44.056192576, -19.972438946 ],
828
+ [ -44.056154388, -19.972503047 ],
829
+ [ -44.056128347, -19.972577302 ],
830
+ [ -44.056118987, -19.972659891 ],
831
+ [ -44.056122974, -19.973171344 ],
832
+ [ -44.056093545, -19.973180123 ],
833
+ [ -44.05593217, -19.973247894 ],
834
+ [ -44.055449809, -19.973622465 ],
835
+ [ -44.055442293, -19.973611307 ]
836
+ ]
837
+ ]
838
+ },
839
+ "properties" : {
840
+ "CD_SETOR" : "311860110080022P",
841
+ "AREA_KM2" : 0.015209,
842
+ "POP" : 508 }
843
+ },
844
+ {
845
+ "type" : "Feature",
846
+ "geometry" : {
847
+ "type" : "Polygon",
848
+ "coordinates" : [
849
+ [
850
+ [ -44.056616226, -19.972088543 ],
851
+ [ -44.056649162, -19.972058446 ],
852
+ [ -44.056707397, -19.972122775 ],
853
+ [ -44.056718178, -19.972134684 ],
854
+ [ -44.056806597, -19.97223109 ],
855
+ [ -44.056814726, -19.972239682 ],
856
+ [ -44.056813421, -19.972250616 ],
857
+ [ -44.056803322, -19.97233523 ],
858
+ [ -44.056784413, -19.972537343 ],
859
+ [ -44.056768346, -19.972737177 ],
860
+ [ -44.056760218, -19.973115024 ],
861
+ [ -44.057093383, -19.973407273 ],
862
+ [ -44.056962474, -19.973685076 ],
863
+ [ -44.055484792, -19.973676284 ],
864
+ [ -44.055449809, -19.973622465 ],
865
+ [ -44.05593217, -19.973247894 ],
866
+ [ -44.056093545, -19.973180123 ],
867
+ [ -44.056122974, -19.973171344 ],
868
+ [ -44.056118987, -19.972659891 ],
869
+ [ -44.056128347, -19.972577302 ],
870
+ [ -44.056154388, -19.972503047 ],
871
+ [ -44.056192576, -19.972438946 ],
872
+ [ -44.056522033, -19.972166909 ],
873
+ [ -44.056591629, -19.972109443 ],
874
+ [ -44.056607912, -19.972096372 ],
875
+ [ -44.056616226, -19.972088543 ]
876
+ ]
877
+ ]
878
+ },
879
+ "properties" : {
880
+ "CD_SETOR" : "311860110080023P",
881
+ "AREA_KM2" : 0.014562,
882
+ "POP" : 529 }
883
+ },
884
+ {
885
+ "type" : "Feature",
886
+ "geometry" : {
887
+ "type" : "Polygon",
888
+ "coordinates" : [
889
+ [
890
+ [ -44.056962474, -19.973685076 ],
891
+ [ -44.057093383, -19.973407273 ],
892
+ [ -44.056760218, -19.973115024 ],
893
+ [ -44.056768346, -19.972737177 ],
894
+ [ -44.056784413, -19.972537343 ],
895
+ [ -44.056803322, -19.97233523 ],
896
+ [ -44.056813421, -19.972250616 ],
897
+ [ -44.056814726, -19.972239682 ],
898
+ [ -44.056870273, -19.972298393 ],
899
+ [ -44.056936478, -19.972361438 ],
900
+ [ -44.056989652, -19.97240621 ],
901
+ [ -44.057059438, -19.972456265 ],
902
+ [ -44.057118516, -19.972491604 ],
903
+ [ -44.057181816, -19.972525051 ],
904
+ [ -44.057245039, -19.972557106 ],
905
+ [ -44.057322271, -19.97258932 ],
906
+ [ -44.057386917, -19.972610133 ],
907
+ [ -44.057457583, -19.972627472 ],
908
+ [ -44.057522625, -19.972643847 ],
909
+ [ -44.057601498, -19.972656791 ],
910
+ [ -44.057681551, -19.972663154 ],
911
+ [ -44.057759971, -19.972664219 ],
912
+ [ -44.057853973, -19.972663309 ],
913
+ [ -44.057919113, -19.972662678 ],
914
+ [ -44.057920778, -19.972662664 ],
915
+ [ -44.057919378, -19.972738725 ],
916
+ [ -44.057919732, -19.972840785 ],
917
+ [ -44.057920761, -19.973136843 ],
918
+ [ -44.05791332, -19.973245424 ],
919
+ [ -44.057894366, -19.973299583 ],
920
+ [ -44.0578737, -19.973347941 ],
921
+ [ -44.057838916, -19.973401548 ],
922
+ [ -44.058355975, -19.973401548 ],
923
+ [ -44.058353523, -19.974105581 ],
924
+ [ -44.058163908, -19.974154884 ],
925
+ [ -44.056965815, -19.974234669 ],
926
+ [ -44.056962474, -19.973685076 ]
927
+ ]
928
+ ]
929
+ },
930
+ "properties" : {
931
+ "CD_SETOR" : "311860110080024P",
932
+ "AREA_KM2" : 0.023212,
933
+ "POP" : 477 }
934
+ },
935
+ {
936
+ "type" : "Feature",
937
+ "geometry" : {
938
+ "type" : "Polygon",
939
+ "coordinates" : [
940
+ [
941
+ [ -44.057920778, -19.972662664 ],
942
+ [ -44.057972911, -19.972662214 ],
943
+ [ -44.057983815, -19.97266212 ],
944
+ [ -44.059116431, -19.972665268 ],
945
+ [ -44.059116174, -19.972674185 ],
946
+ [ -44.059116503, -19.972736415 ],
947
+ [ -44.059110274, -19.973892438 ],
948
+ [ -44.058353523, -19.974105581 ],
949
+ [ -44.058355975, -19.973401548 ],
950
+ [ -44.057838916, -19.973401548 ],
951
+ [ -44.0578737, -19.973347941 ],
952
+ [ -44.057894366, -19.973299583 ],
953
+ [ -44.05791332, -19.973245424 ],
954
+ [ -44.057920761, -19.973136843 ],
955
+ [ -44.057919732, -19.972840785 ],
956
+ [ -44.057919378, -19.972738725 ],
957
+ [ -44.057920778, -19.972662664 ]
958
+ ]
959
+ ]
960
+ },
961
+ "properties" : {
962
+ "CD_SETOR" : "311860110080025P",
963
+ "AREA_KM2" : 0.015526,
964
+ "POP" : 541 }
965
+ },
966
+ {
967
+ "type" : "Feature",
968
+ "geometry" : {
969
+ "type" : "Polygon",
970
+ "coordinates" : [
971
+ [
972
+ [ -44.053718577, -19.973042901 ],
973
+ [ -44.054033833, -19.972783151 ],
974
+ [ -44.054066234, -19.972747586 ],
975
+ [ -44.054087787, -19.972699192 ],
976
+ [ -44.054142273, -19.972723569 ],
977
+ [ -44.054198943, -19.972772155 ],
978
+ [ -44.054341015, -19.972942414 ],
979
+ [ -44.054457691, -19.973067754 ],
980
+ [ -44.054580602, -19.973182332 ],
981
+ [ -44.05484385, -19.973412438 ],
982
+ [ -44.054874982, -19.973442778 ],
983
+ [ -44.054902224, -19.973479239 ],
984
+ [ -44.054921028, -19.973518506 ],
985
+ [ -44.054932845, -19.973562475 ],
986
+ [ -44.054934835, -19.973604339 ],
987
+ [ -44.05492985, -19.973644983 ],
988
+ [ -44.05491628, -19.97368816 ],
989
+ [ -44.054896463, -19.973729262 ],
990
+ [ -44.054875425, -19.973767475 ],
991
+ [ -44.054709558, -19.974008185 ],
992
+ [ -44.054686795, -19.973992576 ],
993
+ [ -44.054148345, -19.973616913 ],
994
+ [ -44.054117146, -19.973581163 ],
995
+ [ -44.05401609, -19.973465371 ],
996
+ [ -44.053947992, -19.973387341 ],
997
+ [ -44.053710019, -19.973048689 ],
998
+ [ -44.053718577, -19.973042901 ]
999
+ ]
1000
+ ]
1001
+ },
1002
+ "properties" : {
1003
+ "CD_SETOR" : "311860110080026P",
1004
+ "AREA_KM2" : 0.008709,
1005
+ "POP" : 64 }
1006
+ },
1007
+ {
1008
+ "type" : "Feature",
1009
+ "geometry" : {
1010
+ "type" : "Polygon",
1011
+ "coordinates" : [
1012
+ [
1013
+ [ -44.055666133, -19.967003556 ],
1014
+ [ -44.055691315, -19.966902006 ],
1015
+ [ -44.055706114, -19.966824866 ],
1016
+ [ -44.055717715, -19.966755542 ],
1017
+ [ -44.055727407, -19.966441486 ],
1018
+ [ -44.055729412, -19.966365797 ],
1019
+ [ -44.055735639, -19.966214085 ],
1020
+ [ -44.05574206, -19.966169671 ],
1021
+ [ -44.055749335, -19.966130234 ],
1022
+ [ -44.055762178, -19.966088674 ],
1023
+ [ -44.055776375, -19.966050732 ],
1024
+ [ -44.055796025, -19.966007066 ],
1025
+ [ -44.055899975, -19.965779099 ],
1026
+ [ -44.055916664, -19.96573819 ],
1027
+ [ -44.057678408, -19.965914443 ],
1028
+ [ -44.057303715, -19.96653908 ],
1029
+ [ -44.056983684, -19.967083361 ],
1030
+ [ -44.056927113, -19.967145166 ],
1031
+ [ -44.057197356, -19.967359526 ],
1032
+ [ -44.057248735, -19.967398468 ],
1033
+ [ -44.057567098, -19.967719735 ],
1034
+ [ -44.057245545, -19.967867449 ],
1035
+ [ -44.057060807, -19.967957779 ],
1036
+ [ -44.057006459, -19.967982244 ],
1037
+ [ -44.05694173, -19.968016754 ],
1038
+ [ -44.056704118, -19.968158926 ],
1039
+ [ -44.056600898, -19.968221156 ],
1040
+ [ -44.056433863, -19.968331585 ],
1041
+ [ -44.056163702, -19.968521593 ],
1042
+ [ -44.056061428, -19.968598643 ],
1043
+ [ -44.055775935, -19.968827952 ],
1044
+ [ -44.055705671, -19.968884789 ],
1045
+ [ -44.055677823, -19.968913593 ],
1046
+ [ -44.055655613, -19.968945822 ],
1047
+ [ -44.055637061, -19.968993454 ],
1048
+ [ -44.055595801, -19.969128775 ],
1049
+ [ -44.055582175, -19.969167905 ],
1050
+ [ -44.055567622, -19.969197468 ],
1051
+ [ -44.055542151, -19.969239158 ],
1052
+ [ -44.055520141, -19.969217795 ],
1053
+ [ -44.05546945, -19.969168052 ],
1054
+ [ -44.055425703, -19.969138935 ],
1055
+ [ -44.055376912, -19.969123249 ],
1056
+ [ -44.055315148, -19.96911098 ],
1057
+ [ -44.055061792, -19.969065864 ],
1058
+ [ -44.055047634, -19.969042802 ],
1059
+ [ -44.055037353, -19.969001772 ],
1060
+ [ -44.055032651, -19.968963794 ],
1061
+ [ -44.055033095, -19.968930461 ],
1062
+ [ -44.055037208, -19.968889937 ],
1063
+ [ -44.055045193, -19.968851813 ],
1064
+ [ -44.05506482, -19.968803309 ],
1065
+ [ -44.055085572, -19.968758728 ],
1066
+ [ -44.055120799, -19.968677607 ],
1067
+ [ -44.055162901, -19.9685825 ],
1068
+ [ -44.055221984, -19.968450181 ],
1069
+ [ -44.055255088, -19.968375226 ],
1070
+ [ -44.055282977, -19.968290416 ],
1071
+ [ -44.055307573, -19.968215237 ],
1072
+ [ -44.05546964, -19.967639836 ],
1073
+ [ -44.055666133, -19.967003556 ]
1074
+ ]
1075
+ ]
1076
+ },
1077
+ "properties" : {
1078
+ "CD_SETOR" : "311860110080027P",
1079
+ "AREA_KM2" : 0.054848,
1080
+ "POP" : 438 }
1081
+ },
1082
+ {
1083
+ "type" : "Feature",
1084
+ "geometry" : {
1085
+ "type" : "Polygon",
1086
+ "coordinates" : [
1087
+ [
1088
+ [ -44.055992286, -19.971419998 ],
1089
+ [ -44.055936911, -19.971378861 ],
1090
+ [ -44.055886167, -19.97134055 ],
1091
+ [ -44.055685998, -19.97114633 ],
1092
+ [ -44.055614169, -19.971067714 ],
1093
+ [ -44.055494338, -19.970931674 ],
1094
+ [ -44.05544805, -19.97086458 ],
1095
+ [ -44.055387977, -19.970792615 ],
1096
+ [ -44.055344823, -19.970731329 ],
1097
+ [ -44.055317267, -19.970678688 ],
1098
+ [ -44.055301855, -19.970643787 ],
1099
+ [ -44.055289275, -19.970606334 ],
1100
+ [ -44.055280647, -19.970574679 ],
1101
+ [ -44.055272897, -19.970514419 ],
1102
+ [ -44.055267484, -19.970420679 ],
1103
+ [ -44.055272509, -19.970348266 ],
1104
+ [ -44.055284096, -19.970290227 ],
1105
+ [ -44.05529917, -19.970232287 ],
1106
+ [ -44.055327725, -19.970165902 ],
1107
+ [ -44.055359499, -19.970109018 ],
1108
+ [ -44.055395071, -19.970052277 ],
1109
+ [ -44.055442925, -19.96999442 ],
1110
+ [ -44.055490262, -19.96994531 ],
1111
+ [ -44.055542384, -19.969902683 ],
1112
+ [ -44.056517614, -19.969100658 ],
1113
+ [ -44.056731532, -19.968944723 ],
1114
+ [ -44.056912225, -19.968822277 ],
1115
+ [ -44.057076688, -19.968715663 ],
1116
+ [ -44.057195437, -19.968647626 ],
1117
+ [ -44.057374373, -19.968550351 ],
1118
+ [ -44.05756754, -19.968451606 ],
1119
+ [ -44.05788518, -19.969040025 ],
1120
+ [ -44.05820029, -19.96962002 ],
1121
+ [ -44.058233372, -19.969667514 ],
1122
+ [ -44.058201246, -19.969681464 ],
1123
+ [ -44.058162072, -19.969698475 ],
1124
+ [ -44.058087293, -19.969732581 ],
1125
+ [ -44.057900751, -19.969829113 ],
1126
+ [ -44.057716107, -19.969948715 ],
1127
+ [ -44.057561922, -19.970054964 ],
1128
+ [ -44.05730448, -19.970257532 ],
1129
+ [ -44.056810503, -19.970670445 ],
1130
+ [ -44.056614572, -19.970833163 ],
1131
+ [ -44.0565693, -19.970870761 ],
1132
+ [ -44.05644372, -19.970989699 ],
1133
+ [ -44.056355168, -19.971070048 ],
1134
+ [ -44.056314736, -19.971099511 ],
1135
+ [ -44.056290588, -19.971117107 ],
1136
+ [ -44.056258477, -19.971098655 ],
1137
+ [ -44.056214506, -19.971084135 ],
1138
+ [ -44.056168753, -19.97107855 ],
1139
+ [ -44.05613218, -19.971078197 ],
1140
+ [ -44.056103554, -19.971081655 ],
1141
+ [ -44.056071553, -19.971092678 ],
1142
+ [ -44.056042091, -19.971106755 ],
1143
+ [ -44.056014898, -19.971126962 ],
1144
+ [ -44.055991985, -19.971149276 ],
1145
+ [ -44.055975299, -19.971173153 ],
1146
+ [ -44.055961175, -19.971199275 ],
1147
+ [ -44.055950969, -19.971228982 ],
1148
+ [ -44.055946586, -19.971259081 ],
1149
+ [ -44.055945354, -19.971295661 ],
1150
+ [ -44.055950225, -19.971325425 ],
1151
+ [ -44.055959032, -19.971358489 ],
1152
+ [ -44.055974662, -19.971389513 ],
1153
+ [ -44.055992286, -19.971419998 ]
1154
+ ]
1155
+ ]
1156
+ },
1157
+ "properties" : {
1158
+ "CD_SETOR" : "311860110080028P",
1159
+ "AREA_KM2" : 0.047675,
1160
+ "POP" : 379 }
1161
+ },
1162
+ {
1163
+ "type" : "Feature",
1164
+ "geometry" : {
1165
+ "type" : "Polygon",
1166
+ "coordinates" : [
1167
+ [
1168
+ [ -44.059258667, -19.967079626 ],
1169
+ [ -44.059198866, -19.967134334 ],
1170
+ [ -44.059138258, -19.967182363 ],
1171
+ [ -44.059076284, -19.96722255 ],
1172
+ [ -44.058999351, -19.967257715 ],
1173
+ [ -44.058922511, -19.967286569 ],
1174
+ [ -44.058135999, -19.967512068 ],
1175
+ [ -44.057982211, -19.967559179 ],
1176
+ [ -44.057964374, -19.967491939 ],
1177
+ [ -44.05794708, -19.967405362 ],
1178
+ [ -44.05793571, -19.967326718 ],
1179
+ [ -44.057935047, -19.967258578 ],
1180
+ [ -44.057939461, -19.967199241 ],
1181
+ [ -44.057958181, -19.967119255 ],
1182
+ [ -44.058016581, -19.966982967 ],
1183
+ [ -44.058151918, -19.966754541 ],
1184
+ [ -44.058197674, -19.966689919 ],
1185
+ [ -44.058250118, -19.966620117 ],
1186
+ [ -44.058299845, -19.966568593 ],
1187
+ [ -44.058345558, -19.966525594 ],
1188
+ [ -44.058391351, -19.966501016 ],
1189
+ [ -44.058432945, -19.966483145 ],
1190
+ [ -44.058479292, -19.966467508 ],
1191
+ [ -44.058534381, -19.966454472 ],
1192
+ [ -44.05902952, -19.966356928 ],
1193
+ [ -44.059082161, -19.966600729 ],
1194
+ [ -44.059134559, -19.966765211 ],
1195
+ [ -44.059201645, -19.966944017 ],
1196
+ [ -44.059258667, -19.967079626 ]
1197
+ ]
1198
+ ]
1199
+ },
1200
+ "properties" : {
1201
+ "CD_SETOR" : "311860110080031P",
1202
+ "AREA_KM2" : 0.011739,
1203
+ "POP" : 327 }
1204
+ },
1205
+ {
1206
+ "type" : "Feature",
1207
+ "geometry" : {
1208
+ "type" : "Polygon",
1209
+ "coordinates" : [
1210
+ [
1211
+ [ -44.055013203, -19.963684168 ],
1212
+ [ -44.05505376, -19.963611993 ],
1213
+ [ -44.055090981, -19.963571618 ],
1214
+ [ -44.055263688, -19.96337691 ],
1215
+ [ -44.055333643, -19.963287723 ],
1216
+ [ -44.055376093, -19.963222202 ],
1217
+ [ -44.055414832, -19.963157493 ],
1218
+ [ -44.055450271, -19.963081816 ],
1219
+ [ -44.055474504, -19.963002814 ],
1220
+ [ -44.05549315, -19.962921174 ],
1221
+ [ -44.055503086, -19.962854918 ],
1222
+ [ -44.055504024, -19.962787704 ],
1223
+ [ -44.05550099, -19.962713469 ],
1224
+ [ -44.055493442, -19.962632844 ],
1225
+ [ -44.055481163, -19.962554991 ],
1226
+ [ -44.055266552, -19.961737111 ],
1227
+ [ -44.055081661, -19.961028113 ],
1228
+ [ -44.056076054, -19.961121817 ],
1229
+ [ -44.056909234, -19.96117511 ],
1230
+ [ -44.05691153, -19.961224732 ],
1231
+ [ -44.056923647, -19.961325485 ],
1232
+ [ -44.056941664, -19.96140555 ],
1233
+ [ -44.057103527, -19.961917679 ],
1234
+ [ -44.057323208, -19.962614469 ],
1235
+ [ -44.057538962, -19.963275718 ],
1236
+ [ -44.057759706, -19.963963625 ],
1237
+ [ -44.055772391, -19.963736818 ],
1238
+ [ -44.055347324, -19.963680841 ],
1239
+ [ -44.055206406, -19.963670313 ],
1240
+ [ -44.05513612, -19.96366982 ],
1241
+ [ -44.055073795, -19.963675041 ],
1242
+ [ -44.055013203, -19.963684168 ]
1243
+ ]
1244
+ ]
1245
+ },
1246
+ "properties" : {
1247
+ "CD_SETOR" : "311860110080032P",
1248
+ "AREA_KM2" : 0.06159,
1249
+ "POP" : 568 }
1250
+ },
1251
+ {
1252
+ "type" : "Feature",
1253
+ "geometry" : {
1254
+ "type" : "Polygon",
1255
+ "coordinates" : [
1256
+ [
1257
+ [ -44.054305555, -19.959135019 ],
1258
+ [ -44.054860731, -19.958766595 ],
1259
+ [ -44.055039901, -19.958660268 ],
1260
+ [ -44.055088591, -19.958729102 ],
1261
+ [ -44.05513739, -19.958796152 ],
1262
+ [ -44.0553201, -19.959047197 ],
1263
+ [ -44.055346323, -19.959066546 ],
1264
+ [ -44.055372235, -19.959076364 ],
1265
+ [ -44.055397977, -19.959082214 ],
1266
+ [ -44.055426419, -19.959086547 ],
1267
+ [ -44.05624894, -19.959172816 ],
1268
+ [ -44.056281651, -19.95918424 ],
1269
+ [ -44.056309442, -19.959199375 ],
1270
+ [ -44.056650185, -19.959501523 ],
1271
+ [ -44.056693162, -19.959543914 ],
1272
+ [ -44.056727354, -19.959582539 ],
1273
+ [ -44.056750506, -19.959615494 ],
1274
+ [ -44.056770728, -19.959655736 ],
1275
+ [ -44.056783196, -19.95969729 ],
1276
+ [ -44.05678969, -19.95973436 ],
1277
+ [ -44.056793457, -19.959781013 ],
1278
+ [ -44.056793837, -19.959837948 ],
1279
+ [ -44.056793083, -19.96041182 ],
1280
+ [ -44.056795966, -19.960476474 ],
1281
+ [ -44.056804051, -19.960554931 ],
1282
+ [ -44.056810709, -19.96062611 ],
1283
+ [ -44.056821074, -19.960707337 ],
1284
+ [ -44.056837743, -19.96079882 ],
1285
+ [ -44.056854487, -19.960896892 ],
1286
+ [ -44.056909234, -19.96117511 ],
1287
+ [ -44.056076054, -19.961121817 ],
1288
+ [ -44.055081661, -19.961028113 ],
1289
+ [ -44.054910564, -19.960350818 ],
1290
+ [ -44.054848445, -19.960113315 ],
1291
+ [ -44.054821389, -19.960020142 ],
1292
+ [ -44.054790684, -19.959927407 ],
1293
+ [ -44.054750627, -19.959827536 ],
1294
+ [ -44.05467117, -19.95964255 ],
1295
+ [ -44.054611036, -19.959548662 ],
1296
+ [ -44.054439872, -19.959271151 ],
1297
+ [ -44.054399492, -19.959251339 ],
1298
+ [ -44.054373215, -19.959218801 ],
1299
+ [ -44.054305555, -19.959135019 ]
1300
+ ]
1301
+ ]
1302
+ },
1303
+ "properties" : {
1304
+ "CD_SETOR" : "311860110080033P",
1305
+ "AREA_KM2" : 0.047285,
1306
+ "POP" : 326 }
1307
+ },
1308
+ {
1309
+ "type" : "Feature",
1310
+ "geometry" : {
1311
+ "type" : "Polygon",
1312
+ "coordinates" : [
1313
+ [
1314
+ [ -44.06263978, -19.969094439 ],
1315
+ [ -44.06323258, -19.968931024 ],
1316
+ [ -44.063298536, -19.968918179 ],
1317
+ [ -44.063358143, -19.968909774 ],
1318
+ [ -44.063433442, -19.968906185 ],
1319
+ [ -44.063508288, -19.968909802 ],
1320
+ [ -44.063564737, -19.968916504 ],
1321
+ [ -44.063637718, -19.968928779 ],
1322
+ [ -44.063690207, -19.968939415 ],
1323
+ [ -44.063744036, -19.968953865 ],
1324
+ [ -44.064384511, -19.969165958 ],
1325
+ [ -44.06436549, -19.969265267 ],
1326
+ [ -44.064342975, -19.969395147 ],
1327
+ [ -44.06433972, -19.969491591 ],
1328
+ [ -44.064341179, -19.969560987 ],
1329
+ [ -44.064347107, -19.969629241 ],
1330
+ [ -44.064357695, -19.969699203 ],
1331
+ [ -44.064370973, -19.969763389 ],
1332
+ [ -44.064385361, -19.969816803 ],
1333
+ [ -44.064419425, -19.9699366 ],
1334
+ [ -44.065096417, -19.972090594 ],
1335
+ [ -44.065123459, -19.972178831 ],
1336
+ [ -44.065143673, -19.972245869 ],
1337
+ [ -44.065079453, -19.972254751 ],
1338
+ [ -44.064974857, -19.972280843 ],
1339
+ [ -44.064428095, -19.972426094 ],
1340
+ [ -44.063717046, -19.972620896 ],
1341
+ [ -44.063180776, -19.970857543 ],
1342
+ [ -44.06263978, -19.969094439 ]
1343
+ ]
1344
+ ]
1345
+ },
1346
+ "properties" : {
1347
+ "CD_SETOR" : "311860110080034P",
1348
+ "AREA_KM2" : 0.061633,
1349
+ "POP" : 339 }
1350
+ },
1351
+ {
1352
+ "type" : "Feature",
1353
+ "geometry" : {
1354
+ "type" : "Polygon",
1355
+ "coordinates" : [
1356
+ [
1357
+ [ -44.061111505, -19.969501996 ],
1358
+ [ -44.06112224, -19.969499319 ],
1359
+ [ -44.061158037, -19.969490391 ],
1360
+ [ -44.061965477, -19.969276633 ],
1361
+ [ -44.06263978, -19.969094439 ],
1362
+ [ -44.063180776, -19.970857543 ],
1363
+ [ -44.063717046, -19.972620896 ],
1364
+ [ -44.063038271, -19.972800966 ],
1365
+ [ -44.062932894, -19.97245384 ],
1366
+ [ -44.06254278, -19.972555464 ],
1367
+ [ -44.06251881, -19.972561894 ],
1368
+ [ -44.062496712, -19.972563585 ],
1369
+ [ -44.062484782, -19.972555477 ],
1370
+ [ -44.062471119, -19.972537215 ],
1371
+ [ -44.062414798, -19.972478516 ],
1372
+ [ -44.062395357, -19.972496265 ],
1373
+ [ -44.062371884, -19.972506891 ],
1374
+ [ -44.062343034, -19.972511811 ],
1375
+ [ -44.062317638, -19.972508063 ],
1376
+ [ -44.062298815, -19.972499013 ],
1377
+ [ -44.06228083, -19.972485374 ],
1378
+ [ -44.062266778, -19.972465411 ],
1379
+ [ -44.062257426, -19.972444437 ],
1380
+ [ -44.062253639, -19.972421446 ],
1381
+ [ -44.062255798, -19.972404472 ],
1382
+ [ -44.062259542, -19.972389981 ],
1383
+ [ -44.062207291, -19.972363366 ],
1384
+ [ -44.061637394, -19.972096067 ],
1385
+ [ -44.061598151, -19.972078311 ],
1386
+ [ -44.06161593, -19.972040627 ],
1387
+ [ -44.061661268, -19.971924127 ],
1388
+ [ -44.06169187, -19.971801549 ],
1389
+ [ -44.061707888, -19.971703047 ],
1390
+ [ -44.061710626, -19.971620676 ],
1391
+ [ -44.061707031, -19.971513106 ],
1392
+ [ -44.06168817, -19.971425982 ],
1393
+ [ -44.061677582, -19.971378202 ],
1394
+ [ -44.061643011, -19.971247273 ],
1395
+ [ -44.061487499, -19.970735215 ],
1396
+ [ -44.061317092, -19.970174113 ],
1397
+ [ -44.061209759, -19.969823215 ],
1398
+ [ -44.061111505, -19.969501996 ]
1399
+ ]
1400
+ ]
1401
+ },
1402
+ "properties" : {
1403
+ "CD_SETOR" : "311860110080035P",
1404
+ "AREA_KM2" : 0.063842,
1405
+ "POP" : 770 }
1406
+ },
1407
+ {
1408
+ "type" : "Feature",
1409
+ "geometry" : {
1410
+ "type" : "Polygon",
1411
+ "coordinates" : [
1412
+ [
1413
+ [ -44.059431429, -19.971705073 ],
1414
+ [ -44.059436015, -19.97161081 ],
1415
+ [ -44.060586454, -19.971613564 ],
1416
+ [ -44.060581781, -19.971786447 ],
1417
+ [ -44.060992621, -19.971779812 ],
1418
+ [ -44.061446766, -19.971981092 ],
1419
+ [ -44.06152734, -19.972009449 ],
1420
+ [ -44.06161593, -19.972040627 ],
1421
+ [ -44.061598151, -19.972078311 ],
1422
+ [ -44.061586275, -19.972098847 ],
1423
+ [ -44.061561457, -19.972141762 ],
1424
+ [ -44.061524462, -19.972194058 ],
1425
+ [ -44.061486175, -19.972243685 ],
1426
+ [ -44.061448075, -19.972288253 ],
1427
+ [ -44.061396135, -19.972343514 ],
1428
+ [ -44.061335063, -19.972409083 ],
1429
+ [ -44.061292221, -19.972450763 ],
1430
+ [ -44.061282467, -19.972460252 ],
1431
+ [ -44.06123147, -19.972496915 ],
1432
+ [ -44.06117936, -19.972521978 ],
1433
+ [ -44.061138749, -19.972536826 ],
1434
+ [ -44.061120067, -19.972543657 ],
1435
+ [ -44.061046287, -19.972571179 ],
1436
+ [ -44.060948973, -19.97260353 ],
1437
+ [ -44.060861686, -19.972629147 ],
1438
+ [ -44.060789148, -19.972646153 ],
1439
+ [ -44.06071243, -19.9726559 ],
1440
+ [ -44.060609755, -19.972663016 ],
1441
+ [ -44.059505387, -19.972662456 ],
1442
+ [ -44.05944601, -19.972662426 ],
1443
+ [ -44.059442054, -19.97262633 ],
1444
+ [ -44.059444543, -19.971966016 ],
1445
+ [ -44.059444277, -19.971869018 ],
1446
+ [ -44.059439435, -19.971782414 ],
1447
+ [ -44.059431429, -19.971705073 ]
1448
+ ]
1449
+ ]
1450
+ },
1451
+ "properties" : {
1452
+ "CD_SETOR" : "311860110080036P",
1453
+ "AREA_KM2" : 0.02142,
1454
+ "POP" : 517 }
1455
+ },
1456
+ {
1457
+ "type" : "Feature",
1458
+ "geometry" : {
1459
+ "type" : "Polygon",
1460
+ "coordinates" : [
1461
+ [
1462
+ [ -44.058233372, -19.969667514 ],
1463
+ [ -44.058262873, -19.969653452 ],
1464
+ [ -44.058295187, -19.969638048 ],
1465
+ [ -44.058510993, -19.969550645 ],
1466
+ [ -44.058673122, -19.969492764 ],
1467
+ [ -44.058832041, -19.969440194 ],
1468
+ [ -44.059063597, -19.969370817 ],
1469
+ [ -44.05927632, -19.969311619 ],
1470
+ [ -44.059471536, -19.969258 ],
1471
+ [ -44.059601932, -19.969219264 ],
1472
+ [ -44.059742575, -19.969172924 ],
1473
+ [ -44.05992459, -19.969094932 ],
1474
+ [ -44.060077453, -19.969026097 ],
1475
+ [ -44.060201599, -19.968956767 ],
1476
+ [ -44.060311848, -19.969212042 ],
1477
+ [ -44.060389046, -19.969491704 ],
1478
+ [ -44.059744604, -19.969491335 ],
1479
+ [ -44.059746759, -19.97052001 ],
1480
+ [ -44.059744026, -19.97110922 ],
1481
+ [ -44.059722776, -19.971159234 ],
1482
+ [ -44.059671212, -19.97122803 ],
1483
+ [ -44.059556927, -19.971336285 ],
1484
+ [ -44.059515182, -19.971381814 ],
1485
+ [ -44.059444608, -19.97148861 ],
1486
+ [ -44.059436015, -19.97161081 ],
1487
+ [ -44.059431429, -19.971705073 ],
1488
+ [ -44.059317409, -19.971501658 ],
1489
+ [ -44.059019605, -19.970996228 ],
1490
+ [ -44.058565971, -19.970224374 ],
1491
+ [ -44.058561643, -19.970217009 ],
1492
+ [ -44.058266259, -19.969715997 ],
1493
+ [ -44.058233372, -19.969667514 ]
1494
+ ]
1495
+ ]
1496
+ },
1497
+ "properties" : {
1498
+ "CD_SETOR" : "311860110080037P",
1499
+ "AREA_KM2" : 0.027539,
1500
+ "POP" : 130 }
1501
+ },
1502
+ {
1503
+ "type" : "Feature",
1504
+ "geometry" : {
1505
+ "type" : "Polygon",
1506
+ "coordinates" : [
1507
+ [
1508
+ [ -44.060549437, -19.970379507 ],
1509
+ [ -44.061317092, -19.970174113 ],
1510
+ [ -44.061487499, -19.970735215 ],
1511
+ [ -44.061643011, -19.971247273 ],
1512
+ [ -44.061677582, -19.971378202 ],
1513
+ [ -44.061571316, -19.971383838 ],
1514
+ [ -44.060580999, -19.971357975 ],
1515
+ [ -44.060552176, -19.970521848 ],
1516
+ [ -44.060549437, -19.970379507 ]
1517
+ ]
1518
+ ]
1519
+ },
1520
+ "properties" : {
1521
+ "CD_SETOR" : "311860110080038P",
1522
+ "AREA_KM2" : 0.012088,
1523
+ "POP" : 466 }
1524
+ },
1525
+ {
1526
+ "type" : "Feature",
1527
+ "geometry" : {
1528
+ "type" : "Polygon",
1529
+ "coordinates" : [
1530
+ [
1531
+ [ -44.060586454, -19.971613564 ],
1532
+ [ -44.060580999, -19.971357975 ],
1533
+ [ -44.061571316, -19.971383838 ],
1534
+ [ -44.061677582, -19.971378202 ],
1535
+ [ -44.06168817, -19.971425982 ],
1536
+ [ -44.061707031, -19.971513106 ],
1537
+ [ -44.061710626, -19.971620676 ],
1538
+ [ -44.061707888, -19.971703047 ],
1539
+ [ -44.06169187, -19.971801549 ],
1540
+ [ -44.061661268, -19.971924127 ],
1541
+ [ -44.06161593, -19.972040627 ],
1542
+ [ -44.06152734, -19.972009449 ],
1543
+ [ -44.061446766, -19.971981092 ],
1544
+ [ -44.060992621, -19.971779812 ],
1545
+ [ -44.060581781, -19.971786447 ],
1546
+ [ -44.060586454, -19.971613564 ]
1547
+ ]
1548
+ ]
1549
+ },
1550
+ "properties" : {
1551
+ "CD_SETOR" : "311860110080039P",
1552
+ "AREA_KM2" : 0.006417,
1553
+ "POP" : 276 }
1554
+ },
1555
+ {
1556
+ "type" : "Feature",
1557
+ "geometry" : {
1558
+ "type" : "Polygon",
1559
+ "coordinates" : [
1560
+ [
1561
+ [ -44.059746759, -19.97052001 ],
1562
+ [ -44.059744604, -19.969491335 ],
1563
+ [ -44.060389046, -19.969491704 ],
1564
+ [ -44.060447568, -19.969697778 ],
1565
+ [ -44.060549437, -19.970379507 ],
1566
+ [ -44.060552176, -19.970521848 ],
1567
+ [ -44.060522612, -19.970522943 ],
1568
+ [ -44.060217429, -19.970521622 ],
1569
+ [ -44.059958486, -19.970517658 ],
1570
+ [ -44.059746759, -19.97052001 ]
1571
+ ]
1572
+ ]
1573
+ },
1574
+ "properties" : {
1575
+ "CD_SETOR" : "311860110080040P",
1576
+ "AREA_KM2" : 0.00887,
1577
+ "POP" : 244 }
1578
+ },
1579
+ {
1580
+ "type" : "Feature",
1581
+ "geometry" : {
1582
+ "type" : "Polygon",
1583
+ "coordinates" : [
1584
+ [
1585
+ [ -44.059746759, -19.97052001 ],
1586
+ [ -44.059958486, -19.970517658 ],
1587
+ [ -44.060217429, -19.970521622 ],
1588
+ [ -44.060522612, -19.970522943 ],
1589
+ [ -44.060552176, -19.970521848 ],
1590
+ [ -44.060580999, -19.971357975 ],
1591
+ [ -44.060586454, -19.971613564 ],
1592
+ [ -44.059436015, -19.97161081 ],
1593
+ [ -44.059444608, -19.97148861 ],
1594
+ [ -44.059515182, -19.971381814 ],
1595
+ [ -44.059556927, -19.971336285 ],
1596
+ [ -44.059671212, -19.97122803 ],
1597
+ [ -44.059722776, -19.971159234 ],
1598
+ [ -44.059744026, -19.97110922 ],
1599
+ [ -44.059746759, -19.97052001 ]
1600
+ ]
1601
+ ]
1602
+ },
1603
+ "properties" : {
1604
+ "CD_SETOR" : "311860110080041P",
1605
+ "AREA_KM2" : 0.011524,
1606
+ "POP" : 407 }
1607
+ },
1608
+ {
1609
+ "type" : "Feature",
1610
+ "geometry" : {
1611
+ "type" : "Polygon",
1612
+ "coordinates" : [
1613
+ [
1614
+ [ -44.05944601, -19.972662426 ],
1615
+ [ -44.059505387, -19.972662456 ],
1616
+ [ -44.060609755, -19.972663016 ],
1617
+ [ -44.06071243, -19.9726559 ],
1618
+ [ -44.060789148, -19.972646153 ],
1619
+ [ -44.060861686, -19.972629147 ],
1620
+ [ -44.060948973, -19.97260353 ],
1621
+ [ -44.061046287, -19.972571179 ],
1622
+ [ -44.061120067, -19.972543657 ],
1623
+ [ -44.061138749, -19.972536826 ],
1624
+ [ -44.06117936, -19.972521978 ],
1625
+ [ -44.06123147, -19.972496915 ],
1626
+ [ -44.06128296, -19.972559749 ],
1627
+ [ -44.06129146, -19.972570122 ],
1628
+ [ -44.061350324, -19.972658844 ],
1629
+ [ -44.061404879, -19.972737792 ],
1630
+ [ -44.061434373, -19.972785349 ],
1631
+ [ -44.061463523, -19.972840139 ],
1632
+ [ -44.061483416, -19.972885413 ],
1633
+ [ -44.061511351, -19.97295762 ],
1634
+ [ -44.061516833, -19.972980326 ],
1635
+ [ -44.061528449, -19.973028448 ],
1636
+ [ -44.061560618, -19.973172021 ],
1637
+ [ -44.061575081, -19.973236876 ],
1638
+ [ -44.06158557, -19.973310504 ],
1639
+ [ -44.061589811, -19.973377262 ],
1640
+ [ -44.061594498, -19.9734397 ],
1641
+ [ -44.061614266, -19.973703047 ],
1642
+ [ -44.061620272, -19.973768968 ],
1643
+ [ -44.061574987, -19.973774483 ],
1644
+ [ -44.061303591, -19.973796488 ],
1645
+ [ -44.061266108, -19.973799527 ],
1646
+ [ -44.061213002, -19.973808445 ],
1647
+ [ -44.061063221, -19.973833598 ],
1648
+ [ -44.060679594, -19.973898021 ],
1649
+ [ -44.060621452, -19.973907785 ],
1650
+ [ -44.060311979, -19.973978312 ],
1651
+ [ -44.059749617, -19.974106471 ],
1652
+ [ -44.059529121, -19.974162377 ],
1653
+ [ -44.059512242, -19.974166656 ],
1654
+ [ -44.059205938, -19.9742312 ],
1655
+ [ -44.058435222, -19.974393603 ],
1656
+ [ -44.056832246, -19.974731379 ],
1657
+ [ -44.056331363, -19.974568592 ],
1658
+ [ -44.055939132, -19.974499474 ],
1659
+ [ -44.055910311, -19.974494289 ],
1660
+ [ -44.055868762, -19.974486814 ],
1661
+ [ -44.05587546, -19.974334444 ],
1662
+ [ -44.055428755, -19.97362912 ],
1663
+ [ -44.055442293, -19.973611307 ],
1664
+ [ -44.055449809, -19.973622465 ],
1665
+ [ -44.055484792, -19.973676284 ],
1666
+ [ -44.056962474, -19.973685076 ],
1667
+ [ -44.056965815, -19.974234669 ],
1668
+ [ -44.058163908, -19.974154884 ],
1669
+ [ -44.058353523, -19.974105581 ],
1670
+ [ -44.059110274, -19.973892438 ],
1671
+ [ -44.059116503, -19.972736415 ],
1672
+ [ -44.059116174, -19.972674185 ],
1673
+ [ -44.059116431, -19.972665268 ],
1674
+ [ -44.059400624, -19.972662818 ],
1675
+ [ -44.05944601, -19.972662426 ]
1676
+ ]
1677
+ ]
1678
+ },
1679
+ "properties" : {
1680
+ "CD_SETOR" : "311860110080042P",
1681
+ "AREA_KM2" : 0.060028,
1682
+ "POP" : 265 }
1683
+ },
1684
+ {
1685
+ "type" : "Feature",
1686
+ "geometry" : {
1687
+ "type" : "Polygon",
1688
+ "coordinates" : [
1689
+ [
1690
+ [ -44.055542151, -19.969239158 ],
1691
+ [ -44.055567622, -19.969197468 ],
1692
+ [ -44.055582175, -19.969167905 ],
1693
+ [ -44.055595801, -19.969128775 ],
1694
+ [ -44.055637061, -19.968993454 ],
1695
+ [ -44.055655613, -19.968945822 ],
1696
+ [ -44.055677823, -19.968913593 ],
1697
+ [ -44.055705671, -19.968884789 ],
1698
+ [ -44.055775935, -19.968827952 ],
1699
+ [ -44.056061428, -19.968598643 ],
1700
+ [ -44.056163702, -19.968521593 ],
1701
+ [ -44.056433863, -19.968331585 ],
1702
+ [ -44.056600898, -19.968221156 ],
1703
+ [ -44.056704118, -19.968158926 ],
1704
+ [ -44.05694173, -19.968016754 ],
1705
+ [ -44.057006459, -19.967982244 ],
1706
+ [ -44.057060807, -19.967957779 ],
1707
+ [ -44.057245545, -19.967867449 ],
1708
+ [ -44.05756754, -19.968451606 ],
1709
+ [ -44.057374373, -19.968550351 ],
1710
+ [ -44.057195437, -19.968647626 ],
1711
+ [ -44.057076688, -19.968715663 ],
1712
+ [ -44.056912225, -19.968822277 ],
1713
+ [ -44.056731532, -19.968944723 ],
1714
+ [ -44.056517614, -19.969100658 ],
1715
+ [ -44.055542384, -19.969902683 ],
1716
+ [ -44.055490262, -19.96994531 ],
1717
+ [ -44.055442925, -19.96999442 ],
1718
+ [ -44.055395071, -19.970052277 ],
1719
+ [ -44.055359499, -19.970109018 ],
1720
+ [ -44.055327725, -19.970165902 ],
1721
+ [ -44.05529917, -19.970232287 ],
1722
+ [ -44.055284096, -19.970290227 ],
1723
+ [ -44.055272509, -19.970348266 ],
1724
+ [ -44.055267484, -19.970420679 ],
1725
+ [ -44.055272897, -19.970514419 ],
1726
+ [ -44.055280647, -19.970574679 ],
1727
+ [ -44.055289275, -19.970606334 ],
1728
+ [ -44.055301855, -19.970643787 ],
1729
+ [ -44.055317267, -19.970678688 ],
1730
+ [ -44.055344823, -19.970731329 ],
1731
+ [ -44.055387977, -19.970792615 ],
1732
+ [ -44.05544805, -19.97086458 ],
1733
+ [ -44.055494338, -19.970931674 ],
1734
+ [ -44.055614169, -19.971067714 ],
1735
+ [ -44.055685998, -19.97114633 ],
1736
+ [ -44.055886167, -19.97134055 ],
1737
+ [ -44.055936911, -19.971378861 ],
1738
+ [ -44.055992286, -19.971419998 ],
1739
+ [ -44.056009807, -19.971433837 ],
1740
+ [ -44.056037931, -19.97148333 ],
1741
+ [ -44.056072923, -19.971524676 ],
1742
+ [ -44.05611403, -19.971564595 ],
1743
+ [ -44.056294725, -19.971745884 ],
1744
+ [ -44.056270762, -19.971766324 ],
1745
+ [ -44.055155991, -19.972692457 ],
1746
+ [ -44.055169561, -19.972715368 ],
1747
+ [ -44.055174959, -19.972743538 ],
1748
+ [ -44.055171666, -19.972770065 ],
1749
+ [ -44.055159121, -19.972795254 ],
1750
+ [ -44.055138345, -19.972812318 ],
1751
+ [ -44.05511827, -19.972825124 ],
1752
+ [ -44.055091142, -19.972832729 ],
1753
+ [ -44.055062986, -19.972829882 ],
1754
+ [ -44.055039375, -19.972822408 ],
1755
+ [ -44.05502119, -19.972809411 ],
1756
+ [ -44.055001841, -19.972828204 ],
1757
+ [ -44.0548917, -19.97291421 ],
1758
+ [ -44.0550877, -19.973116453 ],
1759
+ [ -44.055204644, -19.973258511 ],
1760
+ [ -44.055442293, -19.973611307 ],
1761
+ [ -44.055428755, -19.97362912 ],
1762
+ [ -44.05587546, -19.974334444 ],
1763
+ [ -44.055868762, -19.974486814 ],
1764
+ [ -44.055845586, -19.974482645 ],
1765
+ [ -44.055780861, -19.974471001 ],
1766
+ [ -44.055743785, -19.974464331 ],
1767
+ [ -44.055395258, -19.974378958 ],
1768
+ [ -44.055363236, -19.974367338 ],
1769
+ [ -44.055246001, -19.974324799 ],
1770
+ [ -44.055126518, -19.974277006 ],
1771
+ [ -44.055115943, -19.974271356 ],
1772
+ [ -44.055053833, -19.974238174 ],
1773
+ [ -44.054838764, -19.974096786 ],
1774
+ [ -44.054709558, -19.974008185 ],
1775
+ [ -44.054875425, -19.973767475 ],
1776
+ [ -44.054896463, -19.973729262 ],
1777
+ [ -44.05491628, -19.97368816 ],
1778
+ [ -44.05492985, -19.973644983 ],
1779
+ [ -44.054934835, -19.973604339 ],
1780
+ [ -44.054932845, -19.973562475 ],
1781
+ [ -44.054921028, -19.973518506 ],
1782
+ [ -44.054902224, -19.973479239 ],
1783
+ [ -44.054874982, -19.973442778 ],
1784
+ [ -44.05484385, -19.973412438 ],
1785
+ [ -44.054580602, -19.973182332 ],
1786
+ [ -44.054457691, -19.973067754 ],
1787
+ [ -44.054341015, -19.972942414 ],
1788
+ [ -44.054198943, -19.972772155 ],
1789
+ [ -44.054142273, -19.972723569 ],
1790
+ [ -44.054087787, -19.972699192 ],
1791
+ [ -44.054090568, -19.972652559 ],
1792
+ [ -44.054087907, -19.972596119 ],
1793
+ [ -44.054083367, -19.972524294 ],
1794
+ [ -44.054056113, -19.971868469 ],
1795
+ [ -44.054041989, -19.971548964 ],
1796
+ [ -44.054044399, -19.971480314 ],
1797
+ [ -44.054053078, -19.971401383 ],
1798
+ [ -44.054068964, -19.971327537 ],
1799
+ [ -44.054087083, -19.971264894 ],
1800
+ [ -44.054106267, -19.971206754 ],
1801
+ [ -44.054181787, -19.971013322 ],
1802
+ [ -44.054200001, -19.970967179 ],
1803
+ [ -44.054220074, -19.970920061 ],
1804
+ [ -44.05424674, -19.970879691 ],
1805
+ [ -44.054279895, -19.970836305 ],
1806
+ [ -44.05432125, -19.970791385 ],
1807
+ [ -44.054359049, -19.970750936 ],
1808
+ [ -44.054830916, -19.970259558 ],
1809
+ [ -44.05489075, -19.970189583 ],
1810
+ [ -44.054944579, -19.970124107 ],
1811
+ [ -44.055018839, -19.970016287 ],
1812
+ [ -44.055348733, -19.969496976 ],
1813
+ [ -44.055460479, -19.969340265 ],
1814
+ [ -44.055542151, -19.969239158 ]
1815
+ ]
1816
+ ]
1817
+ },
1818
+ "properties" : {
1819
+ "CD_SETOR" : "311860110080043P",
1820
+ "AREA_KM2" : 0.076047,
1821
+ "POP" : 804 }
1822
+ },
1823
+ {
1824
+ "type" : "Feature",
1825
+ "geometry" : {
1826
+ "type" : "Polygon",
1827
+ "coordinates" : [
1828
+ [
1829
+ [ -44.057912815, -19.971591804 ],
1830
+ [ -44.058984031, -19.971014401 ],
1831
+ [ -44.059019605, -19.970996228 ],
1832
+ [ -44.059317409, -19.971501658 ],
1833
+ [ -44.059431429, -19.971705073 ],
1834
+ [ -44.059439435, -19.971782414 ],
1835
+ [ -44.059444277, -19.971869018 ],
1836
+ [ -44.059444543, -19.971966016 ],
1837
+ [ -44.059442054, -19.97262633 ],
1838
+ [ -44.05944601, -19.972662426 ],
1839
+ [ -44.059400624, -19.972662818 ],
1840
+ [ -44.059116431, -19.972665268 ],
1841
+ [ -44.057983815, -19.97266212 ],
1842
+ [ -44.057972911, -19.972662214 ],
1843
+ [ -44.057920778, -19.972662664 ],
1844
+ [ -44.057919113, -19.972662678 ],
1845
+ [ -44.057853973, -19.972663309 ],
1846
+ [ -44.057759971, -19.972664219 ],
1847
+ [ -44.057681551, -19.972663154 ],
1848
+ [ -44.057601498, -19.972656791 ],
1849
+ [ -44.057602802, -19.972652233 ],
1850
+ [ -44.057642941, -19.972573122 ],
1851
+ [ -44.057958452, -19.97165646 ],
1852
+ [ -44.057912815, -19.971591804 ]
1853
+ ]
1854
+ ]
1855
+ },
1856
+ "properties" : {
1857
+ "CD_SETOR" : "311860110080044P",
1858
+ "AREA_KM2" : 0.025455,
1859
+ "POP" : 493 }
1860
+ },
1861
+ {
1862
+ "type" : "Feature",
1863
+ "geometry" : {
1864
+ "type" : "Polygon",
1865
+ "coordinates" : [
1866
+ [
1867
+ [ -44.055992286, -19.971419998 ],
1868
+ [ -44.055974662, -19.971389513 ],
1869
+ [ -44.055959032, -19.971358489 ],
1870
+ [ -44.055950225, -19.971325425 ],
1871
+ [ -44.055945354, -19.971295661 ],
1872
+ [ -44.055946586, -19.971259081 ],
1873
+ [ -44.055950969, -19.971228982 ],
1874
+ [ -44.055961175, -19.971199275 ],
1875
+ [ -44.055975299, -19.971173153 ],
1876
+ [ -44.055991985, -19.971149276 ],
1877
+ [ -44.056014898, -19.971126962 ],
1878
+ [ -44.056042091, -19.971106755 ],
1879
+ [ -44.056071553, -19.971092678 ],
1880
+ [ -44.056103554, -19.971081655 ],
1881
+ [ -44.05613218, -19.971078197 ],
1882
+ [ -44.056168753, -19.97107855 ],
1883
+ [ -44.056214506, -19.971084135 ],
1884
+ [ -44.056258477, -19.971098655 ],
1885
+ [ -44.056290588, -19.971117107 ],
1886
+ [ -44.056314736, -19.971099511 ],
1887
+ [ -44.056355168, -19.971070048 ],
1888
+ [ -44.05644372, -19.970989699 ],
1889
+ [ -44.0565693, -19.970870761 ],
1890
+ [ -44.056614572, -19.970833163 ],
1891
+ [ -44.056674862, -19.970911118 ],
1892
+ [ -44.057243578, -19.97158776 ],
1893
+ [ -44.057590297, -19.97127642 ],
1894
+ [ -44.057587205, -19.971273003 ],
1895
+ [ -44.057591312, -19.971273003 ],
1896
+ [ -44.057912815, -19.971591804 ],
1897
+ [ -44.057958452, -19.97165646 ],
1898
+ [ -44.057642941, -19.972573122 ],
1899
+ [ -44.057602802, -19.972652233 ],
1900
+ [ -44.057601498, -19.972656791 ],
1901
+ [ -44.057522625, -19.972643847 ],
1902
+ [ -44.057457583, -19.972627472 ],
1903
+ [ -44.057386917, -19.972610133 ],
1904
+ [ -44.057322271, -19.97258932 ],
1905
+ [ -44.057245039, -19.972557106 ],
1906
+ [ -44.057181816, -19.972525051 ],
1907
+ [ -44.057118516, -19.972491604 ],
1908
+ [ -44.057059438, -19.972456265 ],
1909
+ [ -44.056989652, -19.97240621 ],
1910
+ [ -44.056936478, -19.972361438 ],
1911
+ [ -44.056870273, -19.972298393 ],
1912
+ [ -44.056814726, -19.972239682 ],
1913
+ [ -44.056806597, -19.97223109 ],
1914
+ [ -44.056718178, -19.972134684 ],
1915
+ [ -44.056707397, -19.972122775 ],
1916
+ [ -44.056649162, -19.972058446 ],
1917
+ [ -44.056616226, -19.972088543 ],
1918
+ [ -44.056294725, -19.971745884 ],
1919
+ [ -44.05611403, -19.971564595 ],
1920
+ [ -44.056072923, -19.971524676 ],
1921
+ [ -44.056037931, -19.97148333 ],
1922
+ [ -44.056009807, -19.971433837 ],
1923
+ [ -44.055992286, -19.971419998 ]
1924
+ ]
1925
+ ]
1926
+ },
1927
+ "properties" : {
1928
+ "CD_SETOR" : "311860110080045P",
1929
+ "AREA_KM2" : 0.021332,
1930
+ "POP" : 402 }
1931
+ }
1932
+ ]
1933
+ }
1934
+
views/maps.py ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import folium
2
+ import geopandas as gpd
3
+ import plotly.express as px
4
+ from branca.colormap import LinearColormap
5
+ from folium.plugins import HeatMap
6
+ from streamlit_folium import folium_static
7
+
8
+ import streamlit as st
9
+ from streamlit_extras.stylable_container import stylable_container
10
+ from streamlit_extras.add_vertical_space import add_vertical_space
11
+ import streamlit_shadcn_ui as ui
12
+
13
+ with stylable_container(
14
+ key="banner",
15
+ css_styles="""
16
+ img {
17
+ width: 1800px;
18
+ height: 400px;
19
+ overflow: hidden;
20
+ position: relative;
21
+ object-fit: cover;
22
+ border-radius: 20px; /* Adiciona bordas arredondadas */
23
+ mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0));
24
+ -webkit-mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0)); /* For Safari */
25
+ }
26
+ """,
27
+ ):
28
+ st.image("src/images/mp.jpg")
29
+
30
+ st.title("Mapas da área")
31
+ add_vertical_space(5)
32
+ st.markdown(""" ### :world_map: **UBS Flamengo: (IBGE 2022)** """)
33
+ add_vertical_space(5)
34
+
35
+
36
+ @st.cache_data
37
+ def load_data():
38
+ """
39
+ A function that loads and reads geojson data for UBS Flamengo and converts it to the specified coordinate reference system.
40
+ """
41
+ return gpd.read_file("views\\flamengo_ibge2022.geojson").to_crs(epsg=4326)
42
+
43
+ gdf = load_data()
44
+ LATITUDE = -19.971591804
45
+ LONGITUDE = -44.057912815
46
+ lat = -19.96214
47
+ long = -44.05603
48
+
49
+
50
+
51
+ total_pop = gdf["POP"].sum()
52
+ col1, col2, col3 = st.columns([1, 1, 5])
53
+
54
+ with col1:
55
+ # st.write(f"###### População Total: {total_pop:,}")
56
+ map_type = st.selectbox("Tipo de mapa", ["População", "Densidade", "Heatmap"])
57
+
58
+ with col2:
59
+ # st.write(f"###### Número de Setores Censitários: {len(gdf)}")
60
+ base_map = st.selectbox("Mapa base", ["Cartodb Positron", "OpenStreetMap"])
61
+
62
+ with col3:
63
+ total_pop = gdf["POP"].sum()
64
+ st.write(
65
+ f"### 👪 População Total: {total_pop:,} habitantes, dados do Censo 2022 IBGE"
66
+ )
67
+ st.write(f"### 🗺️ Número de Setores Censitários: {len(gdf)}")
68
+
69
+ add_vertical_space(5)
70
+ add_vertical_space(5)
71
+
72
+ col1, col2 = st.columns(2)
73
+ with col1:
74
+ m = folium.Map(
75
+ location=[LATITUDE, LONGITUDE], tiles=base_map, zoom_start=15
76
+ )
77
+ dns_p = "Densidade pop. (hab/km²) UBS Flamengo - IBGE 2022"
78
+ if map_type in ["População", "Densidade"]:
79
+ if map_type == "População":
80
+ column = "POP"
81
+ caption = "Pop. residente UBS Flamengo IBGE 2022"
82
+ else:
83
+ gdf["DENSIDADE"] = gdf["POP"] / gdf["AREA_KM2"]
84
+ column = "DENSIDADE"
85
+ caption = dns_p
86
+ colorscale = px.colors.sequential.Viridis
87
+ colormap = LinearColormap(
88
+ colors=colorscale,
89
+ vmin=gdf[column].min(),
90
+ vmax=gdf[column].max(),
91
+ caption=caption,
92
+ )
93
+ folium.GeoJson(
94
+ gdf,
95
+ style_function=lambda feature: {
96
+ "fillColor": colormap(feature["properties"][column]),
97
+ "color": "black",
98
+ "weight": 1,
99
+ "fillOpacity": 0.7,
100
+ },
101
+ highlight_function=lambda feature: {
102
+ "fillColor": "#ffaf00",
103
+ "color": "green",
104
+ "weight": 3,
105
+ "fillOpacity": 0.9,
106
+ },
107
+ tooltip=folium.features.GeoJsonTooltip(
108
+ fields=["CD_SETOR", column, "AREA_KM2"],
109
+ aliases=[
110
+ "Setor Censitário:",
111
+ f"{caption}:",
112
+ "Área (km²):",
113
+ ],
114
+ style=(
115
+ "background-color: white; color: #333333;"
116
+ "font-family: calibri; font-size: 12px;"
117
+ "padding: 10px;"
118
+ ),
119
+ ),
120
+ ).add_to(m)
121
+ colormap.add_to(m)
122
+
123
+ elif map_type == "Heatmap":
124
+ heat_data = [
125
+ [
126
+ row["geometry"].centroid.y,
127
+ row["geometry"].centroid.x,
128
+ row["POP"],
129
+ ]
130
+ for idx, row in gdf.iterrows()
131
+ ]
132
+ HeatMap(heat_data).add_to(m)
133
+ folium.Marker(
134
+ [lat, long],
135
+ popup="UBS Flamengo",
136
+ tooltip="UBS Flamengo",
137
+ icon=folium.Icon(color="red", icon="info-sign"),
138
+ ).add_to(m)
139
+
140
+ STYLE_STATEMENT = (
141
+ "<style>.leaflet-control-layers"
142
+ "{ position: fixed; top: 10px; left: 50px; } </style>"
143
+ )
144
+ m.get_root().html.add_child(folium.Element(STYLE_STATEMENT))
145
+ folium_static(m)
146
+
147
+ with col2:
148
+ fig = px.bar(
149
+ gdf,
150
+ x="CD_SETOR",
151
+ y="POP",
152
+ title="Distribuição da População por Setor Censitário",
153
+ color="POP",
154
+ color_continuous_scale=px.colors.sequential.Viridis,
155
+ )
156
+ st.plotly_chart(fig)
157
+
158
+ age_columns = [
159
+ "POP_0A4",
160
+ "POP_5A9",
161
+ "POP_10A14",
162
+ "POP_15A19",
163
+ "POP_20A24",
164
+ "POP_25A29",
165
+ "POP_30A34",
166
+ "POP_35A39",
167
+ "POP_40A44",
168
+ "POP_45A49",
169
+ "POP_50A54",
170
+ "POP_55A59",
171
+ "POP_60A64",
172
+ "POP_65A69",
173
+ "POP_70A74",
174
+ "POP_75A79",
175
+ "POP_80A84",
176
+ "POP_85A89",
177
+ "POP_90A94",
178
+ "POP_95A99",
179
+ "POP_100OUMAIS",
180
+ ]
181
+
182
+
183
+
184
+ add_vertical_space(10)
185
+
186
+
187
+ st.write('----')
views/mesames.py ADDED
@@ -0,0 +1,269 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import plotly.graph_objects as go
3
+ from streamlit_option_menu import option_menu
4
+ import streamlit as st
5
+ from streamlit_extras.stylable_container import stylable_container
6
+
7
+
8
+ st.title("Crescimento populacional - UBS Flamengo")
9
+
10
+ with stylable_container(
11
+ key="banner",
12
+ css_styles="""
13
+ img {
14
+ width: 1800px;
15
+ height: 340px;
16
+ overflow: hidden;
17
+ position: relative;
18
+ object-fit: cover;
19
+ border-radius: 20px; /* Adiciona bordas arredondadas */
20
+ mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0));
21
+ -webkit-mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0)); /* For Safari */
22
+ }
23
+ """,
24
+ ):
25
+ st.image("src/images/pop.jpg")
26
+ st.title("Crescimento populacional - UBS Flamengo")
27
+
28
+ raw_data = [
29
+ {"Mês": "mai-21", "Usuários": 3402, "Domicílios": 1440, "Famílias": 1269},
30
+ {"Mês": "jun-21", "Usuários": 3503, "Domicílios": 1462, "Famílias": 1304},
31
+ {"Mês": "jul-21", "Usuários": 3559, "Domicílios": 1478, "Famílias": 1323},
32
+ {"Mês": "ago-21", "Usuários": 3592, "Domicílios": 1490, "Famílias": 1338},
33
+ {"Mês": "set-21", "Usuários": 3755, "Domicílios": 1573, "Famílias": 1380},
34
+ {"Mês": "out-21", "Usuários": 3776, "Domicílios": 1533, "Famílias": 1384},
35
+ {"Mês": "nov-21", "Usuários": 3839, "Domicílios": 1553, "Famílias": 1397},
36
+ {"Mês": "dez-21", "Usuários": 3926, "Domicílios": 1581, "Famílias": 1423},
37
+ {"Mês": "jan-22", "Usuários": 3951, "Domicílios": 1596, "Famílias": 1437},
38
+ {"Mês": "fev-22", "Usuários": 4035, "Domicílios": 1638, "Famílias": 1465},
39
+ {"Mês": "mar-22", "Usuários": 4131, "Domicílios": 1672, "Famílias": 1500},
40
+ {"Mês": "abr-22", "Usuários": 4306, "Domicílios": 1723, "Famílias": 1555},
41
+ {"Mês": "mai-22", "Usuários": 4553, "Domicílios": 1795, "Famílias": 1625},
42
+ {"Mês": "jun-22", "Usuários": 4639, "Domicílios": 1817, "Famílias": 1653},
43
+ {"Mês": "jul-22", "Usuários": 4719, "Domicílios": 1848, "Famílias": 1676},
44
+ {"Mês": "ago-22", "Usuários": 4776, "Domicílios": 1869, "Famílias": 1687},
45
+ {"Mês": "set-22", "Usuários": 4831, "Domicílios": 1883, "Famílias": 1699},
46
+ {"Mês": "out-22", "Usuários": 4871, "Domicílios": 1900, "Famílias": 1709},
47
+ {"Mês": "nov-22", "Usuários": 4874, "Domicílios": 1906, "Famílias": 1708},
48
+ {"Mês": "dez-22", "Usuários": 4920, "Domicílios": 1914, "Famílias": 1720},
49
+ {"Mês": "jan-23", "Usuários": 5135, "Domicílios": 2006, "Famílias": 1776},
50
+ {"Mês": "fev-23", "Usuários": 5396, "Domicílios": 2084, "Famílias": 1848},
51
+ {"Mês": "mar-23", "Usuários": 5544, "Domicílios": 2127, "Famílias": 1893},
52
+ {"Mês": "abr-23", "Usuários": 5546, "Domicílios": 2140, "Famílias": 1910},
53
+ {"Mês": "mai-23", "Usuários": 5579, "Domicílios": 2164, "Famílias": 1920},
54
+ {"Mês": "jun-23", "Usuários": 5642, "Domicílios": 2181, "Famílias": 1946},
55
+ {"Mês": "jul-23", "Usuários": 5681, "Domicílios": 2200, "Famílias": 1961},
56
+ {"Mês": "ago-23", "Usuários": 5728, "Domicílios": 2208, "Famílias": 1972},
57
+ {"Mês": "set-23", "Usuários": 5774, "Domicílios": 2228, "Famílias": 1983},
58
+ {"Mês": "out-23", "Usuários": 5841, "Domicílios": 2245, "Famílias": 2007},
59
+ {"Mês": "nov-23", "Usuários": 5891, "Domicílios": 2297, "Famílias": 2027},
60
+ {"Mês": "dez-23", "Usuários": 5933, "Domicílios": 2281, "Famílias": 2036},
61
+ {"Mês": "jan-24", "Usuários": 5982, "Domicílios": 2307, "Famílias": 2050},
62
+ {"Mês": "fev-24", "Usuários": 6005, "Domicílios": 2333, "Famílias": 2057},
63
+ {"Mês": "mar-24", "Usuários": 6020, "Domicílios": 2327, "Famílias": 2070},
64
+ {"Mês": "abr-24", "Usuários": 6074, "Domicílios": 2370, "Famílias": 2095},
65
+ ]
66
+
67
+ df = pd.DataFrame(raw_data)
68
+
69
+ @st.cache_data
70
+ def processar_dados(dados, intervalo):
71
+ """
72
+ Process data based on the specified interval and return the aggregated data.
73
+
74
+ Parameters:
75
+ - dados: List of dictionaries containing data for each month.
76
+ - intervalo: String indicating the interval for data aggregation.
77
+
78
+ Returns:
79
+ - List of dictionaries with aggregated data based on the specified interval.
80
+ """
81
+ if intervalo == "Mensal":
82
+ return dados
83
+ agrupamentos = {"Trimestral": 3, "Semestral": 6, "Anual": 12}
84
+ dados_agrupados = []
85
+ for i in range(0, len(dados), agrupamentos[intervalo]):
86
+ grupo = dados[i : i + agrupamentos[intervalo]]
87
+ ultimo_Mês = grupo[-1]["Mês"]
88
+ dados_agrupados.append(
89
+ {
90
+ "Mês": ultimo_Mês,
91
+ "Usuários": max(d["Usuários"] for d in grupo),
92
+ "Domicílios": max(d["Domicílios"] for d in grupo),
93
+ "Famílias": max(d["Famílias"] for d in grupo),
94
+ }
95
+ )
96
+ return dados_agrupados
97
+
98
+ @st.cache_data
99
+ def formatar_data(Mês):
100
+ """
101
+ A function that formats the data based on the input Mês parameter.
102
+
103
+ Parameters:
104
+ - Mês (str): A string containing the month and year separated by a hyphen.
105
+
106
+ Returns:
107
+ - str: A formatted string in the format "month/year".
108
+ """
109
+ m, a = Mês.split("-")
110
+ return f"{m}/{a}"
111
+
112
+
113
+ # Adicionando estilo personalizado
114
+ st.markdown(
115
+ """
116
+ <style>
117
+ .stSelectbox [data-baseweb="select"] {
118
+ max-width: 300px;
119
+ }
120
+ .st-emotion-cache-16idsys p {
121
+ font-size: 20px;
122
+ font-weight: bold;
123
+ color: #4FCBFC;
124
+ }
125
+ </style>
126
+ """,
127
+ unsafe_allow_html=True,
128
+ )
129
+
130
+ # Criando duas colunas para os menus de opções
131
+ col1, col2, col3 = st.columns([3, 2, 2])
132
+
133
+ with col1:
134
+ st.dataframe(df, use_container_width=True, height= 250, hide_index=True)
135
+
136
+ with col2:
137
+ intervalo = option_menu(
138
+ "Intervalo de Tempo",
139
+ ["Mensal", "Trimestral", "Semestral", "Anual"],
140
+ icons=["calendar-month", "calendar-quarter", "calendar-half", "calendar-year"],
141
+ menu_icon="cast",
142
+ default_index=0,
143
+ styles={
144
+ "container": {"padding": "0!important", "background-color": "#262730"},
145
+ "icon": {"color": "#4FCBFC", "font-size": "18px"},
146
+ "nav-link": {
147
+ "font-size": "14px",
148
+ "text-align": "center",
149
+ "margin": "0px",
150
+ "padding": "10px",
151
+ "--hover-color": "#363940",
152
+ "color": "#FFFFFF",
153
+ },
154
+ "nav-link-selected": {"background-color": "#0083B8"},
155
+ "separator": {"border-color": "#4B4B4B"},
156
+ },
157
+ )
158
+
159
+ with col3:
160
+ metrica = option_menu(
161
+ "Métrica",
162
+ ["Todos", "Usuários", "Domicílios", "Famílias"],
163
+ icons=["list", "person", "house", "people"],
164
+ menu_icon="cast",
165
+ default_index=0,
166
+ styles={
167
+ "container": {"padding": "0!important", "background-color": "#262730"},
168
+ "icon": {"color": "#4FCBFC", "font-size": "18px"},
169
+ "nav-link": {
170
+ "font-size": "14px",
171
+ "text-align": "center",
172
+ "margin": "0px",
173
+ "padding": "10px",
174
+ "--hover-color": "#363940",
175
+ "color": "#FFFFFF",
176
+ },
177
+ "nav-link-selected": {"background-color": "#0083B8"},
178
+ "separator": {"border-color": "#4B4B4B"},
179
+ },
180
+ )
181
+
182
+ dados_processados = processar_dados(raw_data, intervalo)
183
+
184
+ # Switch para mostrar valores nos pontos
185
+ mostrar_valores = st.checkbox("Mostrar valores nos pontos", value=True)
186
+
187
+ # Criação do gráfico
188
+ fig = go.Figure()
189
+
190
+ metricas = ["Usuários", "Domicílios", "Famílias"] if metrica == "Todos" else [metrica]
191
+ cores = {"Usuários": "#1f77b4", "Domicílios": "#ff7f0e", "Famílias": "#2ca02c"}
192
+
193
+
194
+ # Slider Component
195
+ st.sidebar.header("Ajustes dos Balões")
196
+ balloon_positions = {}
197
+ for m in metricas:
198
+ balloon_positions[m] = st.sidebar.slider(
199
+ f"Posição do balão para {m}", min_value=-100, max_value=0, value=-40, step=5
200
+ )
201
+
202
+ annotations = []
203
+
204
+ for m in metricas:
205
+ x_data = [formatar_data(d["Mês"]) for d in dados_processados]
206
+ y_data = [d[m] for d in dados_processados]
207
+
208
+ fig.add_trace(
209
+ go.Scatter(
210
+ x=x_data,
211
+ y=y_data,
212
+ mode="lines+markers",
213
+ name=m,
214
+ line=dict(color=cores[m], width=3),
215
+ marker=dict(size=8, symbol="circle", line=dict(width=2, color="white")),
216
+ )
217
+ )
218
+
219
+ if mostrar_valores:
220
+ for i, (x, y) in enumerate(zip(x_data, y_data)):
221
+ annotations.append(
222
+ dict(
223
+ x=x,
224
+ y=y,
225
+ xref="x",
226
+ yref="y",
227
+ text=f"{y:,.0f}",
228
+ showarrow=True,
229
+ arrowhead=7,
230
+ ax=0,
231
+ ay=balloon_positions[m], # Usa a posição ajustada para cada métrica
232
+ bgcolor=cores[m],
233
+ opacity=0.8,
234
+ bordercolor="white",
235
+ borderwidth=2,
236
+ borderpad=4,
237
+ font=dict(color="white", size=10),
238
+ )
239
+ )
240
+
241
+ fig.update_layout(
242
+ title={
243
+ "text": "Crescimento na Área de Saúde",
244
+ "y": 0.95,
245
+ "x": 0.5,
246
+ "xanchor": "center",
247
+ "yanchor": "top",
248
+ "font": dict(size=24, color="#4FCBFC"),
249
+ },
250
+ xaxis_title="Mês",
251
+ yaxis_title="Quantidade",
252
+ legend_title="Métricas",
253
+ template="plotly_dark",
254
+ plot_bgcolor="#262730",
255
+ paper_bgcolor="#262730",
256
+ font=dict(color="white"),
257
+ xaxis=dict(showgrid=True, gridcolor="#4B4B4B", tickangle=45),
258
+ yaxis=dict(showgrid=True, gridcolor="#4B4B4B"),
259
+ legend=dict(
260
+ bgcolor="rgba(0,0,0,0)",
261
+ bordercolor="rgba(0,0,0,0)",
262
+ font=dict(size=12, color="white"),
263
+ ),
264
+ margin=dict(l=50, r=50, t=80, b=50),
265
+ annotations=annotations,
266
+ )
267
+
268
+ st.plotly_chart(fig, use_container_width=True)
269
+
views/newchatgroq.py ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Generator
2
+
3
+ import streamlit as st
4
+ from groq import Groq
5
+
6
+
7
+
8
+ st.title("ChatBot UBS Flamengo")
9
+
10
+ def clear_all_session_state():
11
+ """
12
+ Clears all keys from the `st.session_state` dictionary.
13
+ This function iterates over all the keys in the `st.session_state` dictionary and deletes each key from the dictionary.
14
+ This is useful when you want to reset the session state and start fresh.
15
+ Parameters:
16
+ None
17
+ Returns:
18
+ None
19
+ """
20
+ for key in list(st.session_state.keys()):
21
+ del st.session_state[key]
22
+
23
+
24
+ if st.sidebar.button('Limpar Estado da Sessão', type = "primary"):
25
+ clear_all_session_state()
26
+ st.experimental_rerun()
27
+
28
+ col1, col2 =st.columns(2)
29
+ with col1:
30
+ st.write('')
31
+ with col2:
32
+ st.markdown("### 📚 - Documentos, pesquisas e temas gerais!")
33
+
34
+ # Configuração do cliente Groq
35
+ client = Groq(
36
+ api_key=st.secrets["GROQ_API_KEY"],
37
+ )
38
+
39
+ # Inicialização do histórico de chat e modelo selecionado
40
+ if "messages" not in st.session_state:
41
+ st.session_state.messages = []
42
+
43
+ if "selected_model" not in st.session_state:
44
+ st.session_state.selected_model = None
45
+
46
+ # Definição dos modelos disponíveis
47
+ modelos = {
48
+ "gemma-7b-it": {"name": "Gemma-7b-it", "tokens": 8192, "developer": "Google"},
49
+ "llama2-70b-4096": {"name": "llamA2-70b-chat", "tokens": 4096, "developer": "Meta"},
50
+ "llama3-70b-8192": {"name": "LLaMA3-70b-8192", "tokens": 8192, "developer": "Meta"},
51
+ "llama3-8b-8192": {"name": "LLaMA3-8b-8192", "tokens": 8192, "developer": "Meta"},
52
+ "mixtral-8x7b-32768": {"name": "Mixtral-8x7b-Instruct-v0.1", "tokens": 32768, "developer": "Mistral"},
53
+ }
54
+
55
+
56
+
57
+ # Layout para seleção do modelo e controle deslizante de max_tokens
58
+ col1, col2 = st.columns(2)
59
+
60
+ with col1:
61
+ opcao_modelo = st.selectbox(
62
+ "Escolha um modelo:",
63
+ options=list(modelos.keys()),
64
+ format_func=lambda x: modelos[x]["name"],
65
+ index=2 # Padrão para llama 70b
66
+ )
67
+
68
+ prompt_model = """
69
+ Você é um assistente virtual especializado, atuando em uma Unidade Básica de Saúde (UBS) que se
70
+ chama UBS Flamengo em Contagem - Minas Gerais - Brasil.
71
+ Sua função principal é auxiliar profissionais de saúde e administrativos em diversas tarefas,
72
+ sempre se comunicando em português brasileiro formal.
73
+
74
+ Comportamento e Comunicação
75
+
76
+ Inicie cada interação perguntando o nome do usuário e use-o respeitosamente durante toda a conversa.
77
+ Mantenha um tom profissional, cortês e empático em todas as interações.
78
+ Adapte seu nível de linguagem ao do usuário, mantendo-se sempre claro e compreensível.
79
+ Evite usar termos técnicos excessivos, a menos que solicitado ou apropriado ao contexto.
80
+
81
+ Principais Responsabilidades
82
+
83
+ Auxiliar na elaboração de relatórios médicos e administrativos.
84
+ Interpretar e explicar notas técnicas e diretrizes de saúde.
85
+ Sumarizar textos complexos relacionados à saúde pública.
86
+ Oferecer insights e análises quando solicitado, baseando-se em informações atualizadas e confiáveis.
87
+ Responder a perguntas sobre procedimentos padrão na UBS.
88
+
89
+ Limitações e Ética
90
+
91
+ Nunca forneça diagnósticos médicos ou substitua o aconselhamento de profissionais de saúde.
92
+ Mantenha estrita confidencialidade e não solicite ou discuta informações pessoais de pacientes.
93
+ Se não tiver conhecimento sobre um tópico específico, admita honestamente e sugira que o usuário
94
+ consulte um profissional qualificado.
95
+ Em situações de emergência, oriente o usuário a buscar ajuda médica imediata.
96
+
97
+ Formato de Respostas
98
+
99
+ Forneça respostas completas e estruturadas, usando marcadores ou numeração quando apropriado.
100
+ Para tópicos complexos, ofereça uma visão geral concisa seguida por detalhes, se necessário.
101
+ Use analogias ou exemplos práticos para explicar conceitos difíceis, quando relevante.
102
+
103
+ Conhecimento e Atualizações
104
+
105
+ Mantenha-se atualizado sobre as políticas de saúde pública brasileiras e procedimentos padrão em UBS.
106
+ Esteja preparado para discutir tópicos atuais relacionados à saúde pública no Brasil.
107
+ Quando citar informações, mencione a necessidade de verificar fontes oficiais para obter os dados
108
+ mais recentes.
109
+
110
+ """
111
+
112
+ # Detectar mudança de modelo e limpar histórico de chat se o modelo mudou
113
+ if st.session_state.selected_model != opcao_modelo:
114
+ st.session_state.messages = [{"role": "system", "content": prompt_model}]
115
+ st.session_state.selected_model = opcao_modelo
116
+
117
+
118
+
119
+
120
+ intervalo_max_tokens = modelos[opcao_modelo]["tokens"]
121
+
122
+ with col2:
123
+ max_tokens = st.slider(
124
+ "Máximo de Tokens:",
125
+ min_value=512,
126
+ max_value=intervalo_max_tokens,
127
+ value=min(32768, intervalo_max_tokens),
128
+ step=512,
129
+ help=f"Ajuste o número máximo de tokens (palavras) para a resposta do modelo. Máximo para o modelo selecionado: {intervalo_max_tokens}"
130
+ )
131
+
132
+
133
+ # Exibir mensagens do chat do histórico
134
+ for message in st.session_state.messages:
135
+ if message["role"] != "system":
136
+ avatar = '🤖' if message["role"] == "assistant" else '👤'
137
+ with st.chat_message(message["role"], avatar=avatar):
138
+ st.markdown(message["content"])
139
+
140
+ def generate_chat_responses(chat_complete) -> Generator[str, None, None]:
141
+ """Gera conteúdo de resposta do chat a partir da resposta da API Groq."""
142
+ for chunk in chat_complete:
143
+ if chunk.choices[0].delta.content:
144
+ yield chunk.choices[0].delta.content
145
+
146
+ if prompt := st.chat_input("Digite seu prompt aqui..."):
147
+ st.session_state.messages.append({"role": "user", "content": prompt})
148
+
149
+ with st.chat_message("user", avatar='👤'):
150
+ st.markdown(prompt)
151
+
152
+ # Buscar resposta da API Groq
153
+ try:
154
+ chat_complete = client.chat.completions.create(
155
+ model=opcao_modelo,
156
+ messages=st.session_state.messages,
157
+ max_tokens=max_tokens,
158
+ stream=True
159
+ )
160
+
161
+ # Usar a função geradora com st.write_stream
162
+ with st.chat_message("assistant", avatar="🤖"):
163
+ response_placeholder = st.empty()
164
+ full_response = ""
165
+ for chunk in generate_chat_responses(chat_complete):
166
+ full_response += chunk
167
+ response_placeholder.markdown(full_response + "▌")
168
+ response_placeholder.markdown(full_response)
169
+ # Adicionar a resposta completa ao st.session_state.messages
170
+ st.session_state.messages.append({"role": "assistant", "content": full_response})
171
+
172
+
173
+ except Exception as e:
174
+ st.error(f"Ocorreu um erro: {e}", icon="🚨")
175
+
views/pdf_chat.py ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+
3
+
4
+ st.title("Converse com seu PDF")
5
+
6
+
7
+ st.write('## Em breve!')
views/rag_med.py ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+
3
+
4
+ st.title("Enciclopédia médica")
5
+
6
+
7
+ st.write('## Em breve!')
views/rci.py ADDED
@@ -0,0 +1,632 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ This module contains the code for the 'rci' view of the application.
3
+ """
4
+
5
+ import plotly.express as px
6
+ import streamlit as st
7
+ from groq import Groq
8
+ from streamlit_extras.add_vertical_space import add_vertical_space
9
+ from streamlit_extras.stylable_container import stylable_container
10
+ from streamlit_option_menu import option_menu
11
+
12
+ from data_cleaning import processar_arquivo
13
+
14
+
15
+
16
+ #################################
17
+ ############ BANNER #############
18
+ #################################
19
+
20
+ with stylable_container(
21
+ key="banner",
22
+ css_styles="""
23
+ img {
24
+ width: 1800px;
25
+ height: 400px;
26
+ overflow: hidden;
27
+ position: relative;
28
+ object-fit: cover;
29
+ border-radius: 14px; /* Adiciona bordas arredondadas */
30
+ mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0));
31
+ -webkit-mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0)); /* For Safari */
32
+ }
33
+ """,
34
+ ):
35
+ st.image("src/images/banner.png")
36
+
37
+ st.title("Análise de microárea")
38
+
39
+
40
+ #################################
41
+ ############ BANNER #############
42
+ #################################
43
+
44
+
45
+ def clear_chat_history():
46
+ """
47
+ Clears the chat history and resets the initial analysis in the session state.
48
+ This function clears the chat history and resets the initial analysis in the session state.
49
+ It sets the value of "groq_chat_history" in the session state to an empty list and the value of "initial_analysis" to an empty string.
50
+ """
51
+ st.session_state["groq_chat_history"] = []
52
+ st.session_state["initial_analysis"] = ""
53
+
54
+
55
+ #################################
56
+ ############ DATA ###############
57
+ #################################
58
+
59
+ uploaded_file = st.sidebar.file_uploader("Escolha um arquivo CSV", type="csv")
60
+ if uploaded_file is not None:
61
+ dataframes = processar_arquivo(uploaded_file)
62
+ DF_DATA = dataframes.get("Data")
63
+ DF_HEAD = dataframes.get("Head")
64
+ DF_IDADE = dataframes.get("Idade")
65
+ DF_GENERO = dataframes.get("genero")
66
+ DF_COR = dataframes.get("cor")
67
+ DF_DEFICIENCIA = dataframes.get("deficiencia")
68
+ DF_DOENCAS = dataframes.get("doencas")
69
+ DF_ESCOLA = dataframes.get("Escola")
70
+ DF_TRANSGEN = dataframes.get("transgen")
71
+ for df in [
72
+ DF_IDADE,
73
+ DF_GENERO,
74
+ DF_COR,
75
+ DF_DEFICIENCIA,
76
+ DF_DOENCAS,
77
+ DF_ESCOLA,
78
+ DF_TRANSGEN,
79
+ ]:
80
+ if df is not None:
81
+ df["Descrição"] = df["Descrição"].str.capitalize()
82
+ else:
83
+ st.sidebar.info("Adicione um arquivo .csv.")
84
+
85
+ if st.sidebar.button("Limpar", type="primary"):
86
+ clear_chat_history()
87
+
88
+
89
+ def gerar_resumo_df():
90
+ """
91
+ Generates a summary of the dataframes.
92
+ This function creates a summary of the dataframes by concatenating the
93
+ string representation of each dataframe.
94
+ The summary includes the name of the dataframe and its content.
95
+ Returns:
96
+ str: The summary of the dataframes.
97
+ """
98
+ resumo = ""
99
+ if DF_DATA is not None:
100
+ resumo += "Resumo DF_DATA:\n"
101
+ resumo += DF_DATA.to_string(index=False) + "\n\n"
102
+ if DF_HEAD is not None:
103
+ resumo += "Resumo DF_HEAD:\n"
104
+ resumo += DF_HEAD.to_string(index=False) + "\n\n"
105
+ if DF_IDADE is not None:
106
+ resumo += "Resumo DF_IDADE:\n"
107
+ resumo += DF_IDADE.to_string(index=False) + "\n\n"
108
+ if DF_GENERO is not None:
109
+ resumo += f"Resumo DF_GENERO:\n{DF_GENERO.to_string(index=False)}\n\n"
110
+ if DF_COR is not None:
111
+ resumo += f"Resumo DF_COR:\n{DF_COR.to_string(index=False)}\n\n"
112
+ if DF_DEFICIENCIA is not None:
113
+ resumo += f"Resumo DF_DEFICIENCIA:\n{DF_DEFICIENCIA.to_string(index=False)}\n\n"
114
+ if DF_DOENCAS is not None:
115
+ resumo += f"Resumo DF_DOENCAS:\n{DF_DOENCAS.to_string(index=False)}\n\n"
116
+ if DF_ESCOLA is not None:
117
+ resumo += f"Resumo DF_ESCOLA:\n{DF_ESCOLA.to_string(index=False)}\n\n"
118
+ if DF_TRANSGEN is not None:
119
+ resumo += f"Resumo DF_TRANSGEN:\n{DF_TRANSGEN.to_string(index=False)}\n\n"
120
+ return resumo
121
+
122
+
123
+ #################################
124
+ ############ DATA ###############
125
+ #################################
126
+
127
+
128
+ ###########################################
129
+ ############### LATERAL ##################
130
+ ###########################################
131
+
132
+ st.sidebar.markdown(
133
+ """
134
+ ### Informações:
135
+ - Análise - Relatório de cadastro individual.
136
+ - Iniciativa - Ubs Flamengo
137
+ - Acesso livre
138
+ ### Links:
139
+ ##
140
+ ##### - [PEC SUS](https://sape.pecsus.com.br/) 📝
141
+ ###
142
+ ##### - [Obsidian - Dr Guilherme](http://dr-guilhermeapolinario.com) 🌎
143
+ ##### - [GitHub - Dr Guilherme](http://dr-guilhermeapolinario.com) 🌎
144
+ """
145
+ )
146
+ st.markdown(
147
+ """
148
+ #### Instruções:
149
+ ##### - Acesse o site :orange[PEC SUS], na aba esquerda selecione consolidado, :blue[*RELATÓRIO DE CADASTRO INDIVIDUAL*]
150
+ ##### - Selecione a opção :orange[baixar arquivo .csv]. Após baixar o arquivo, selecione o arquivo .csv na aba ao lado, e pronto.
151
+ ##### - Clique no botão de expansão abaixo para iniciar o processo.
152
+ ##### - Utilize o chatbot com a inteligência artificial 🤖 Zé Flamengo para tirar suas dúvidas.
153
+ """
154
+ )
155
+ st.write("-----")
156
+
157
+ st.markdown(
158
+ """
159
+ #### Dados de saúde Relatório de cadastro individual.
160
+ """
161
+ )
162
+
163
+ ###########################################
164
+ ############### LATERAL ##################
165
+ ###########################################
166
+
167
+
168
+ ###########################################
169
+ ############### EXPANDERCOM GRÁFICOS ######
170
+ ###########################################
171
+
172
+
173
+ def criar_grafico_personalizado(df, x_col, y_col, titulo):
174
+ """
175
+ A function to create a customized bar chart based on the input data, x
176
+ and y columns, and title.
177
+ Parameters:
178
+ df (DataFrame): The input DataFrame containing the data.
179
+ x_col (str): The column name for the x-axis data.
180
+ y_col (str): The column name for the y-axis data.
181
+ titulo (str): The title of the chart.
182
+ Returns:
183
+ fig: The customized bar chart figure.
184
+ """
185
+ fig = px.bar(
186
+ df,
187
+ x=x_col,
188
+ y=y_col,
189
+ title=titulo,
190
+ text=y_col,
191
+ color=x_col,
192
+ color_discrete_sequence=px.colors.qualitative.Bold,
193
+ )
194
+ fig.update_traces(texttemplate="%{text:.2s}", textposition="outside")
195
+ fig.update_layout(
196
+ uniformtext_minsize=8,
197
+ uniformtext_mode="hide",
198
+ xaxis_title=x_col,
199
+ yaxis_title=y_col,
200
+ title_font_size=24,
201
+ title_font_family="Arial",
202
+ title_font_color="white",
203
+ title_x=0.2,
204
+ paper_bgcolor="rgba(0,0,0,0)",
205
+ plot_bgcolor="rgba(0,0,0,0)",
206
+ xaxis_tickangle=-45,
207
+ )
208
+ return fig
209
+
210
+
211
+ if uploaded_file is not None:
212
+ c1, c2 = st.columns(2)
213
+ with c1:
214
+ if DF_DATA is not None:
215
+ st.dataframe(DF_DATA, hide_index=True)
216
+ else:
217
+ st.write("Data não disponível")
218
+ with c2:
219
+ if DF_HEAD is not None:
220
+ st.dataframe(DF_HEAD, hide_index=True)
221
+ else:
222
+ st.write("Informações não disponíveis")
223
+
224
+ if uploaded_file is not None:
225
+ with st.expander("Visualização", expanded=True):
226
+ selected_tab = option_menu(
227
+ menu_title=None,
228
+ options=[
229
+ "Faixa Etária",
230
+ "Gênero",
231
+ "Cor",
232
+ "Deficiência",
233
+ "Doenças",
234
+ "Escolaridade",
235
+ "Identidade de Gênero",
236
+ ],
237
+ icons=[
238
+ "person",
239
+ "gender-female",
240
+ "person-plus",
241
+ "person-wheelchair",
242
+ "capsule-pill",
243
+ "stars",
244
+ "gender-trans",
245
+ ],
246
+ menu_icon="cast",
247
+ default_index=0,
248
+ orientation="horizontal",
249
+ styles={
250
+ "container": {
251
+ "padding": "0!important",
252
+ "background-color": "#262730",
253
+ },
254
+ "icon": {"color": "#4FCBFC", "font-size": "18px"},
255
+ "nav-link": {
256
+ "font-size": "14px",
257
+ "text-align": "center",
258
+ "margin": "0px",
259
+ "padding": "10px",
260
+ "--hover-color": "#363940",
261
+ "color": "#FFFFFF",
262
+ },
263
+ "nav-link-selected": {"background-color": "#0083B8"},
264
+ "separator": {"border-color": "#4B4B4B"},
265
+ },
266
+ )
267
+ if selected_tab == "Faixa Etária" and DF_IDADE is not None:
268
+ st.subheader("Distribuição por Faixa Etária")
269
+ col1, col2 = st.columns(2)
270
+ with col1:
271
+ st.dataframe(DF_IDADE, hide_index=True)
272
+ with col2:
273
+ DF_IDADE["Masculino"] = DF_IDADE["Masculino"].astype(int) * -1
274
+ DF_IDADE["Feminino"] = DF_IDADE["Feminino"].astype(int)
275
+ fig_idade = px.bar(
276
+ DF_IDADE,
277
+ x=["Masculino", "Feminino"],
278
+ y="Descrição",
279
+ orientation="h",
280
+ title="Pirâmide Etária",
281
+ labels={"value": "População", "Descrição": "Faixa Etária"},
282
+ color="Descrição",
283
+ color_discrete_sequence=px.colors.qualitative.Set3,
284
+ )
285
+ fig_idade.update_layout(
286
+ barmode="relative",
287
+ xaxis_title="População",
288
+ yaxis_title="Faixa Etária",
289
+ )
290
+ st.plotly_chart(fig_idade)
291
+ DF_IDADE["Masculino"] = DF_IDADE["Masculino"].abs()
292
+
293
+ elif selected_tab == "Gênero" and DF_GENERO is not None:
294
+ st.subheader("Distribuição por Gênero")
295
+ col1, col2 = st.columns(2)
296
+ with col1:
297
+ st.dataframe(DF_GENERO, hide_index=True)
298
+ with col2:
299
+ fig_genero = px.pie(
300
+ DF_GENERO,
301
+ names="Descrição",
302
+ values="Valor",
303
+ title="Distribuição por Gênero",
304
+ color_discrete_sequence=px.colors.qualitative.Pastel,
305
+ )
306
+ st.plotly_chart(fig_genero)
307
+
308
+ elif selected_tab == "Cor" and DF_COR is not None:
309
+ st.subheader("Distribuição por Cor")
310
+ col1, col2 = st.columns(2)
311
+ with col1:
312
+ st.dataframe(DF_COR, hide_index=True)
313
+ with col2:
314
+ fig_cor = px.pie(
315
+ DF_COR,
316
+ names="Descrição",
317
+ values="Valor",
318
+ title="Distribuição por Cor",
319
+ color_discrete_sequence=px.colors.qualitative.Vivid,
320
+ )
321
+ st.plotly_chart(fig_cor)
322
+
323
+ elif selected_tab == "Deficiência" and DF_DEFICIENCIA is not None:
324
+ st.subheader("Distribuição por Deficiência")
325
+ col1, col2 = st.columns(2)
326
+ with col1:
327
+ st.dataframe(DF_DEFICIENCIA, hide_index=True)
328
+ with col2:
329
+ fig_deficiencia = criar_grafico_personalizado(
330
+ DF_DEFICIENCIA,
331
+ x_col="Descrição",
332
+ y_col="Valor",
333
+ titulo="Distribuição por Deficiência",
334
+ )
335
+ st.plotly_chart(fig_deficiencia)
336
+
337
+ elif selected_tab == "Doenças" and DF_DOENCAS is not None:
338
+ st.subheader("Distribuição por Doenças")
339
+ col1, col2 = st.columns(2)
340
+ with col1:
341
+ st.dataframe(DF_DOENCAS, hide_index=True)
342
+ with col2:
343
+ fig_doencas = criar_grafico_personalizado(
344
+ DF_DOENCAS,
345
+ x_col="Descrição",
346
+ y_col="Valor",
347
+ titulo="Distribuição por Doenças",
348
+ )
349
+ st.plotly_chart(fig_doencas)
350
+
351
+ elif selected_tab == "Escolaridade" and DF_ESCOLA is not None:
352
+ st.subheader("Distribuição por Escolaridade")
353
+ col1, col2 = st.columns(2)
354
+ with col1:
355
+ st.dataframe(DF_ESCOLA, hide_index=True)
356
+ with col2:
357
+ fig_escola = criar_grafico_personalizado(
358
+ DF_ESCOLA,
359
+ x_col="Descrição",
360
+ y_col="Valor",
361
+ titulo="Distribuição por Escolaridade",
362
+ )
363
+ st.plotly_chart(fig_escola)
364
+
365
+ elif selected_tab == "Identidade de Gênero" and DF_TRANSGEN is not None:
366
+ st.subheader("Distribuição por Identidade de Gênero")
367
+ col1, col2 = st.columns(2)
368
+ with col1:
369
+ st.dataframe(DF_TRANSGEN, hide_index=True)
370
+ with col2:
371
+ fig_transgen = criar_grafico_personalizado(
372
+ DF_TRANSGEN,
373
+ x_col="Descrição",
374
+ y_col="Valor",
375
+ titulo="Distribuição por Identidade de Gênero",
376
+ )
377
+ st.plotly_chart(fig_transgen)
378
+
379
+
380
+ ###########################################
381
+ ############### EXPANDERCOM GRÁFICOS ######
382
+ ###########################################
383
+
384
+ add_vertical_space(5)
385
+
386
+ ###########################################
387
+ ############### FOTO DO BOT ###############
388
+ ###########################################
389
+
390
+ with stylable_container(
391
+ key="bot",
392
+ css_styles="""
393
+ img {
394
+ width: 120px;
395
+ height: 100px;
396
+ overflow: hidden;
397
+ position: relative;
398
+ object-fit: cover;
399
+ border-radius: 14px; /* Adiciona bordas arredondadas */
400
+ }
401
+ """,
402
+ ):
403
+ st.image("src/images/b.png")
404
+
405
+ ###########################################
406
+ ############### FOTO DO BOT ###############
407
+ ###########################################
408
+
409
+
410
+ ###########################################
411
+ ############### CHATBOT RCI ###############
412
+ ###########################################
413
+
414
+ # Configuração inicial do Groq client
415
+ client = Groq(api_key=st.secrets["GROQ_API_KEY"])
416
+
417
+
418
+ # Função para gerar a análise inicial
419
+ def generate_initial_analysis(resumo_rci):
420
+ """
421
+ Generates an initial analysis report based on the provided resumo_rci.
422
+ Parameters:
423
+ resumo_rci (str): The resumo_rci to be analyzed.
424
+ Returns:
425
+ str: The generated initial analysis report.
426
+ Raises:
427
+ Exception: If there is an error generating the initial analysis.
428
+ Examples:
429
+ >>> generate_initial_analysis("Resumo do RCI")
430
+ "Cabeçalho com informações gerais (data, cidadãos ativos, saída, mudança de território,
431
+ óbito)\n\nAnálise de Faixa Etária (Crianças de 0 a 2 anos, 0 a 4 anos, mulheres na faixa etária
432
+ de preventivo 25 a 64 anos, mulehres na faixa etária de mamomagrafia 50a 69 anos)\n\nComparação
433
+ de Sexo\n\nAnálise de Raça / Cor\n\nAnálise de
434
+ Escolaridade\n\nOrientação Sexual\n\nDeficiências\n\nSituações de Saúde Gerais\n\n\nFormate seu
435
+ relatório usando negrito para títulos de seções e subtítulos. Use listas com marcadores
436
+ quando apropriado para melhorar a legibilidade. Apresente seu relatório final dentro de tags
437
+ <relatorio></relatorio>."
438
+ """
439
+ try:
440
+ initial_analysis = client.chat.completions.create(
441
+ messages=[
442
+ {
443
+ "role": "system",
444
+ "content": "Você é um assistente de análise de dados de saúde. Sua tarefa é analisar os dados fornecidos e criar um relatório detalhado seguindo o modelo especificado. O relatório deve ser escrito em português.",
445
+ },
446
+ {
447
+ "role": "user",
448
+ "content": f"""
449
+ Aqui estão os dados para análise:
450
+ <resumo_rci>
451
+ {resumo_rci}
452
+ </resumo_rci>
453
+
454
+ Analise cuidadosamente os dados fornecidos e crie um relatório
455
+ seguindo o modelo apresentado. O relatório deve incluir as seguintes
456
+ seções:
457
+ 1. Cabeçalho com informações gerais (data, cidadãos ativos, saída,
458
+ mudança de território, óbito)
459
+ 2. Análise de Faixa Etária (Crianças de 0 a 2 anos, 0 a 4 anos, mulheres
460
+ na faixa etária de preventivo 25 a 64 anos, mulehres na faixa etária de
461
+ mamomagrafia 50a 69 anos)
462
+ 3. Comparação de Sexo
463
+ 4. Análise de Raça / Cor
464
+ 5. Análise de Escolaridade
465
+ 6. Orientação Sexual
466
+ 7. Deficiências
467
+ 8. Situações de Saúde Gerais
468
+
469
+ Para cada seção:
470
+ - Calcule os totais e percentuais relevantes
471
+ - Faça comparações quando apropriado (por exemplo, entre masculino
472
+ e feminino)
473
+ - Destaque as 3 informações mais significativas
474
+
475
+ Formate seu relatório usando negrito para títulos de seções e subtítulos.
476
+ Use o título de Análise parcial, use listas com marcadores quando apropriado
477
+ para melhorar a legibilidade.
478
+
479
+ """,
480
+ },
481
+ ],
482
+ model="llama3-70b-8192",
483
+ temperature=0.2,
484
+ max_tokens=1500,
485
+ )
486
+ return initial_analysis.choices[0].message.content
487
+ except Exception as e:
488
+ st.error(f"Erro ao gerar a análise inicial: {e}")
489
+ return "Não foi possível gerar a análise inicial."
490
+
491
+
492
+ # Carregar arquivo
493
+ # uploaded_file = st.file_uploader("Escolha um arquivo CSV", type="csv")
494
+
495
+ if uploaded_file is not None:
496
+ if (
497
+ "current_file" not in st.session_state
498
+ or st.session_state.current_file != uploaded_file.name
499
+ ):
500
+ st.session_state.current_file = uploaded_file.name
501
+ st.session_state.initial_analysis = None # Reset da análise anterior
502
+ st.session_state.resumo_rci = None # Reset do resumo
503
+
504
+ # Botão para gerar o resumo
505
+ if st.button("Gerar Resumo"):
506
+ with st.spinner("Gerando resumo..."):
507
+ st.session_state.resumo_rci = (
508
+ gerar_resumo_df()
509
+ ) # Gera o resumo do DataFrame
510
+ st.session_state.initial_analysis = generate_initial_analysis(
511
+ st.session_state.resumo_rci
512
+ )
513
+ st.success("Resumo gerado com sucesso!")
514
+
515
+ col1, col2 = st.columns(2)
516
+
517
+ with col1:
518
+ with st.expander("Resumo Inicial", expanded=True):
519
+ if "initial_analysis" in st.session_state:
520
+ st.write("**Panorama Geral dos Dados:**")
521
+ st.text_area(
522
+ "Análise Inicial",
523
+ value=st.session_state.initial_analysis,
524
+ height=300,
525
+ disabled=False,
526
+ )
527
+ else:
528
+ st.write("**Clique em 'Gerar Resumo' para analisar os dados.**")
529
+
530
+ with col2:
531
+ with st.expander("Converse com o 🤖 Zé Flamengo", expanded=True):
532
+ # Inicialização do histórico do chat
533
+ if "groq_chat_history" not in st.session_state:
534
+ st.session_state.groq_chat_history = []
535
+
536
+ # Exibição do histórico do chat
537
+ for message in st.session_state.groq_chat_history:
538
+ with st.chat_message(message["role"]):
539
+ st.markdown(message["content"])
540
+
541
+ # Input do usuário e processamento da resposta
542
+ if user_message := st.chat_input(
543
+ "Digite sua pergunta sobre saúde na microárea:"
544
+ ):
545
+ # Adiciona a mensagem do usuário ao histórico
546
+ st.session_state.groq_chat_history.append(
547
+ {"role": "user", "content": user_message}
548
+ )
549
+
550
+ try:
551
+ # Usar o resumo já gerado
552
+ if "resumo_rci" not in st.session_state:
553
+ st.warning("Por favor, gere o resumo antes de fazer perguntas.")
554
+ else:
555
+ resumo_rci = st.session_state.resumo_rci
556
+
557
+ # Preparação do contexto para a API
558
+ context = f"""
559
+ Seu nome é Zé Flamengo, você é um assistente virtual especializado em análise de dados
560
+ médicos epidemiológicos. Você tem 20 anos de experiência em análise de dados de saúde de
561
+ microáreas de um PSF (Programa Saúde da Família).
562
+ Sua função é:
563
+ 1. Analisar dados de uma unidade básica de saúde.
564
+ 2. Os dados que irá analisar são provenientes do Relatório de Cadastro Individual, advindos do PEC SUS.
565
+ 3. Suas respostas devem ser sempre em português.
566
+ 4. Seja conciso e evite conversar sobre outros temas.
567
+ 5. Sempre retome o tema da conversa.
568
+ 6. Realize sempre os cálculos novamente para garantir que os resultados fornecidos sejam precisos e atualizados.
569
+ Os dataframes que irá analisar são do Relatório de cadastro indiviual.
570
+ ele foi transformados em texto aqui disponíveis:
571
+ {resumo_rci}
572
+ As faixas etárias recomendadas para exames preventivos são:
573
+ - **Papanicolau (Preventivo):** Mulheres entre 25 e 64 anos, com frequência anual nos primeiros dois exames
574
+ consecutivos com resultados normais, depois a cada três anos.
575
+ - **Mamografia:** Mulheres entre 50 e 69 anos, com frequência bienal.
576
+ Informações sobre o Relatório de Cadastro Individual:
577
+ - **Objetivo:** Coletar dados sociodemográficos e de saúde dos indivíduos cadastrados em uma unidade básica de saúde.
578
+ - **Principais Indicadores:** Idade, sexo, condições de saúde (doenças crônicas, gestantes, etc.), status de
579
+ vacinação, hábitos de vida (tabagismo, alcoolismo, atividade física), entre outros.
580
+ Exemplos de perguntas esperadas:
581
+ - Qual a porcentagem de mulheres na faixa etária de preventivo?
582
+ - Qual a porcentagem de mulheres na faixa etária de mamografia?
583
+ - Quantas mulheres estão nas faixas etárias de preventivo e mamografia?
584
+ - Qual a relação masculino/feminino?
585
+ - Qual a porcentagem das doenças em relação à população total?
586
+ - Use essas informações para responder às perguntas do usuário.
587
+ Regras:
588
+ 1. Seja sempre cortês.
589
+ 2. Responda somente assuntos referentes ao resumo.
590
+ 3. Caso seja feita alguma pergunta a você diferente de resumos, responda: "Vamos voltar ao trabalho que interessa?"
591
+ 4. Responda sempre em português.
592
+ 5. Se não souber a resposta, responda: "Desculpe, mas não tenho esta informação."
593
+ 6. Nas suas respostas, não forneça os nomes dos dataframes, apenas responda às perguntas.
594
+ 7. Destaque os principais achados e tendências nos dados sempre que possível.
595
+ 8. Se aplicável, sugira possíveis ações ou recomendações baseadas nos dados analisados.
596
+ """
597
+
598
+ # Chamada à API Groq
599
+ chat_rci = client.chat.completions.create(
600
+ messages=[
601
+ {"role": "system", "content": context},
602
+ *st.session_state.groq_chat_history,
603
+ ],
604
+ model="llama3-70b-8192",
605
+ temperature=0.3,
606
+ max_tokens=2500,
607
+ )
608
+
609
+ # Processamento da resposta
610
+ if chat_rci.choices and len(chat_rci.choices) > 0:
611
+ response_message = chat_rci.choices[0].message.content
612
+ else:
613
+ response_message = (
614
+ "Desculpe, não foi possível gerar uma resposta."
615
+ )
616
+
617
+ # Adição da resposta ao histórico
618
+ st.session_state.groq_chat_history.append(
619
+ {"role": "assistant", "content": response_message}
620
+ )
621
+
622
+ # Exibição da resposta
623
+ with st.chat_message("assistant"):
624
+ st.markdown(response_message)
625
+
626
+ except Exception as e:
627
+ st.error(f"Erro ao gerar a resposta: {e}")
628
+
629
+ # Botão para limpar o histórico do chat
630
+ if st.button("Limpar histórico do chat"):
631
+ st.session_state.groq_chat_history = []
632
+ st.rerun()