Как правильно объединить дороги в GeoJSON по именам, сохранив порядок координат, и визуализировать их тонкими линиями?
У меня есть GeoJSON-файл с дорогами Москвы. Каждая дорога может быть разбита на несколько сегментов; у некоторых есть название (name), у некоторых - нет. Я пытаюсь объединить все сегменты с одинаковым названием в один список координат. Код, которым я пользуюсь:
import re
s = {}
with open('amoscow_streets_lines.geojson', 'r', encoding='utf-8') as file:
for line in file:
m = re.search('name": (.+?) }', line)
n = re.search('coordinates": (.+?) ] } }', line)
if m and n:
found_m = m.group(1)
found_n = n.group(1)
if found_m in s.keys():
s[found_m] = s[found_m] + ', ' + found_n
else:
s.setdefault(found_m, '')
s[found_m] = s[found_m] + found_n
for i in s.keys():
s[i] = s[i].replace(' ], [ [ ', ' ')
s[i] = s[i].replace('[ [', ' ')
s[i] = s[i].replace(' ], [ ', ' ')
s[i] = s[i].replace(' ]', ' ')
s[i] = s[i].replace(', ', ' ')
s[i] = s[i].replace(' ', ' ')
for j in s.keys():
temp = s[j].split()
w = []
for i in range(0, len(temp), 2):
q = []
q.append(float(temp[i]))
q.append(float(temp[i+1]))
w.append(q)
w.sort()
s[j] = w
print(s)
Мой код склеивает дороги в рандомном порядке, из-за чего карта Москвы превращается в паутину
примерно вот так
{ "type": "Feature", "properties": { "u": 90058434, "v": 5028284459, "key": 0, "name": null }, "geometry": { "type": "LineString", "coordinates": [ [ 37.3822274, 55.5216948 ], [ 37.3803227, 55.5209065 ], [ 37.3793108, 55.5205069 ], [ 37.3791343, 55.5203403 ], [ 37.379099, 55.5201205 ], [ 37.3791343, 55.5199806 ], [ 37.3792684, 55.5198472 ], [ 37.3794701, 55.5197341 ], [ 37.379795, 55.5196436 ], [ 37.3801739, 55.5196295 ], [ 37.3805394, 55.5196844 ], [ 37.3808237, 55.5197928 ], [ 37.3810244, 55.5199551 ], [ 37.3823602, 55.521613 ] ] } },
{ "type": "Feature", "properties": { "u": 90058434, "v": 5028305674, "key": 0, "name": "Калужское шоссе" }, "geometry": { "type": "LineString", "coordinates": [ [ 37.3822274, 55.5216948 ], [ 37.3814237, 55.521188 ], [ 37.3804979, 55.5207316 ], [ 37.3797844, 55.5204572 ], [ 37.3792303, 55.5202795 ], [ 37.3782119, 55.5199918 ], [ 37.3770594, 55.5196705 ], [ 37.3729413, 55.518529 ], [ 37.3704865, 55.5178486 ], [ 37.3690724, 55.5174495 ] ] } },
{ "type": "Feature", "properties": { "u": 90058438, "v": 5238318164, "key": 0, "name": null }, "geometry": { "type": "LineString", "coordinates": [ [ 37.3321304, 55.4996678 ], [ 37.3323454, 55.4996274 ], [ 37.3331818, 55.4994734 ], [ 37.334011, 55.4992911 ] ] } },
{ "type": "Feature", "properties": { "u": 90058438, "v": 619092375, "key": 0, "name": "улица Старые Ватутинки" }, "geometry": { "type": "LineString", "coordinates": [ [ 37.3321304, 55.4996678 ], [ 37.3320343, 55.4995199 ], [ 37.3316447, 55.498912 ], [ 37.3315129, 55.4987065 ], [ 37.331293, 55.4983634 ], [ 37.3308362, 55.4976507 ] ] } },
Вот так выглядит часть данных в не обработанном виде.
Как при отображении на карте сделать линии тоньше?