Papildinām bankomātus – SEB

seb_atm_genericNesen izpētījām, kā kartē var pievienot bakomātu, izmantojot jauno redaktoru iD. Jo pilnīgāka bankomātu informācija, jo labāk. Tātad jāmēģina sistemātiski panākt visu esošo bankomātu iezīmēšanu kartē 🙂

Sāksim ar kādu banku, kuras bankomātu koordinātas mums ir pieejamas – SEB. Vairāku iemeslu dēļ šos datus nav vēlams tikai importēt, tādēļ izmantosim tos kā informatīvu slāni un pārbaudīsim visu informāciju “dabā”.

Pieejamie dati

SEB bankomātu dati pieejami XML formātā. Sākotnējais fails ir bez formatējuma, līdz ar to nav ērti pārskatāms. Lai saprastu, kas tad mums īsti ir pieejams, nedaudz uzlabosim formatējumu:


$ xmllint --format seb-ATM.xml

 

<?xml version="1.0" encoding="utf-8"?>
  <data>
    <atm>
      <terminalid>ATM08920</terminalid>
      <location>SEB banka</location>
      <street>Vaļņu iela 11</street>
      <city>Rīga</city>
      <worktime>00-00</worktime>
      <lat>56.949944</lat>
      <lon>24.110833</lon>
      <type>1</type>
      <atmtype>CashOut ATM</atmtype>
    </atm>
...
    <atm>
      <terminalid>ATM18430</terminalid>
      <location>Veikals "Rimi"</location>
      <street>Dundagas iela 18</street>
      <city>Talsi</city>
      <worktime>08-00</worktime>
      <lat>57.247889</lat>
      <lon>22.578556</lon>
      <type>1</type>
      <atmtype>CashOut ATM</atmtype>
    </atm>
...
    <atm>
      <terminalid>ATM72350</terminalid>
      <location>SEB banka</location>
      <street>Zvaigžņu iela 2</street>
      <city>Aizpute</city>
      <worktime>06-23</worktime>
      <lat>56.718612</lat>
      <lon>24.164623</lon>
      <type>7</type>
      <atmtype>CashIn/Out ATM</atmtype>
    </atm>
  </data>

Blokā <data> ir daudz bloku <atm>, un katrs no tiem satur informāciju par vienu bankomātu. Par katru bankomātu ir pieejamas 9 vērtības. Tās ir:

  • terminalid – bankomāta identifikators, kurš arī parādās čekos, ja tiek izņemta nauda. Ja piektdien bijāt Vecrīgā un neatceraties, no kura bankomāta izņēmāt naudu, pēc šī identifikatora to var noskaidrot… Līdz ar to šo vērtību saglabāsim un izmantosim ref tagā.
  • location – atrašanās vieta, kas var būt veikals, banka u.t.t. Derīga informācija, kura gan jāpārbauda – varbūt kāds veikals vai cits objekts nav iezīmēts kartē, un to pie reizes kopā ar bankomātu var iezīmēt. Ievietosim šo informāciju name tagā, lai kartētāji var to pārbaudīt.
  • street – adrese (iela un numurs). Atkal derīga informācija, to vajag pārbaudīt un pārliecināties, ka kartē šī adrese ir pareizi iezīmēta. Arī šo ievietosim name tagā.
  • city – pilsēta. Tā kā mums ir bankomātu koordinātas, šī informācija nešķiet īpaši noderīga un mēs to neiekļausim gala datos.
  • worktime – darba laiks. Visticamāk, attiecas uz veikalu, banku vai citu iestādi, kurā bankomāts izvietots. Ļoti derīga informācija, kura jāpievieno arī pašam bankomātam. Mēs to ieliksim opening_hours tagā, bet šo informāciju ir ne tikai jāpārbauda, bet arī jāpārveido OpenStreetMap formātā – par to nedaudz vēlāk.
  • lat – ģeogrāfiskais platums, ļoti derīga informācija – liksim lat tagā.
  • lon – ģeogrāfiskais garums, tieši tāpat kā ar iepriekšējo – liksim lon tagā.
  • type – tips, kaut kāds skaitlis. Failā pieejami divu veidu tipi – 1 un 7. Kas tie, nez?
  • atmtype – nu jau kļūst skaidrāks, kas tas par tipu bija. Visiem bankomātiem, kam tips ir 1, atmtype ir CashOut ATM – tādad, izmaksas automāts. Visiem bankomātiem, kam tips ir 7, atmtype ir CashIn/Out ATM – tādad, papildus arī iemaksas automāts. Izmantosim ciparisko tipu. Ja tas būs 1, pieliksim tagu cash_in=no, ja 7 – cash_in=yes.

