{"id":2982,"date":"2016-06-22T12:54:27","date_gmt":"2016-06-22T10:54:27","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=2982"},"modified":"2023-08-21T15:48:22","modified_gmt":"2023-08-21T13:48:22","slug":"mapowanie-danych-adresowych","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/mapowanie-danych-adresowych\/","title":{"rendered":"Mapowanie danych adresowych"},"content":{"rendered":"\n<p>W ci\u0105gu ostatnich kilkunastu lat, szczeg\u00f3lnie za spraw\u0105 rozpowszechnienia technologii mobilnych, systemy informacji przestrzennej na sta\u0142e zadomowi\u0142y si\u0119 w naszym \u017cyciu. Nikt nie pami\u0119ta ju\u017c czas\u00f3w, kiedy wchodz\u0105c na stron\u0119 ulubionej restauracji jedyne, co mogli\u015bmy zrobi\u0107, to przeczyta\u0107 jej adres. Teraz nie do\u015b\u0107, \u017ce widzimy jej lokalizacj\u0119 na mapie, to jeszcze cz\u0119sto mo\u017cemy skorzysta\u0107 z Google Street View i zobaczy\u0107 jak wygl\u0105da okolica albo poprosi\u0107 o wskaz\u00f3wki dojazdu. B\u0119d\u0105c ju\u017c na miejscu, za pomoc\u0105 odpowiednich aplikacji mo\u017cemy zobaczy\u0107 kt\u00f3rzy nasi znajomi tu bywaj\u0105, kt\u00f3rzy z nich s\u0105 blisko i ewentualnie, czy mogliby do nas do\u0142\u0105czy\u0107, a je\u015bli przypadkiem zdarzy si\u0119, \u017ce nie ma dla nas stolika to szybko mo\u017cemy zobaczy\u0107 jakie miejsca znajduj\u0105 si\u0119 w pobli\u017cu.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"has-text-align-left\">Prezentowanie danych na mapie sta\u0142o si\u0119 standardem, dlatego bardzo wa\u017cne jest posiadanie poprawnych danych adresowych klient\u00f3w b\u0105d\u017a ich us\u0142ug. Maj\u0105c poprawne, zunifikowane adresy, jedyne co wystarczy zrobi\u0107, to przypisa\u0107 im wsp\u00f3\u0142rz\u0119dne geograficzne \u2013 ten proces w geodezji nazywany jest geokodowaniem. Jedyne co jest wtedy potrzebne,\u00a0to referencyjna baza adresowa ze wsp\u00f3\u0142rz\u0119dnymi.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/06\/1.jpg\"><img decoding=\"async\" width=\"300\" height=\"255\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/06\/1-300x255.jpg\" alt=\"mapowanie danych - custom development - lokalizacje \" class=\"wp-image-2983\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/06\/1-300x255.jpg 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/06\/1.jpg 790w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p> Problemy pojawiaj\u0105 si\u0119 jednak, je\u015bli nasze adresy nie s\u0105 wyczyszczone. Je\u015bli pochodz\u0105 z wielu\u00a0 r\u00f3\u017cnych system\u00f3w, czasem s\u0105 w bazie danych w jednym polu jako\u00a0 d\u0142ugi ci\u0105g tekstu,\u00a0 czasem rozdzielone pomi\u0119dzy kilka p\u00f3l, ale nie poddane walidacji, zatem istnieje ryzyko, \u017ce pojawiaj\u0105 si\u0119 tam liter\u00f3wki, albo \u017ce osoba wpisuj\u0105ca te dane napisze \u201elokal\u201d, a innym razem\u00a0u\u017cyje skr\u00f3tu \u201elok.\u201d. Wtedy najwa\u017cniejszym (i najbardziej czasoch\u0142onnym) elementem jest standaryzacja adres\u00f3w. W przypadku naszego ostatniego projektu by\u0142o to dopisanie do nazw miast i ulic identyfikator\u00f3w TERYT \u2013 ka\u017cde miasto\u00a0 w Polsce, jak i ka\u017cda ulica, maj\u0105 przypisany unikalny identyfikator. Maj\u0105c te identyfikatory i numer domu, w \u0142atwy spos\u00f3b mo\u017cemy przypisa\u0107 wsp\u00f3\u0142rz\u0119dne. Oczywi\u015bcie s\u0105 przypadki trywialne, kiedy mamy nazw\u0119 miasta i nazw\u0119 ulicy, kt\u00f3re pasuj\u0105 do naszej bazy referencyjnej. Co jednak, je\u015bli nie pasuj\u0105?<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>W ramach przygotowania danych zmienili\u015bmy wszystkie litery na wielkie, usun\u0119li\u015bmy zb\u0119dne spacje, a nast\u0119pnie zamienili\u015bmy s\u0142owa typu <em>ulica, aleje, plac<\/em> na odpowiadaj\u0105ce im skr\u00f3ty. Szcz\u0119\u015bliwie w danych z system\u00f3w, gdzie adres by\u0142 zapisany jako jeden ci\u0105g tekstu, wyst\u0119powa\u0142a pewna&nbsp;konwencja \u2013&nbsp;\u017ce miasto jest zawsze na pocz\u0105tku albo na ko\u0144cu, to u\u0142atwi\u0142o troch\u0119 zadanie rozdzielenia tekstu na odpowiednie pola.<\/li>\n<\/ul>\n\n\n\n<p>Maj\u0105c ju\u017c nazwy miast, ulic oraz numery dom\u00f3w i lokali w osobnych polach, por\u00f3wnywali\u015bmy je z adresami w bazie referencyjnej. Po przypisaniu identyfikator\u00f3w TERYT oczywistym przypadkom, stosowali\u015bmy nast\u0119puj\u0105ce algorytmy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Je\u015bli para miasto+ulica by\u0142a znajdowana w bazie referencyjnej, ale wi\u0119cej ni\u017c raz, to sprawdzali\u015bmy, dla kt\u00f3rego miasta na tej ulicy jest najwi\u0119cej budynk\u00f3w, w my\u015bl zasady, \u017ce adresy us\u0142ug, kt\u00f3re mapowali\u015bmy, wyst\u0119puj\u0105 z wi\u0119kszym prawdopodobie\u0144stwem w wi\u0119kszych miastach.<\/li>\n\n\n\n<li>Je\u015bli zgadza\u0142a si\u0119 nazwa miasta, ale ulicy nie, to dzielili\u015bmy ulic\u0119 na cz\u0142ony i sprawdzali\u015bmy r\u00f3\u017cne kombinacje tych cz\u0142on\u00f3w. Przyk\u0142adowo Al. Papie\u017ca Jana Paw\u0142a II da si\u0119 znale\u017a\u0107 po usuni\u0119ciu cz\u0142onu \u201ePapie\u017ca\u201d, a S\u0142owackiego Juliusza wyst\u0119puje w bazie jako Juliusza S\u0142owackiego.<\/li>\n\n\n\n<li>Zdarza\u0142o si\u0119, \u017ce usuwali\u015bmy skr\u00f3ty, ale w danych wej\u015bciowych dostawali\u015bmy nazw\u0119 ulicy \u201eul. Ul.S\u0142owackiego\u201d, tak\u017ce wychodzi\u0142a z tego \u201eUl.S\u0142owackiego\u201d. Mogliby\u015bmy usun\u0105\u0107 skr\u00f3ty po raz drugi, jednak czasem w danych nie by\u0142o kropki mi\u0119dzy skr\u00f3tem a nazw\u0105 ulicy. \u017beby wychwyci\u0107 te przypadki por\u00f3wnywali\u015bmy nazw\u0119 ulicy z bazy referencyjnej z podci\u0105giem nazwy ulicy zaczynaj\u0105cym si\u0119 od 3 i 4 litery.<\/li>\n\n\n\n<li>Nast\u0119pnie patrzyli\u015bmy na liter\u00f3wki, je\u015bli nazwa miasta si\u0119 zgadza, a ulica zgadza\u0142aby si\u0119, je\u015bli by zamieni\u0107 lub usun\u0105\u0107 jedn\u0105 liter\u0119, tj. \u201eul. Komisji Edykacji Narodowej\u201d.<\/li>\n\n\n\n<li>S\u0105 wsie, kt\u00f3re nie maj\u0105 nazw ulic, wtedy ludzie zwykle wpisuj\u0105 nazw\u0119 powiatu\/gminy zamiast nazwy miasta oraz nazw\u0119 wsi jako nazw\u0119 ulicy. Z takimi przypadkami poradzili\u015bmy sobie bez problemu maj\u0105c s\u0142ownik powiat\u00f3w, czasem by\u0142y te\u017c pomocne kody pocztowe, kt\u00f3re mia\u0142y u nas jednak ni\u017cszy priorytet, bo ludzie wyj\u0105tkowo cz\u0119sto robi\u0105 w nich b\u0142\u0119dy.<\/li>\n\n\n\n<li>Wszystkie powy\u017csze przypadki dotyczy\u0142y kombinacji miasta i ulicy, gdzie nazwa miasta zgadza\u0142a si\u0119. Na koniec dla niedopasowanych przypadk\u00f3w szukali\u015bmy osobno miast i osobno ulic tymi samymi metodami, tzn. sprawdzali\u015bmy liter\u00f3wki, podci\u0105gi itp. Baza TERYT jest jednak skonstruowana w ten spos\u00f3b, \u017ce pozornie takie same ulice mog\u0105 mie\u0107 r\u00f3\u017cne identyfikatory w r\u00f3\u017cnych miastach. Przyk\u0142adowo w Skierniewicach jest ulica Juliusza S\u0142owackiego, podczas gdy w Siedlcach jest jedynie ulica S\u0142owackiego i obie maj\u0105 r\u00f3\u017cne identyfikatory. Wobec tego na koniec procesu trzeba przeprowadzi\u0107 weryfikacj\u0119, czy wszystkie pary identyfikator\u00f3w mamy w bazie referencyjnej. Je\u015bli nie, to szukamy par, gdzie nazwa ulicy jest taka sama, ale identyfikatory s\u0105 poprawne.<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-2 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/06\/22.png\"><img decoding=\"async\" width=\"300\" height=\"212\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/06\/22-300x212.png\" alt=\"mapowanie_software development_adresy\" class=\"wp-image-2984\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/06\/22-300x212.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/06\/22.png 673w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Stosuj\u0105c powy\u017csze algorytmy udaje nam si\u0119 przypisywa\u0107 ok. 95% poprawnych identyfikator\u00f3w, ale przede wszystkim w \u0142atwy spos\u00f3b jeste\u015bmy w stanie ustandaryzowa\u0107 adres niezale\u017cnie od jego formatu, a dzi\u0119ki\u00a0 dopisaniu wsp\u00f3\u0142rz\u0119dnych do danych o us\u0142ugach, mo\u017cemy przygotowywa\u0107 raporty, kt\u00f3re prezentuj\u0105\u00a0 si\u0119 znacznie lepiej ni\u017c same tabelki&#8230;<\/p>\n<\/div>\n<\/div>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;2982&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;1&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5 ( vote: 1)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;Mapowanie danych adresowych&quot;,&quot;width&quot;:&quot;139.5&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 139.5px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            5\/5 ( vote: 1)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>W ci\u0105gu ostatnich kilkunastu lat, szczeg\u00f3lnie za spraw\u0105 rozpowszechnienia technologii mobilnych, systemy informacji przestrzennej na sta\u0142e zadomowi\u0142y si\u0119 w naszym &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/mapowanie-danych-adresowych\/\">Continued<\/a><\/p>\n","protected":false},"author":106,"featured_media":15194,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[287,390],"class_list":["post-2982","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-software-development","tag-systemy-informacji-przestrzennej"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2016\/06\/BlogersiiCovery-Mapowanie.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/2982"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/106"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=2982"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/2982\/revisions"}],"predecessor-version":[{"id":23726,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/2982\/revisions\/23726"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/15194"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=2982"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=2982"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=2982"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}