Как правильно сохранить данные в Shapefile после их считывания с файлов?
У меня есть 2 файла, в которых есть данные.
Я хочу проходится по этим файлам и по заданной мне логике, сохранять данные в Shapefile.
Вот как я это делаю:
import shapefile
w = shapefile.Writer('polygon')
with open('long_1_double.txt', 'r') as long:
for i in long:
i_1, i_2 = i.split()
with open('short_1_double.txt', 'r') as short:
for k in short:
k_1, k_2 = k.split()
w.poly(parts=[[[str(i_1),str(k_1)],[str(i_2),str(k_1)],[str(i_2),str(k_2)],[str(i_1),str(k_2)]]])
w.field('FIRST_FLD','C','40')
w.field('SECOND_FLD','C','40')
w.record('First','Polygon')
w.save('polygon')
При выполении скрипта, я получаю ошибку:
poly() got an unexpected keyword argument 'parts'
Как мне сохранить эти данные в Shapefile и исправить ошибку?
Если это может быть полезно, вот скрипт сохранения данных в geojson. Там все работает.
count = 0
file_is_empty = True
with open(final, 'w') as fin:
fin.write('{"type": "FeatureCollection","features": [')
with open('long_1_double.txt', 'r') as long:
for i in long:
i_1, i_2 = i.split()
with open('short_1_double.txt', 'r') as short:
for k in short:
k_1, k_2 = k.split()
string = '' if file_is_empty else ','
string += '{"type": "Feature", "properties": {"area": ' +str(count)+'}, "geometry": {"type": "Polygon", "coordinates": [[['+str(i_1) + ',' + str(k_1)+ ']'+',' + '[' + str(i_2)+','+str(k_1) + ']'+',' + '['+str(i_2)+ ',' + str(k_2) +'],' + '[' + str(i_1)+ ',' + str(k_2) +']]]}}'
fin.write(string)
file_is_empty = False
count+=1
end = ']}'
fin.write(end)
Вот результат geojson скрипта:
{
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"properties": {
"area": 1
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[90.00526999999931, -0.004729999999999964],
[90.00553999999863, -0.004729999999999964],
[90.00526999999931, -0.004459999999999928],
[90.00553999999863, -0.004459999999999928]
]
]
}
},{
"type": "Feature",
"properties": {
"area": 81
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[90.00742999999386, -0.002569999999999677],
[90.00769999999319, -0.002569999999999677],
[90.00742999999386, -0.0022999999999996413],
[90.00769999999319, -0.0022999999999996413]
]
]
}
}]
}
Мне нужно точно те же данные, что и в geojson, только в Shapefile. Как правильно сохранить нужные мне данные в Shapefile?
В идеале, нужно считывать данные и записывать их построчно в Shapefile, так как данных очень много и все они не поместятся в оперативной памяти.
Спасибо)
P. S. Вариант при котором мы конвертируем geojson в Shapefile не подойдет, из за очень больших размеров данных :)
Ответы (1 шт):
Функция shapefile.Writer() ожидает на вход имя файла, вы же ей передали int - shapefile.POLYGON. Об этом и сообщается в ошибке.