Starp citu, datos tika pamanīta arī kāda kļūda – viena Daugavpils bankomāta koordinātās punkts pazudis:

<atm>
  <terminalid>ATM91870</terminalid>
  <location>T/C "Dittona nams"</location>
  <street>Cietokšņa iela 60</street>
  <city>Daugavpils</city>
  <worktime>00-00</worktime>
  <lat>55873056</lat>
  <lon>26518611</lon>
  <type>7</type>
  <atmtype>CashIn/Out ATM</atmtype>
</atm>

Šo kļūdu ir vienkārši izlabot, ko mēs arī izdarām pirms datu konvertācijas.

Datu konvertācija

Tagad datus vajadzētu pārveidot tādā formātā, lai tos būtu viegli salīdzināt ar esošajiem iezīmētajiem bankomātiem. Konvertēsim šo XML uz GPX, kuru iespējams gan izmantot kā slāni JOSM, gan ielādēt GPS iekārtās, lai bankomātus pārbaudītu dabā. Tā kā GPX arī ir XML, izmantosim xsltproc. Lai pārveidotu datus, būs nepieciešams stylesheet (kā tas būtu latviski? 🙂 ).

<?xml version="1.0" encoding="ISO-8859-1"?>
  <xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" encoding='UTF-8'/>
  <xsl:template match="/">
  <osm version='0.6' upload='true' generator='JOSM'>
  <xsl:for-each select="data/atm">
    <node id='{format-number(-1-count(preceding::atm),0)}'
 action='modify' visible='true' lat='{lat}' lon='{lon}'>
    <tag k='amenity' v='atm' />
    <tag k='name' v='{location}, {street}' />
    <tag k='opening_hours' v='{worktime}' />
    <tag k='operator' v='SEB' />
    <tag k='ref' v='{terminalid}' />
    <xsl:choose>
      <xsl:when test="type = 1">
        <tag k='cash_in' v='no' />
      </xsl:when>
      <xsl:when test="type = 7">
        <tag k='cash_in' v='yes' />
      </xsl:when>
    </xsl:choose>
    </node>
  </xsl:for-each>
  </osm>
  </xsl:template>
  </xsl:stylesheet>

Dažas piezīmes:

  • 4. rindiņā tiek norādīts, ka rezultātam jābūt XML UTF-8 kodējumā.
  • 6. rindiņā ir XML saturs, kurš pa tiešo tiks ievietots rezultāta failā – OSM XML formātā.
  • 7. rindiņā uzsākam ciklu par katru <atm> elementu, kas atrodas iekš <data> elementa – gala failā mēs gribam datus par visiem bankomātiem.
  • 8. rindiņā mēs skaitām atrastos <atm> elementus un, skaitam priekšā pieliekot mīnusa zīmi, izmantojam kā elementa identifikatoru. Tas nepieciešams, jo negatīvi identifikatori JOSM redaktorā apzīmē jaunus elementus un nekonfliktē ar esošajiem elementiem. Šāda pieeja nodrošina unikālus negatīvus identifikatorus.
  • 9. rindiņā mēs izmantojam lat un lon vērtības, ievietojot tās tāda paša nosaukuma tagos.
  • No 10. līdz 14. rindiņai dati tiek ievietoti OSM tagos. 11. rindiņā mēs name tagā ievietojam uzreiz divas vērtības.
  • No 15. līdz 22. rindiņai, atkarībā no type vērtības, ieliekam informāciju par iemaksu iespēju šim bankomātam.

