This commit is contained in:
2024-11-15 15:03:05 +03:00
parent f3345a102e
commit 9d68048e17
7 changed files with 2639544 additions and 6 deletions

View File

@@ -5,14 +5,57 @@ with open('russia.geojson', 'r', encoding='utf-8') as infile:
data = json.load(infile)
# Поля, которые нужно оставить
fields_to_keep = ['id', 'name', 'full_name', 'major_cities', '_cartodb_id0', 'cartodb_id']
fields_to_keep = ['id', 'name', '_cartodb_id0', 'cartodb_id']
# Обновляем свойства в каждом объекте features
# Функция для округления координат до 3 знаков после запятой
def round_coordinates(coords):
if isinstance(coords[0], list):
# Обработка вложенных списков (для MultiPolygon или других сложных структур)
return [round_coordinates(c) for c in coords]
else:
# Округление координат точки
return [round(coord, 3) for coord in coords]
# Функция для удаления дубликатов из списка координат на самом нижнем уровне вложенности
def remove_duplicate_coordinates(coords):
if not all(isinstance(c, list) and len(c) == 3 for c in coords):
# Если это не список пар координат (lon, lat), пропускаем обработку
return coords
seen = set()
unique_coords = []
for coord in coords:
coord_tuple = tuple(coord) # Преобразуем список координат в кортеж для использования в множестве
if coord_tuple not in seen:
seen.add(coord_tuple)
unique_coords.append(coord)
return unique_coords
# Обновляем свойства, округляем и удаляем дубликаты координат в каждом объекте features
for feature in data['features']:
# Сжатие свойств
feature['properties'] = {key: feature['properties'][key] for key in fields_to_keep if key in feature['properties']}
# Запись резФультата в новый файл
# Округление координат
rounded_coords = round_coordinates(feature['geometry']['coordinates'])
# Удаление дубликатов для координатных структур (обрабатываем только нижний уровень)
if feature['geometry']['type'] == 'Point':
# Для точки просто округляем координаты
feature['geometry']['coordinates'] = rounded_coords
elif feature['geometry']['type'] in ['Polygon', 'MultiLineString']:
# Удаляем дубликаты на уровне списков координат (например, [[lon, lat], [lon, lat], ...])
feature['geometry']['coordinates'] = [remove_duplicate_coordinates(part) for part in rounded_coords]
elif feature['geometry']['type'] == 'MultiPolygon':
# Удаляем дубликаты в многоуровневых структурах (например, [[[lon, lat], [lon, lat], ...], ...])
feature['geometry']['coordinates'] = [[remove_duplicate_coordinates(part) for part in polygon] for polygon in
rounded_coords]
# Запись результата в новый файл
with open('russia_2.geojson', 'w', encoding='utf-8') as outfile:
json.dump(data, outfile, ensure_ascii=False, separators=(',', ':'))
print("Обработка завершена. Результат записан в output.json.")
print("Обработка завершена. Результат записан в russia_2.geojson.")