Проект УИК Республики Башкортостан: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Нет описания правки
 
(не показано 25 промежуточных версий 1 участника)
Строка 1: Строка 1:
'''Внимание: Эти данные устарели! Актуальные (2013 г.) данные по УИК собираются в проекте УИК ГЕО, [http://uikgeo.gis-lab.info присоединяйтесь], нам нужно ваше участие.'''
* [http://cikrb.ru/ Центральная избирательная комиссия Республики Башкортостан]
* [http://cikrb.ru/ Центральная избирательная комиссия Республики Башкортостан]
* [http://cikrb.ru/areas/?SHOWALL_1=1 Перечни участков] ([[Файл:Uik-bashkortostan.zip|Одним архивом]]) — исходники
* [http://cikrb.ru/areas/?SHOWALL_1=1 Перечни участков] ([[Файл:Uik-bashkortostan.zip|Одним архивом]]) — исходники
Строка 9: Строка 11:
[[Файл:Uik-ufa.zip]] — исходники по Уфе + черновой вариант shp файла.
[[Файл:Uik-ufa.zip]] — исходники по Уфе + черновой вариант shp файла.


'''Если берёте район, то впишите себя в таблицу, что б не никто больше не взялся за него.'''
'''Если берёте район, то впишите себя в таблицу, что бы никто больше не взялся за него.'''


{| class="wikitable"
{| class="wikitable"
Строка 16: Строка 18:
! Прогресс
! Прогресс
! Полученный SHP-файл
! Полученный SHP-файл
|-  
|- bgcolor="yellowgreen"
| Демский || ||  ||
| Демский || [[Участник:Yellow-sky|yellow_sky]] || 100% || [[Файл:Ufa-demsky-geocoded.zip]]
|-  
|- bgcolor="yellowgreen"
| Калининский || || ||
| Калининский || [[Участник:Yellow-sky|yellow_sky]] || 100% || [[Файл:Ufa-kalininsky-geocoded.zip]]
|-  
|- bgcolor="yellowgreen"
| Кировский || || ||
| Кировский || [[Участник:Yellow-sky|yellow_sky]] || 100% || [[Файл:Ufa-kirovsky-geocoded.zip]]
|-  
|- bgcolor="yellowgreen"
| Ленинский || || ||  
| Ленинский || [[Участник:Yellow-sky|yellow_sky]] || 100% || [[Файл:Ufa-leninsky-geocoded.zip]]
|-   
|-  bgcolor="yellow"
| Октябрьский || || ||
| Октябрьский || [[Участник:Yellow-sky|yellow_sky]] || 60% ||
|-  
|- bgcolor="yellow"
| Орджоникидзевский || || ||
| Орджоникидзевский || [[Участник:Yellow-sky|yellow_sky]] || 60% ||
|-  
|- bgcolor="yellow"
| Советский || || ||
| Советский || [[Участник:Yellow-sky|yellow_sky]] || 60% ||
|}
|}


== Описание процесса ==
=== Описание процесса ===
Как видно из приложенных pdf, все таблицы имеют четкую структуру:
{| class="wikitable"
! No ИУ
! Адрес избирательного участка
! Телефон ИУ
! Описание избирательного участка
|}
Нам пригодятся первые три поля. Назовем их number, addr_vote, phone.
К сожалению, во всех районах города разная форма записи адреса. Попытаемся привести её к единой.
 
==== Конвертирование в CSV ====
Для начала необходимо конвертировать все таблицы из PDF в более пригодный для работы формат CSV.
К сожалению, я не нашел ни одного нормального варианта такой конвертации ('''Может кто подскажет???'''). <br />
'''Рабочей вариант:''' Windows 7, Acrobat Reader 9.5, LibreOffice Calc 3.4.2. В Reader'e выбираем все, копируем, и вставляем в Calc. (Вариант с Calc 3.4.5 и Acrobat Reader 9.47 под Linux почему то не работает)<br />
'''Внимание:''' Необходимо удалить поле 'Описание избирательного участка', и переименовать первые три поля.
Перед экспортом в CSV убедитесь, что у вас нет лишних полей, которые могут возникать при копировании таблицы из PDF. При экспорте лучше использовать кодировку UTF-8.<br />
'''Результат:''' [[Файл:ufa-csv.zip]] - готовые CSV файлы
 
==== Конвертирование в SHP ====
Конвертировать можно с помощью плагина [[Пакетное_геокодирование_в_QGIS | RuGeocoder]]. Для этого необходимо запустить инструмент "CSV to SHP converter" и выбрать исходный csv файл. При желании можно указать месторасположение результирующего shp файла. В результате конвертации, будет получен точечный shp файл с той же самой атрибутикой, и нулевыми координатами. Так же к атрибутике будут добавлены пустые поля типа string: settlement, street, building_n и geocoded. Данные поля можно будет использовать в целях подготовки адреса для геокодера.
 
==== Обработка адреса ====
Обработку адреса удобно выполнить с помощью [http://gis-lab.info/qa/fieldpyculator.html FieldPyculator].<br />
Так как в каждом файле один район Уфы, то поле settlement можно не заполнять.<br />
'''Для ufa-demsky'''<br />
street:
<pre>
street = <addr_vote>.split(",")[0]
value = street.replace(u'ул.', '').strip()
</pre>
После обработки необходимо руками поправить 3 записи.<br />
house_num:
<pre>
try:
num = <addr_vote>.split(",")[1]
value =  num.lstrip().split(" ")[0]
except:
value = 'Error'
</pre>
После обработки необходимо руками поправить 3 записи.<br />
 
'''Для ufa-kalininsky'''<br />
street:
<pre>
value = <addr_vote>.split(",")[3]
</pre>
После обработки необходимо руками поправить 1 запись.<br />
house_num:
<pre>
try:
value = <addr_vote>.split(",")[4]
except:
value = "Error"
</pre>
После обработки необходимо руками поправить 2 записи.<br />
 
'''Для ufa-kirovsky'''<br />
Плохой файл. Много мусора.<br />
street:
<pre>
splited = <addr_vote>.split(u"ул. ")
if len(splited)==2:
addr = splited[1]
        addr = addr.replace(u"Ст. Кувыкина",u"Степана Кувыкина")
        addr = addr.replace(u"З Валиди",u"Заки Валиди")
        #addr = addr.replace(u"Заки Валиди", u'Фрунзе')#only for google!!!
        #addr = addr.replace(u"Мубарякова", u'Мубарекова')#only for google!!!
splited = addr.split(",")
if len(splited)==2:
value = splited[0]
else:
value = addr
else:
value = "Error"
</pre>
После обработки необходимо руками поправить 3 записи.<br />
house_num:
<pre>
splited = <addr_vote>.split(u"ул. ")
if len(splited)==2:
addr = splited[1]
splited = addr.split(",")
if len(splited)==2:
value = splited[1]
else:
value = addr
else:
value = "Error"
</pre>
После обработки необходимо руками поправить 3 записи.<br />
 
 
'''Для ufa-leninsky'''<br />
street:
<pre>
value =  <addr_vote>.split(',')[1].replace(u'ул.','').strip()
</pre>
После обработки необходимо руками поправить 1 запись.<br />
house_num:
<pre>
value =  <addr_vote>.split(',')[2].strip().split(' ')[0]
</pre>
Правок не требуется.<br />
 
'''Для ufa-oktyabrsky'''<br />
street:
<pre>
street = <addr_vote>.split(",")[1]
value = street.replace(u'ул.', '').strip()
</pre>
После обработки необходимо руками поправить 3 записи.<br />
house_num:
<pre>
try:
value =  <addr_vote>.split(',')[2].strip()
except:
value = 'Error'
</pre>
После обработки необходимо руками поправить 3 записи.<br />
'''Проблема с данными!''' УИК №№ 216 и 238 не имеют полного адреса в исходных данных. Адреса были найдены в интернете.
 
 
'''Для ufa-ordzho'''<br />
street:
<pre>
street = <addr_vote>.split(",")[1]
value = street.replace(u'ул.', '').strip()
</pre>
После обработки необходимо руками поправить 3 записи.<br />
house_num:
<pre>
try:
value =  <addr_vote>.split(',')[2].strip()
except:
value = 'Error'
</pre>
После обработки необходимо руками поправить 3 записи.<br />
 
 
'''Для ufa-sovetsky'''<br />
street:
<pre>
street = <addr_vote>.split(",")[2]
value = street.replace(u'ул.', '').strip()
</pre>
После обработки необходимо руками поправить 2 записи.<br />
house_num:
<pre>
try:
value =  <addr_vote>.split(',')[3].strip()
except:
value = 'Error'
</pre>
После обработки необходимо руками поправить 2 записи.<br />
'''Проблема с данными!''' УИК №№ 350, 366, 394 и 407 не имеют полного адреса в исходных данных. Адреса были найдены в интернете.<br />
 
 
'''Результат:''' [[Файл:Ufa-shp-address-corrected.zip]] - архив SHP файлов с корректными адресами
 


[[Категория:Уточнение расположения УИКов]]
[[Категория:Уточнение расположения УИКов]]

Текущая версия от 07:04, 17 августа 2013

Внимание: Эти данные устарели! Актуальные (2013 г.) данные по УИК собираются в проекте УИК ГЕО, присоединяйтесь, нам нужно ваше участие.

Схема работы

Смотри Проект УИК России
Смотри Типовой проект по местоположению УИКов

Уфа

Файл:Uik-ufa.zip — исходники по Уфе + черновой вариант shp файла.

Если берёте район, то впишите себя в таблицу, что бы никто больше не взялся за него.

Район Кто делает Прогресс Полученный SHP-файл
Демский yellow_sky 100% Файл:Ufa-demsky-geocoded.zip
Калининский yellow_sky 100% Файл:Ufa-kalininsky-geocoded.zip
Кировский yellow_sky 100% Файл:Ufa-kirovsky-geocoded.zip
Ленинский yellow_sky 100% Файл:Ufa-leninsky-geocoded.zip
Октябрьский yellow_sky 60%
Орджоникидзевский yellow_sky 60%
Советский yellow_sky 60%

Описание процесса

Как видно из приложенных pdf, все таблицы имеют четкую структуру:

No ИУ Адрес избирательного участка Телефон ИУ Описание избирательного участка

Нам пригодятся первые три поля. Назовем их number, addr_vote, phone. К сожалению, во всех районах города разная форма записи адреса. Попытаемся привести её к единой.

Конвертирование в CSV

Для начала необходимо конвертировать все таблицы из PDF в более пригодный для работы формат CSV. К сожалению, я не нашел ни одного нормального варианта такой конвертации (Может кто подскажет???).
Рабочей вариант: Windows 7, Acrobat Reader 9.5, LibreOffice Calc 3.4.2. В Reader'e выбираем все, копируем, и вставляем в Calc. (Вариант с Calc 3.4.5 и Acrobat Reader 9.47 под Linux почему то не работает)
Внимание: Необходимо удалить поле 'Описание избирательного участка', и переименовать первые три поля. Перед экспортом в CSV убедитесь, что у вас нет лишних полей, которые могут возникать при копировании таблицы из PDF. При экспорте лучше использовать кодировку UTF-8.
Результат: Файл:Ufa-csv.zip - готовые CSV файлы

Конвертирование в SHP

Конвертировать можно с помощью плагина RuGeocoder. Для этого необходимо запустить инструмент "CSV to SHP converter" и выбрать исходный csv файл. При желании можно указать месторасположение результирующего shp файла. В результате конвертации, будет получен точечный shp файл с той же самой атрибутикой, и нулевыми координатами. Так же к атрибутике будут добавлены пустые поля типа string: settlement, street, building_n и geocoded. Данные поля можно будет использовать в целях подготовки адреса для геокодера.

Обработка адреса

Обработку адреса удобно выполнить с помощью FieldPyculator.
Так как в каждом файле один район Уфы, то поле settlement можно не заполнять.
Для ufa-demsky
street:

street = <addr_vote>.split(",")[0]
value = street.replace(u'ул.', '').strip()

После обработки необходимо руками поправить 3 записи.
house_num:

try:
	num = <addr_vote>.split(",")[1]
	value =  num.lstrip().split(" ")[0]
except:
	value = 'Error'

После обработки необходимо руками поправить 3 записи.

Для ufa-kalininsky
street:

value = <addr_vote>.split(",")[3]

После обработки необходимо руками поправить 1 запись.
house_num:

try:
	value = <addr_vote>.split(",")[4]
except:
	value = "Error"

После обработки необходимо руками поправить 2 записи.

Для ufa-kirovsky
Плохой файл. Много мусора.
street:

splited = <addr_vote>.split(u"ул. ")
if len(splited)==2:
	addr = splited[1]
        addr = addr.replace(u"Ст. Кувыкина",u"Степана Кувыкина")
        addr = addr.replace(u"З Валиди",u"Заки Валиди")
        #addr = addr.replace(u"Заки Валиди", u'Фрунзе')#only for google!!!
        #addr = addr.replace(u"Мубарякова", u'Мубарекова')#only for google!!!
	splited = addr.split(",")
	if len(splited)==2:
		value = splited[0]
	else:
		value = addr
else:
	value = "Error"

После обработки необходимо руками поправить 3 записи.
house_num:

splited = <addr_vote>.split(u"ул. ")
if len(splited)==2:
	addr = splited[1]
	splited = addr.split(",")
	if len(splited)==2:
		value = splited[1]
	else:
		value = addr
else:
	value = "Error"

После обработки необходимо руками поправить 3 записи.


Для ufa-leninsky
street:

value =  <addr_vote>.split(',')[1].replace(u'ул.','').strip()

После обработки необходимо руками поправить 1 запись.
house_num:

value =  <addr_vote>.split(',')[2].strip().split(' ')[0]

Правок не требуется.

Для ufa-oktyabrsky
street:

street = <addr_vote>.split(",")[1]
value = street.replace(u'ул.', '').strip()

После обработки необходимо руками поправить 3 записи.
house_num:

try:
	value =  <addr_vote>.split(',')[2].strip()
except:
	value = 'Error'

После обработки необходимо руками поправить 3 записи.
Проблема с данными! УИК №№ 216 и 238 не имеют полного адреса в исходных данных. Адреса были найдены в интернете.


Для ufa-ordzho
street:

street = <addr_vote>.split(",")[1]
value = street.replace(u'ул.', '').strip()

После обработки необходимо руками поправить 3 записи.
house_num:

try:
	value =  <addr_vote>.split(',')[2].strip()
except:
	value = 'Error'

После обработки необходимо руками поправить 3 записи.


Для ufa-sovetsky
street:

street = <addr_vote>.split(",")[2]
value = street.replace(u'ул.', '').strip()

После обработки необходимо руками поправить 2 записи.
house_num:

try:
	value =  <addr_vote>.split(',')[3].strip()
except:
	value = 'Error'

После обработки необходимо руками поправить 2 записи.
Проблема с данными! УИК №№ 350, 366, 394 и 407 не имеют полного адреса в исходных данных. Адреса были найдены в интернете.


Результат: Файл:Ufa-shp-address-corrected.zip - архив SHP файлов с корректными адресами