151100
This commit is contained in:
@@ -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.")
|
||||
|
||||
Reference in New Issue
Block a user