Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: VladSun в Nov 03, 2009, 15:25



Титла: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: VladSun в Nov 03, 2009, 15:25
В помощ на всеки, на който му трябва списък на населените места по области и общини. :)

От http://www.nsi.bg/EKATTE/Ekatte.htm съм конвертирал към почти нормализирана база данни.
Прилагам SQL dump-a на три таблици в UTF-8.
Поради ограниченията на форума файлът е прикачен като .ZIP, НО НЕ Е ZIP, а tar.gz ...

5298 населени места, 264 общини, 28 области
type = {
1 - град
2 - село
3 - манастир(!)
}


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: Naka в Nov 04, 2009, 01:39
Браво и аз имам такава mysql база. Правих я от ГРАО http://www.grao.bg/tna/tab02.txt  http://www.grao.bg/tables.html с данни от 2007. Само че в мойта фигурират общо 5150 населени места: градове + села + манастири.

Къде е истината. къде се губят 150 селища? или е имало неточности през 2007. или е имало деление на селища и възникване на нови. или пък има селища фантоми. ;D

И кое трябва да се взима за по-авторитетен източник ГРАО или ЕКАТТЕ?


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: VladSun в Nov 04, 2009, 01:50
Нямам идея  ;D


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: Naka в Nov 04, 2009, 02:12
Ако имам време ще се поровя да видя на какво се дължат разликите. Хубаво е тази тема да се направи sticky, щото е много полезна.


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: VladSun в Nov 04, 2009, 12:19
Редактирал съм списъка от населени места в оригиналната база на ЕКАТТЕ, защото има населени места, които се различават единствено по ЕКАТТЕ номера си - име, област, община и тип са еднакви.
Дублираните записи са:
Код:
ekatte, tvm, name, oblast, obshtina
'14461', 'с.', 'Бов', 'SFO', 'SFO43'
'04546', 'с.', 'Бов', 'SFO', 'SFO43'
'12629', 'с.', 'Вълчовци', 'VTR', 'VTR13'
'12615', 'с.', 'Вълчовци', 'VTR', 'VTR13'
'43092', 'с.', 'Лакатник', 'SFO', 'SFO43'
'14475', 'с.', 'Лакатник', 'SFO', 'SFO43'
'53758', 'с.', 'Орешец', 'VID', 'VID16'
'14489', 'с.', 'Орешец', 'VID', 'VID16'


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: VladSun в Nov 04, 2009, 23:50
Сега, ако някой каже и откъде да извадя пощенските кодове за тази база - златен е! :)


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: Naka в Nov 05, 2009, 01:21
http://www.geonames.org/
Тези имат информация за всички населени места в света.
От там исках да допълвам базата със географска ширина и дължина, ама не ми стигна времето и нервите.

проблемът им е че нямат точно съотвествие на 'официалното' /каноничното име в бг. Например някакво село: от bg.zip изглежда така:
728355   Pechinska   Pechinska   4912,Pechinska,Petschinska,Печинска   41.4666667   24.9666667   P   PPL   BG   BG   57   SML16   SML16-19

Но 4-та колонка съсдържа 'Алтернативни имена' и там има  и кирилското изписване на името и ако трябва да се прави съотвествие трябва да се търси там. Но пък ако с такова име няколко села в бг, трябва да им се направи съотвествие и по териториялното деление, за да се определи дали точно това е населенето място.

Става много сложно и без някой по-интелигентен скрипт нама да мине :'(.

http://download.geonames.org/export/dump/
bg.zip e дъмп само за България от целят им архив llCountries.zip

'Алтернативни имена' ги има също и в отделна таблица alternateNames.zip
от там също може да се вземе пощенският код

например: ако в третата колонка има 'post' то в четвъртата е пощенският код
436680   728355      Petschinska   
2083895   728355   bg   Печинска   
2179503   728355   post   4912   

Не съм сигурен и за лиценза. пише че е CC, базата е свободна, но това означава ли че може части от нея да се използват в друга база.


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: VladSun в Nov 05, 2009, 19:53
Струва ми се, че в bg.zip има ЕКАТТЕ кодовете, така че може би ще стане по-лесно отколкото изглежда :) Макар, че не съм сигурен, че за всички населени места има пощенски кодове.

Ще се пробвам да направя една пълна база всички налични данни (дори и ненормализираните).


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: Naka в Nov 05, 2009, 20:52
Струва ми се, че в bg.zip има ЕКАТТЕ кодовете.
Не разбирам, би ли пояснил с някой пример.


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: VladSun в Nov 05, 2009, 22:48
Цитат
6461039   Gorna krepost   Gorna krepost   Gorna krepost,Горна крепост   41.725   25.475   A   ADM3   BG      44   KRZ16   KRZ16-08      0332   Europe/Sofia   2007-04-23
Това KRZ16 съответства точно на ЕКАТТЕ кода за общината:
Код
GeSHi (SQL):
  1. SELECT * FROM ekatte WHERE name = "Горна крепост"
=>
Цитат
'ekatte', 'tcm', 'name', 'oblast', 'obshtina'
'16267', 'с.', 'Горна крепост', 'KRZ', 'KRZ16'


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: Naka в Nov 07, 2009, 17:38
Хубаво е да има флаг в таблицата който да показва официален статут на селище в бг. Например нещо подобно 0- ЕКАТТЕ 1-грао 3-друго ..
Защото в geonames има много повече данни от град/село/манстир, които не са за изхвърляне. Там има названия на географски местности, върхове и разни други. Може даже да има названия на селища,куротрти които според бг официално да се водат към друго селище или под друго име.

Относно разликите между ЕКАТТЕ и грао възможно е да има много официлано заличени селища. Такова  заличаване може да продължи и за в бъдеще. Ако например някое село бъде заличено, то трябва само да му се смени флага на неофициален статут. А пък името му и къде се е намирало може да си стои.

Географската ширина/дължина също са много важни данни защото може да се определи местоположенито на селището по bitmap карта. Може също да се пресмята и разтоянито по права линия между две селища.


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: VladSun в Jan 15, 2010, 14:39
Нова база попълнена с EKATTE кодовете (цифровите и буквено-цифровите), геогр. ширина и дължина с точност до 7-мия знак след запетаята, както и пощенските кодове.

Тъй като съм почти сигурен, че има грешки, се надявам хората тук да помогнат с необходимите корекции :)

Прикаченият файл е необходимо да се преименува към .gz разширение (.т.е. да отпадне .zip разширението)

PS: Изчаквам администраторите да ми разрешат качване на файлове > 128К :)


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: Naka в Jan 15, 2010, 17:57
Как успя да филтрираш информацията от geonames.org? През EKATTE кодовете ли?

За всеки EKATTE код ли има съответствен запис в geonames?


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: VladSun в Jan 15, 2010, 18:06
Пуснах няколко бота да дърпат инфо :)

geonames се отказах да го ползвам.

Използвах google maps и още един сайт с пощенски кодове.


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: VladSun в Jan 16, 2010, 17:30
Ето го и файлът (gzip формат):


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: nikolayivanovbg в Oct 12, 2011, 16:12
Похвален труд!

Само една молба, ако може.
Засяга самият .sql файл в архива - ако може "multi-insert"-a да е разделен на много редове, имам предвид всеки запис да е на отделен ред:
(..,..,..),
(..,..,..),
(..,..,..);

Пробвам вече 10 различни неща в UBUNTU-то и нито едно не успява да отвори файл с толкова дълги редове.
Всички умират  :(

Исках просто да погледна файла и имената на таблиците, например, преди да пусна заявката да вмъкне всичко в базата данни.
Исках да вмъквам в съществуваща база и не ми се правеше нова.


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: b2l в Oct 12, 2011, 16:14
vim?


Титла: Re: Области, общини, нас. места, ЕКАТТЕ
Публикувано от: VladSun в Oct 12, 2011, 17:38
Код
GeSHi (SQL):
  1. CREATE TABLE `country` (
  2.  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3.  `name` char(25) NOT NULL,
  4.  PRIMARY KEY (`id`),
  5.  UNIQUE KEY `UQ_record` (`name`) USING BTREE
  6. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
  7.  
  8. CREATE TABLE `province` (
  9.  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  10.  `country_id` int(10) UNSIGNED DEFAULT NULL,
  11.  `name` char(25) NOT NULL,
  12.  `EKATTE` char(3) NOT NULL,
  13.  `EKATTE_code` char(5) NOT NULL,
  14.  PRIMARY KEY (`id`),
  15.  UNIQUE KEY `UQ_record` (`country_id`,`name`) USING BTREE
  16. ) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8
  17.  
  18. CREATE TABLE `municipality` (
  19.  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  20.  `province_id` int(10) UNSIGNED DEFAULT NULL,
  21.  `name` char(25) NOT NULL,
  22.  `EKATTE` char(5) NOT NULL,
  23.  `EKATTE_code` char(5) NOT NULL,
  24.  PRIMARY KEY (`id`),
  25.  UNIQUE KEY `UQ_record` (`province_id`,`name`) USING BTREE
  26. ) ENGINE=InnoDB AUTO_INCREMENT=265 DEFAULT CHARSET=utf8
  27.  
  28. CREATE TABLE `city` (
  29.  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  30.  `municipality_id` int(10) UNSIGNED DEFAULT NULL,
  31.  `name` char(25) NOT NULL,
  32.  `type` char(4) NOT NULL,
  33.  `zip` char(4) DEFAULT NULL,
  34.  `atitude` smallint(5) UNSIGNED NOT NULL,
  35.  `latitude` float(10,7) DEFAULT NULL,
  36.  `longitude` float(10,7) DEFAULT NULL,
  37.  `population` bigint(20) UNSIGNED DEFAULT NULL,
  38.  `EKATTE` char(8) NOT NULL,
  39.  `EKATTE_code` char(5) NOT NULL,
  40.  PRIMARY KEY (`id`),
  41.  UNIQUE KEY `UQ_record` (`municipality_id`,`name`,`type`) USING BTREE,
  42.  KEY `IX_EKATTE` (`EKATTE`),
  43.  KEY `IX_zip` (`zip`),
  44.  KEY `IX_name` (`name`),
  45.  CONSTRAINT `FK_municipality_id` FOREIGN KEY (`municipality_id`) REFERENCES `municipality` (`id`)
  46. ) ENGINE=InnoDB AUTO_INCREMENT=5303 DEFAULT CHARSET=utf8
  47.  
  48.  

Хм ... сега видях, че не съм създал foreign-keys constraint-ите за всички таблици :)

PS: Явно това е по-стара версия (като гледам съм я ползвал за експорт) - има разни тъпизми от сорта на "type varchar(4)" :) а то си е smallint