OpenStreetMap

utak durva hibáinak kimutatása

Posted by Kolesár on 12 September 2014 in Hungarian (Magyar)

Eredetileg szögletes (nem szép ívekkel megrajzolt) vasútvonalakat kerestem, helyette durva hibákba botlottam. Készítettem egy postgresql függvényt, ami megmutatja, mi a legnagyobb törésszög a vonalban (GPL):

	CREATE OR REPLACE FUNCTION largestangle (
		geom geometry
	)
	RETURNS float
	AS
	$$
	DECLARE
		num integer;
		azimuth float;
		previous float;
		max float;
		angle float;

	BEGIN
		num := ST_NumPoints(geom)-1;
		max = 0;
		previous = null;
		FOR i IN 1..num LOOP
			azimuth = ST_Azimuth(ST_PointN(geom, i), ST_PointN(geom, i+1))*180/PI();
			IF previous IS NOT NULL THEN
				angle = azimuth-previous;
				if (angle<0) THEN angle = angle + 360; END IF;
				if (angle>180) THEN angle = angle - 360; END IF;
				angle = ABS(angle);
				if (angle>max) THEN max = angle; END IF;
			END IF;
			previous = azimuth;
		END LOOP;
		RETURN max;
	END;
	$$
	LANGUAGE 'plpgsql';

Kikerestem Magyarország vasútvonalai közül azokat, amelyekben két egymást követő pont között 100 foknál nagyobb törés van:

	SELECT osm_id, railway, largestangle(way)
	FROM planet_osm_line
	WHERE railway IS NOT NULL
	AND largestangle(way)>100
	ORDER BY largestangle(way) DESC

Az eredmény lesújtó:

	67238470;"light_rail";180
	121097646;"tram";180
	123907293;"platform";179.955851775949
	211273169;"rail";179.292086339494
	40764520;"rail";179.192081204579
	221864293;"rail";179.017371190472
	87763263;"rail";178.891823334706
	87975409;"rail";178.328305034132
	294593714;"rail";177.532887205442
	249158915;"rail";176.432827720348
	261528683;"rail";176.093856853854
	266535726;"rail";175.735610193293
	228949256;"rail";175.069038113852
	231714208;"rail";174.456231436573
	254601660;"rail";174.429655532425
	151982042;"rail";174.073601056486
	83250577;"abandoned";173.916391809453
	58680396;"tram";172.847818564358
	231156588;"rail";172.232675767268
	230505264;"rail";172.010225172665
	264239018;"disused";171.013974128316
	96583460;"rail";170.95014069881
	169139414;"rail";170.646584743656
	178696845;"tram";169.978759451508
	151987089;"rail";169.850101980453
	169139416;"rail";169.252730579368
	154513149;"platform";168.644987907461
	169139418;"rail";166.855496170685
	300210242;"rail";166.492269214075
	231714246;"rail";165.88889681817
	25717783;"rail";164.191851861276
	242217332;"rail";161.720967385473
	169015068;"tram";157.185985623234
	96621059;"rail";156.689293148707
	165028710;"rail";154.941354138393
	121097675;"construction";151.529941313625
	156546547;"rail";151.08146686337
	48655425;"platform";130.166176320385
	229989396;"rail";117.725075097282
	48655422;"platform";115.538929552111
	54308577;"abandoned";111.828437618505
	103336934;"disused";106.292185094081
	25720396;"tram";103.772617080563
	235480246;"platform";101.745332022293
	216724982;"platform";100.876472649506
	48655420;"platform";100.638820505008
	230507188;"platform";100.13953405001

A 180 fokosak azonos töréspontba tértek vissza, a többi pedig általában lapos Z alakban kétszer visszafordult. A 178 feletti első nyolcat gyorsan javítottam, a többit meghagyom a lelkes közösségnek.

Az első oszlopban szereplő azonosítót könnyen be lehet másolni JOSM-be a Fájl / Objektumok letöltése (Ctrl+Shift+O) paranccsal, az objektum típusát elég az első alkalommal beállítani vonalra, megjegyzi. A vonalak kijelölve megjelennek az irány-nyilak, ezen lehet meglátni, hogy hol törik meg hegyes szögben.

Ha nekiállsz, dobj egy üzenetet, hogy ne ütközzünk össze.

Comment from grin on 12 September 2014 at 13:09

(listáról ide is bemásolom) Kitaláltad gondolom hogy ezt mi okozza: amikor valaki egy nagyobb területen offsetet javít akkor végig kell menni a határvonalon és minden kilógó szakaszt egyenként átnézni, nehogy Zorro legyen benne. Láthatóan még maradt bőven. Sajnos míg nem sikerül kiirtani a Bing00 részeket addig ilyenek lesznek.

Nagyon hasznos ez a keresés egyébként bármilyen útra vonatkoztatva is.

Login to leave a comment