Tagad mums ir gan oriģinālais fails, gan stylesheet – varam konvertēt.


$ xsltproc atm-transform-osm.xslt seb-ATM-mod.xml > seb-atm.osm

Rezultātā mums ir OSM XML fails ar visiem bankomātiem no izejas faila.

<?xml version="1.0" encoding="UTF-8"?>
  <osm version="0.6" upload="true" generator="JOSM">
    <node id="-1" action="modify" visible="true" lat="56.949944" lon="24.110833">
      <tag k="amenity" v="atm"/>
      <tag k="name" v="SEB banka, Vaļņu iela 11"/>
      <tag k="opening_hours" v="00-00"/>
      <tag k="operator" v="SEB"/>
      <tag k="ref" v="ATM08920"/>
      <tag k="cash_in" v="no"/>
    </node>
...
    <node id="-241" action="modify" visible="true" lat="56.718612" lon="24.164623">
      <tag k="amenity" v="atm"/>
      <tag k="name" v="SEB banka, Zvaigžņu iela 2"/>
      <tag k="opening_hours" v="06-23"/>
      <tag k="operator" v="SEB"/>
      <tag k="ref" v="ATM72350"/>
      <tag k="cash_in" v="yes"/>
    </node>
  </osm>

Šādu failu varam izmantot daudz un dažādos veidos – piemēram, atvērt OSM redaktoros, vai ielādēt GPS iekārtās. Salīdzināsim šos datus ar OSM jau esošajiem SEB bankomātiem.

Sameklējam jau iezīmētos bankomātus

Lai salīdzinātu ar jau iezīmētajiem bankomātiem, mums sākumā jādabū šie bankomāti. Izmantosim OpenStreetMap Overpass API. Zemāk esošā ir viena komandrinda, kas sadalīta ērtākai aplūkošanai.

$ curl -d 'node["amenity"="atm"]["operator"~"^S[|]*E[|]*B"]
 (poly:"57.932 24.318 58.168 25.172 57.873 26.076
 57.598 26.474 57.654 26.912 57.549 27.563
 57.324 27.927 56.243 28.312 55.772 27.653
 55.634 26.647 55.727 26.246 56.106 25.598
 56.155 25.071 56.405 24.881 56.198 24.472
 56.362 22.055 55.868 20.63  57.53  20.49
 57.874 22.703 57.332 23.566");
 out meta;' http://overpass-api.de/api/interpreter
 > existing-seb-atms-lv.osm

Mēs pieprasām visus punktus, kam operator tags sākas ar SEB (vai S|E|B, jo arī šāda, nepareiza forma, ir manīta OpenStreetMap datos). Pieprasījumu ierobežojam ar reģionu, kas ļoti aptuveni iet apkārt Latvijas robežai – varbūt arī paķerot līdzi kādu kaimiņu bankomātu. Iespējams, kaut kad vēlāk aplūkosim Overpass API detalizētāk 🙂

Pēc kāda brīža varam aplūkot esošo bankomātu sarakstu:

<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" generator="Overpass API">
  <note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>
  <meta osm_base="2013-06-03T13:25:04Z"/>

  <node id="420039056" lat="56.8308219" lon="24.2341697" version="3" timestamp="2012-03-02T20:00:53Z" changeset="10851820" uid="482836" user="andisimo">
    <tag k="amenity" v="atm"/>
    <tag k="operator" v="SEB"/>
  </node>
  <node id="429992090" lat="57.5100802" lon="22.3516171" version="8" timestamp="2013-03-12T08:59:32Z" changeset="15336244" uid="290680" user="wheelmap_visitor">
    <tag k="amenity" v="atm"/>
    <tag k="bic" v="UNLALV2X"/>
    <tag k="operator" v="SEB banka"/>
    <tag k="wheelchair" v="limited"/>
  </node>
...
  <node id="1419918942" lat="56.8158941" lon="24.5999187" version="1" timestamp="2011-09-01T09:25:57Z" changeset="9182851" uid="11321" user="Pecisk">
    <tag k="amenity" v="atm"/>
    <tag k="operator" v="SEB Unibanka"/>
  </node>
...
  <node id="2319770703" lat="57.8973620" lon="25.3245235" version="1" timestamp="2013-05-25T16:49:02Z" changeset="16281809" uid="153437" user="kanne">
    <tag k="amenity" v="atm"/>
    <tag k="operator" v="SEB"/>
  </node>
</osm>

Un jau redzams, ka ir izmantoti vismaz 3 dažādi bankas nosaukumi – SEB, SEB banka un SEB Unibanka. Meklējot tikai pēc SEB mēs vairākus bankomātus neatrastu.

Salīdzinām esošos ar SEB datiem

Nu ko, tagad mums ir divi OpenStreetMap XML faili – viens ar jau kartē iezīmētajiem bankomātiem, viens ar “oficiālajiem” datiem. Kā ļoti vienkāršu salīdzināšanas metodi atvērsim abus failus JOSM.

both_seb_atms_normal_view

Iezīmētie bankomāti šeit redzami baltā/zilganā krāsā, “oficiālie” – pelēkā krāsā (neaktīvs JOSM slānis). Lai gan jau var novērot Latvijas kontūru, ikonu izmērs kopā ar tekstu pamatīgi pārklājas un ir grūti saprast kopainu. Ieslēgsim JOSM Wireframe view.

wireframe_view

Tagad rezultāts ir nedaudz pārskatāmāks:

seb_atms_wireframe

Joprojām ir manāma Latvijas kontūra, un diezgan labi var redzēt iezīmēto bankomātu koncentrāciju Rīgā 🙂

Nedaudz aizdomīgs šķiet baltais punkts (iezīmēts bankomāts) apakšējā kreisajā stūrī – papētot tālāk izrādās, ka tas patiesībā ir Lietuvā, Šventoje. Tas tāds sīkums, varam manuāli šo objektu izdzēst, lai netraucē.

Kā redzams, SEB bankomāti ir sazīmēti, bet daudzi arī trūkst – jo īpaši ārpus lielajām pilsētām. Tomēr mēs šos “oficiālos” datus pa tiešo neliksim OpenStreetMap. Kāpēc?

Kādēļ nav vēlams importēt?

Pirmkārt, šie dati jau pārklājas esošajiem bankomātiem. Šajā situācijā jāaplūko katrs bankomāts un jāizlemj, kā rīkoties. Ja bankomāts nav iezīmēts, tad vienkārši – iezīmējam (lai gan tur arī jāuzmanās – par to pēc brīža). Ja bankomāts ir iezīmēts, tad, iespējams, trūkst kādi dati – noteikti trūkst terminalid/ref informācija, cash_in informācija u.t.t.

Bet reizēm būs dīvainākas situācijas – bankomāts var būt iezīmēts bez apkalpojošās bankas vārda. Rīgā, Gaiļezera slimnīcā laikam ir šāda situācija:

atm_gailjezeraa

Pelēkais punkts – “oficiālais” bankomāts. Sarkanais – iezīmētais, bez bankas apzīmējuma. Jāņem vērā, ka iezīmētais bankomāts neparādās ne “esošajos”, ne “oficiālajos” datos – esošos mēs filtrējām pēc “SEB”. Pārējie bankomāti tiešā tuvumā jālejuplādē manuāli (JOSM standarta “download” funkcionalitāte).

Protams, arī šajā situācijā jāpārbauda personīgi “dabā” – varbūt tur ir vairāku banku bankomāti…

Otrkārt, datu precizitāte un uzticamība, lai gan šķiet laba, tomēr vienmēr nedaudz jāapšauba. Daudzās vietās var novērot diezgan lielu atšķirību starp “oficiālajiem” un iezīmētajiem bankomātiem. Piemēram, Aglonā ir viens SEB bankomāts… bet “oficiālās” koordinātas no šobrīd iezīmētajām atšķiras pat par 177 metriem. Šajā attēlā sarkanais punkts pie “Saules veikala” ir iezīmētais, bet tumšais punkts apakšā – “oficiālais”:

atm_aglonaa

Kurš ir pareizs? To tomēr vajadzētu pārbaudīt.

Kā palīdzēt?

Tā kā bankomātu daudz (saskaņā ar oficiālajiem datiem, 241) un tie izvietoti pa visu Latviju, būs vajadzīga palīdzība datu salīdzināšanā un uzlabošanā. Iespējamā procedūra, kā šo darbu veikt:

Atveram iekš JOSM gan “oficiālo” seb-atm.osm, gan esošo bankomātu existing-seb-atms-lv. Sameklējam tuvumā esošu bankomātu, kur ir kāda problēma – vai nu nav norādīts darba laiks, vai banka, vai bankomāts vispār nav iezīmēts – vai varbūt atrašanās vieta manāmi atšķiras. Noteikti lejuplādējam arī esošos OSM datus, varbūt tur jau ir iezīmēts kāds bankomāts, kas nav trāpījis iepriekšējā SEB bankomātu lejuplādē no Overpass API. Ieteicams šos datus lejuplādēt jaunā slānī (Download as new layer parameters), jo tad tie nejuks kopā ar “oficiālajiem” vai iepriekš lejuplādētajiem SEB bankomātiem.

download_as_new_layer

Tagad dodamies pie bankomāta un salīdzinām/nosakām/pārbaudām:

  • atrašanās vietu (koordinātas)
  • atrašanās objektu – varbūt veikals vai cits objekts nav iezīmēts
  • adresi – pārliecināmies, ka tā jau iezīmēta, ja nav – iezīmējam (neliekam adresi pašam bankomātam, bet vai nu ēkai, vai kā atsevišķu punktu)
  • darba laiku – ja bankomāts nav brīvi pieejams publiskā vietā, bet ir, piemēram, veikalā, pārliecināmies, ka bankomāta norādītais darba laiks sakrīt veikala īsto darba laiku. Uzmanību! Nedrīkst pārkopēt darba laiku – tas jāpārveido atbilstoši OpenStreetMap formātam. Piemēram, 00-00 vajag pārveidot par 24/709-18 par Mo-Su 09:00-18:00 un Pr,Ot,Tr,Ce,Pk 09-18 Se,Sv 09-14 par Mo-Fr 09:00-18:00; Sa-Su 09:00-14:00. Visi citi varianti jāpārveido atbilstoši iepriekš minētajam OSM formātam

Kāda bankomāta pārbaude

Piemēram, mēs varētu vēlēties pārbaudīt un iezīmēt kādu bankomātu, kas OSM vēl nav nemaz – pie Garkalnes novada domes, Brīvības gatvē 455. Gan dome, gan adrese šeit jau ir iezīmētas. Sākam ar bankomāta apmeklējumu.seb_atm_garkalnes_dome

Secinām, ka bankomāts šeit tiešām ir. Tā kā tas nav iekštelpās, piekļuves laiks nav ierobežots un varam likt apzīmējumu opening_hours=24/7. Adrese un atrašanās objekts (dome) jau kartē bija, tādēļ tur nav papildus dati, ko pievienot.

seb_atm_garkalnes_dome_mapped

“Oficiālais” bankomāts pa labi, nupat iezīmētais – pa kreisi

Tomēr redzam, ka novērtētā bankomāta atrašanās vieta nedaudz nesakrīt ar “oficiālo”. Šeit gan starpība ir minimāla, ~ 10 metri – nezinām, vai SEB interesē dati ar šādu precizitāti 🙂

Leave a Reply