Ancoratges de bicicleta a Barcelona

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Introducció

Punts ancoratge bici2.png

L'ajuntament de Barcelona publica dades en format obert:

I les dades que estan geolocalitzades són susceptibles de ser impotades a OSM:

Tasques de l'importació de l'ajuntament de Barcelona

Punts d'ancoratges de bicicletes

Em centro en aquesta tasca:

El fitxer XML són 5MB, i s'actualitza cada setmana.

En el OSM aquests nodes estan definits pel tag:

 
Tag:amenity=bicycle_parking

Tag	Description
name=*	Larger areas of bike parking may be named.
operator=*	Cycle parking may be operated by some organisation.
covered=*	Parked bikes are protected from rain.
access=*	Public access is implied in most roadside cases. Some bike racks may be private with access limited to memberts of a university, company, or other organisation, possibly requiring keys or codes to access.
capacity=*	The number of bikes that can be parked here.
fee=*	In some places, one must pay to park one's bike.
paid is a less widespread alias for this.
bicycle_parking=*	Details the type of bicycle parking (e.g. stands, wall loops...).
cyclestreets_id=*	A link to the ID (e.g. 12345) of the location describing a photo of the cycle parking in CycleStreets. Multiple IDs should be separated by semi-colons.
maxstay=*	Maximum time the bicycle is allowed to be parked at that place - given sometimes at covered parking-places.
surveillance=*	Closed-circuit television (CCTV) security cameras can be marked with this. See the linked page for details of the values in use. Depending on the layout, a separate node nearby may be enough.

Si em fixo en el XML, puc localitzar els parkings entre els tags row i /row:

<row pos="1368" num="1368"><item href="punt-d-ancoratge-de-bicicletes-pg-font-d-en-fargas-39_99400598884.html"><address  label="Adreça"><![CDATA[Pg Font d'en Fargas 39]]></address>
<city  label="Població"><![CDATA[Barcelona]]></city>
<code_url  label="Web"><![CDATA[mobilitat.ajuntament.barcelona.cat]]></code_url>
<district  label="Districte"><![CDATA[Horta-Guinardó]]></district>
<addresses><item><district><![CDATA[Horta-Guinardó]]></district>
<barri><![CDATA[la Font d'en Fargues]]></barri>
<city><![CDATA[Barcelona]]></city>
<coordaddressx><![CDATA[30366.191]]></coordaddressx>
<coordaddressy><![CDATA[86405.766]]></coordaddressy>
<code_comarca><![CDATA[Barcelonès]]></code_comarca>
<gmapx><![CDATA[41.424348190037]]></gmapx>
<gmapy><![CDATA[2.1655367171792]]></gmapy>
<address><![CDATA[Pg Font d'en Fargas 39]]></address>
<streetnum><![CDATA[39]]></streetnum>
</item></addresses><interestinfo><item><interinfo><![CDATA[mobilitat.ajuntament.barcelona.cat]]></interinfo>
<intercode><![CDATA[00100003]]></intercode>
<label><![CDATA[Web]]></label>
</item></interestinfo><gmapx  label="Lat"><![CDATA[41.424347]]></gmapx>
<gmapy  label="Long"><![CDATA[2.1655366]]></gmapy>
<id  label=""><![CDATA[99400598884]]></id>
<name  label="Nom"><![CDATA[Punt d'Ancoratge de Bicicletes * Pg Font d'en Fargas, 39]]></name>
<type  label="Tipus"><![CDATA[Entitats i equipaments]]></type>
<pos  label=""><![CDATA[1368]]></pos>
<tp  label=""><![CDATA[EQ]]></tp>
</item></row>

Si ho netegem:

<row pos="1368" num="1368">
<item href="punt-d-ancoratge-de-bicicletes-pg-font-d-en-fargas-39_99400598884.html">
	<address  label="Adreça"><![CDATA[Pg Font d'en Fargas 39]]></address>
	<city  label="Població"><![CDATA[Barcelona]]></city>
	<code_url  label="Web"><![CDATA[mobilitat.ajuntament.barcelona.cat]]></code_url>
	<district  label="Districte"><![CDATA[Horta-Guinardó]]></district>
	<addresses>
		<item>
			<district><![CDATA[Horta-Guinardó]]></district>
			<barri><![CDATA[la Font d'en Fargues]]></barri>
			<city><![CDATA[Barcelona]]></city>
			<coordaddressx><![CDATA[30366.191]]></coordaddressx>
			<coordaddressy><![CDATA[86405.766]]></coordaddressy>
			<code_comarca><![CDATA[Barcelonès]]></code_comarca>
			<gmapx><![CDATA[41.424348190037]]></gmapx>
			<gmapy><![CDATA[2.1655367171792]]></gmapy>
			<address><![CDATA[Pg Font d'en Fargas 39]]></address>
			<streetnum><![CDATA[39]]></streetnum>
		</item>
	</addresses>
	<interestinfo>
		<item>
			<interinfo><![CDATA[mobilitat.ajuntament.barcelona.cat]]></interinfo>
			<intercode><![CDATA[00100003]]></intercode>
			<label><![CDATA[Web]]></label>
		</item>
	</interestinfo>
	<gmapx  label="Lat"><![CDATA[41.424347]]></gmapx>
	<gmapy  label="Long"><![CDATA[2.1655366]]></gmapy>
	<id  label=""><![CDATA[99400598884]]></id>
	<name  label="Nom"><![CDATA[Punt d'Ancoratge de Bicicletes * Pg Font d'en Fargas, 39]]></name>
	<type  label="Tipus"><![CDATA[Entitats i equipaments]]></type>
	<pos  label=""><![CDATA[1368]]></pos>
	<tp  label=""><![CDATA[EQ]]></tp>
</item>
</row>

Parsejar el document XML

script parsejar_ancoratges_v2.py:

from xml.dom import minidom
#xmldoc = minidom.parse('ancoratge_min.xml')
xmldoc = minidom.parse('PuntsAncoratgeBicicletes.xml')
addresseslist = xmldoc.getElementsByTagName('addresses')
#print(len(addresseslist))

num_item=1
gmapy=0
gmapx=0
address=""

for r in addresseslist:
	#print(len(addresseslist))
	if (r.nodeType != r.TEXT_NODE):
		items = r.childNodes
		#print(len(items))

		for s in items:
			#print(s)
			if (s.nodeType != s.TEXT_NODE):
				dins_item = s.childNodes
				#print(len(dins_item))
				for t in dins_item:
					if (t.nodeType != t.TEXT_NODE):
						if (t.tagName == 'gmapy'):
							gmapy = t.firstChild.nodeValue
						if (t.tagName == 'gmapx'):
							gmapx = t.firstChild.nodeValue
						if (t.tagName == 'address'):
							address = t.firstChild.nodeValue
	print "#" , str(num_item)
	print gmapy				
	print gmapx
	print address
	print
	num_item += 1
...
# 2998
2.1600532629808
41.376348053996
C Manso 19

# 2999
2.1568114112962
41.37668108035
Av Mistral 37

# 3000
2.1537192230105
41.378777681885
G.V. Corts Catalanes 445

Quants bicycle_parking hi ha?

Abans de fer cap canvi, a Barcelona ciutat hi ha uns 400 nodes (octubre 2019). S'ha de distingir entre buscar per Barcelona provínica, i Barcelona ciutat. Aquest és un tema una mica difícil (TBD).

Barcelona província:

area["name"="Barcelona"]->.boundaryarea;
(
nwr(area.boundaryarea)[amenity='bicycle_parking'];
);
out meta;

Barcelona ciutat:

{{geocodeArea:"Barcelona"}}->.boundaryarea;
(
nwr(area.boundaryarea)[amenity='bicycle_parking'];
);
out meta;

Barcelona ciutat, millor (només nodes, sense ways):

{{geocodeArea:"Barcelona"}}->.boundaryarea;
(
node["amenity"="bicycle_parking"](area.boundaryarea);
);
out meta;

Barcelon ciutat, amb icona de bicicleta:

{{geocodeArea:"Barcelona"}}->.boundaryarea;
(
node["amenity"="bicycle_parking"](area.boundaryarea);
);
out meta;

{{style:

node[amenity=bicycle_parking] {
  icon-image: url('http://free-icon-rainbow.com/i/icon_01944/icon_019440_256.png');
  icon-width: 20;
  icon-height: 20; 
}

}}

Tenint en compte que l'ajuntament de Barcelona, a través del seu servei opendata, proporciona informació d'uns 3000 punts d'ancoratge, actualitzats setmanalment, serà bo actualitzar aquesta informació, i fer-ho de manera que es pugui executar aquest script en una base mensual/anual.

La part interessant és: què passa si desapareix un punt d'ancoratge? el script hauria de ser capaç d'actualitzar i inserir, sinó també eliminar els punts d'ancoratge que ja no hi són.

Dades actuals: Amb la consulta de overpass-turbo.eu puc gravar el fitxer xml que inclou la informació actual:

...
  <node id="5136292422" lat="41.3888467" lon="2.1687274" version="2" timestamp="2018-06-30T08:45:04Z" changeset="60297159" uid="170106" user="sanchi">
    <tag k="access" v="yes"/>
    <tag k="amenity" v="bicycle_parking"/>
    <tag k="capacity" v="20"/>
    <tag k="covered" v="no"/>
    <tag k="fee" v="no"/>
  </node>
...

Ho gravo en el fitxer punts_ancoratge_actuals.xml

Cercar els punts d'ancoratge que han desaparegut, i eliminar

Abans de fer la inserció i actualització, he de cercar els punts d'ancoratge que han desaparegut. Per fer-ho tinc els dos fitxers: punts_ancoratge_actuals.xml, i PuntsAncoratgeBicicletes.xml que m'he descarregat de la web d'opendata de l'ajuntament.

Encara que sigui una mica lent i ineficient, es tracta de recórrer tots els punts d'ancoratge actuals i cercar-los (en un àmbit de 10m) dins el fitxer que he descarregat de l'ajuntament. En el cas de què no es trobi, voldrà dir que aquest punt d'ancoratge ha desaparegut, i s'haurà d'eliminar el node.

Com és lògic, s'ha d'establir un criteri de proximitat per saber si un punt d'ancoratge existeix o no. Prime he provat amb 12m, després he ampliat a 20m. Hi ha punts d'ancoratge que a OSM no s'han editat des de 2019. Per tant, té sentit de què hi hagi punts que ja no existeixen.

Dels 392 punts, n'eliminaré uns 130.

scripts:

Actualització i inserció dels punts d'ancoratge

script importar_ancoratges_bici_bcn_v2.py

Com que són quasi 3000 punts d'ancoratge, primer faig el script interactiu, i després ja faig tota l'actualització en bulk.


creat per Joan Quintana Compte, octubre 2019

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
Institut Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines