DavMelchi commited on
Commit
e81ad8d
·
1 Parent(s): 972360b

Fix KML site labels and update physical DB

Browse files
physical_db/physical_database.csv CHANGED
@@ -4161,7 +4161,7 @@
4161
  6629,3,6629_3,220,-8.577166667,11.02927778,57.4,FARASSABABEN,FARASSABABEN,Yanfolila,Sikasso,,0,0,
4162
  663,1,663_1,0,-5.48177778,12.38461111,57.4,KOUTIALA,KOUTIALA,KOUTIALA,KOUTIALA,,0,0,
4163
  663,2,663_2,120,-5.48177778,12.38461111,57.4,KOUTIALA,KOUTIALA,KOUTIALA,KOUTIALA,,0,0,
4164
- 663,3,663_3,350,-5.48177778,12.38461111,57.4,KOUTIALA,KOUTIALA,KOUTIALA,KOUTIALA,,0,0,
4165
  6630,1,6630_1,20,-7.306555556,11.48488889,57.4,FLOKOLON,FLOKOLON,BOUGOUNI,SIKASSO,,0,0,
4166
  6630,2,6630_2,160,-7.306555556,11.48488889,57.4,FLOKOLON,FLOKOLON,BOUGOUNI,SIKASSO,,0,0,
4167
  6630,3,6630_3,260,-7.306555556,11.48488889,57.4,FLOKOLON,FLOKOLON,BOUGOUNI,SIKASSO,,0,0,
 
4161
  6629,3,6629_3,220,-8.577166667,11.02927778,57.4,FARASSABABEN,FARASSABABEN,Yanfolila,Sikasso,,0,0,
4162
  663,1,663_1,0,-5.48177778,12.38461111,57.4,KOUTIALA,KOUTIALA,KOUTIALA,KOUTIALA,,0,0,
4163
  663,2,663_2,120,-5.48177778,12.38461111,57.4,KOUTIALA,KOUTIALA,KOUTIALA,KOUTIALA,,0,0,
4164
+ 663,3,663_3,240,-5.48177778,12.38461111,57.4,KOUTIALA,KOUTIALA,KOUTIALA,KOUTIALA,,0,0,
4165
  6630,1,6630_1,20,-7.306555556,11.48488889,57.4,FLOKOLON,FLOKOLON,BOUGOUNI,SIKASSO,,0,0,
4166
  6630,2,6630_2,160,-7.306555556,11.48488889,57.4,FLOKOLON,FLOKOLON,BOUGOUNI,SIKASSO,,0,0,
4167
  6630,3,6630_3,260,-7.306555556,11.48488889,57.4,FLOKOLON,FLOKOLON,BOUGOUNI,SIKASSO,,0,0,
queries/process_gsm.py CHANGED
@@ -221,7 +221,7 @@ def process_gsm_data_to_excel(file_path: str):
221
 
222
  def process_gsm_data_to_kml(file_path: str):
223
  gsm_kml_df = process_gsm_data(file_path)
224
- gsm_kml_df = gsm_kml_df[GSM_KML_COLUMNS]
225
  # Add colors column base on "band" column
226
  gsm_kml_df["color"] = gsm_kml_df["band"].map(UtilsVars.color_mapping)
227
  # Add size column base on "band" column
 
221
 
222
  def process_gsm_data_to_kml(file_path: str):
223
  gsm_kml_df = process_gsm_data(file_path)
224
+ gsm_kml_df = gsm_kml_df[GSM_KML_COLUMNS].copy()
225
  # Add colors column base on "band" column
226
  gsm_kml_df["color"] = gsm_kml_df["band"].map(UtilsVars.color_mapping)
227
  # Add size column base on "band" column
queries/process_lte.py CHANGED
@@ -257,10 +257,10 @@ def process_lte_data_to_kml(file_path: str):
257
  lte_kml_dfs = process_lte_data(file_path)
258
 
259
  lte_fdd_klm_df = lte_kml_dfs[0]
260
- lte_fdd_klm_df = lte_fdd_klm_df[LTE_KML_COLUMNS]
261
 
262
  lte_tdd_klm_df = lte_kml_dfs[1]
263
- lte_tdd_klm_df = lte_tdd_klm_df[LTE_KML_COLUMNS]
264
 
265
  # Merge FDD and TDD dataframes
266
  lte_kml_df = pd.concat([lte_fdd_klm_df, lte_tdd_klm_df], ignore_index=True)
 
257
  lte_kml_dfs = process_lte_data(file_path)
258
 
259
  lte_fdd_klm_df = lte_kml_dfs[0]
260
+ lte_fdd_klm_df = lte_fdd_klm_df[LTE_KML_COLUMNS].copy()
261
 
262
  lte_tdd_klm_df = lte_kml_dfs[1]
263
+ lte_tdd_klm_df = lte_tdd_klm_df[LTE_KML_COLUMNS].copy()
264
 
265
  # Merge FDD and TDD dataframes
266
  lte_kml_df = pd.concat([lte_fdd_klm_df, lte_tdd_klm_df], ignore_index=True)
queries/process_wcdma.py CHANGED
@@ -223,7 +223,7 @@ def process_wcdma_data_to_kml(file_path: str):
223
  file_path (str): The path to the file.
224
  """
225
  wcdma_kml_df = process_wcdma_data(file_path)
226
- wcdma_kml_df = wcdma_kml_df[WCDMA_KML_COLUMNS]
227
  # Add colors column base on "band" column
228
  wcdma_kml_df["color"] = wcdma_kml_df["band"].map(UtilsVars.color_mapping)
229
  # Add size column base on "band" column
 
223
  file_path (str): The path to the file.
224
  """
225
  wcdma_kml_df = process_wcdma_data(file_path)
226
+ wcdma_kml_df = wcdma_kml_df[WCDMA_KML_COLUMNS].copy()
227
  # Add colors column base on "band" column
228
  wcdma_kml_df["color"] = wcdma_kml_df["band"].map(UtilsVars.color_mapping)
229
  # Add size column base on "band" column
tests/test_kml_creator.py ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+
3
+ from utils.kml_creator import generate_kml_from_df
4
+
5
+
6
+ def test_generate_kml_from_df_formats_integer_like_site_codes_without_decimal():
7
+ df = pd.DataFrame(
8
+ [
9
+ {
10
+ "code": 694.0,
11
+ "name": "694_TEST",
12
+ "Longitude": -7.1,
13
+ "Latitude": 12.3,
14
+ "Azimut": 30,
15
+ "Hauteur": 40,
16
+ "band": "G900",
17
+ "color": "7fff0000",
18
+ "size": 100,
19
+ }
20
+ ]
21
+ )
22
+
23
+ kml_text = generate_kml_from_df(df).getvalue().decode("utf-8")
24
+
25
+ assert "<name>694</name>" in kml_text
26
+ assert "<name>694.0</name>" not in kml_text
utils/kml_creator.py CHANGED
@@ -6,11 +6,31 @@ import pandas as pd
6
  import simplekml
7
 
8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  def create_sector(kml: simplekml.Kml, row, arc_angle=65):
10
  """Create a sector shape for the telecom antenna in KML with sector details."""
11
  code, name, azimuth, lon, lat, size, color = (
12
- row["code"],
13
- row["name"],
14
  row["Azimut"],
15
  row["Longitude"],
16
  row["Latitude"],
@@ -39,7 +59,7 @@ def create_sector(kml: simplekml.Kml, row, arc_angle=65):
39
  # Dynamically create the description from all DataFrame columns
40
  description = "<b>Sector Details:</b><br>"
41
  for column, value in row.items():
42
- description += f"<b>{column}:</b> {value}<br>"
43
 
44
  pol.description = description
45
  pol.style.polystyle.color = color # Set color from DataFrame
@@ -58,7 +78,8 @@ def generate_kml_from_df(df: pd.DataFrame):
58
  ) # Larger first, smaller on top
59
 
60
  for _, row in df_sorted.iterrows():
61
- code, lon, lat = row["code"], row["Longitude"], row["Latitude"]
 
62
 
63
  # Add site name as a point only once
64
  if code not in site_added:
 
6
  import simplekml
7
 
8
 
9
+ def _format_kml_value(value) -> str:
10
+ """Render integer-like numeric values without a trailing .0 in KML text."""
11
+ if pd.isna(value):
12
+ return ""
13
+
14
+ if isinstance(value, str):
15
+ return value
16
+
17
+ if isinstance(value, (bool, np.bool_)):
18
+ return str(value)
19
+
20
+ if isinstance(value, (int, np.integer)):
21
+ return str(int(value))
22
+
23
+ if isinstance(value, (float, np.floating)):
24
+ return str(int(value)) if float(value).is_integer() else str(value)
25
+
26
+ return str(value)
27
+
28
+
29
  def create_sector(kml: simplekml.Kml, row, arc_angle=65):
30
  """Create a sector shape for the telecom antenna in KML with sector details."""
31
  code, name, azimuth, lon, lat, size, color = (
32
+ _format_kml_value(row["code"]),
33
+ _format_kml_value(row["name"]),
34
  row["Azimut"],
35
  row["Longitude"],
36
  row["Latitude"],
 
59
  # Dynamically create the description from all DataFrame columns
60
  description = "<b>Sector Details:</b><br>"
61
  for column, value in row.items():
62
+ description += f"<b>{column}:</b> {_format_kml_value(value)}<br>"
63
 
64
  pol.description = description
65
  pol.style.polystyle.color = color # Set color from DataFrame
 
78
  ) # Larger first, smaller on top
79
 
80
  for _, row in df_sorted.iterrows():
81
+ code = _format_kml_value(row["code"])
82
+ lon, lat = row["Longitude"], row["Latitude"]
83
 
84
  # Add site name as a point only once
85
  if code not in site_added: