Я новичок в использовании geopandas
, поэтому у меня довольно простой вопрос. Я хочу определить, сколько границы контакта происходит между соседними местами в гео-фрейме данных.
Я приведу пример. Следующий код читает предварительно загруженный геофрейм, случайным образом создает страны, помеченные как «Обработанные», определяет функцию, которая присваивает соседним странам, а затем отображает график со странами, граничащие с чуть более светлым оттенком.
import geopandas as gp
import numpy as np
import matplotlib.pyplot as plt
path = gp.datasets.get_path('naturalearth_lowres')
earth = gp.read_file(path)
africa = earth[earth.continent=='Africa']
africa['some_places'] = np.random.randint(0,2,size=africa.shape[0])*2
# Define and apply a function that determines which countries touch which others
def touches(x):
result = 0
if x in africa.loc[africa.some_places==2,'geometry']:
result = 2
else:
for y in africa.loc[africa.some_places==2,'geometry']:
if y.touches(x) :
result = 1
break
else:
continue
return result
africa['touch'] = africa.geometry.apply(touches)
# Plot the main places which are 2, the ones that touch which are 1, and the non-touching 0
fig, ax = plt.subplots()
africa.plot(column='touch', cmap='Blues', linewidth=0.5, ax=ax, edgecolor='.2')
ax.axis('off')
plt.show()
Для меня это дало следующую карту:
Теперь проблема в том, что на самом деле я не хочу без разбора затенять все области голубым цветом. Я - в идеале - хочу определить длину границы вдоль обработанных стран, а затем иметь скользящую шкалу того, насколько вы затронуты, исходя из того, какую границу вы разделяете с одной или несколькими обработанными странами.
По крайней мере, я хочу иметь возможность выбрасывать места, которые граничат только с 1 или 2 милями границы с другой страной (или, возможно, встречаются в углу). Любые советы или решения приветствуются!