Rub21
4/23/2013 - 11:56 AM

gistfile1.txt


CREATE INDEX osm_changeset_index ON osm_changeset(ogc_fid);

ALTER TABLE osm_changeset ADD COLUMN geom GEOMETRY;
CREATE INDEX geom_osm_changeset_index  ON osm_changeset using gist(geom);



--ALTER TABLE osm_changeset DROP  COLUMN lon RESTRICT;
--ALTER TABLE osm_changeset DROP  COLUMN lat RESTRICT;
--ALTER TABLE osm_changeset DROP COLUMN geom RESTRICT;

  

---geometry
  UPDATE osm_changeset
   SET geom=(SELECT ST_PointFromText('POINT(' || lon || ' ' || lat ||')', 4326))
   --WHERE ogc_fid<100;


----------------------------funcion que conprueba si un punto pertenece a US
CREATE OR REPLACE FUNCTION check_contained(_geom Geometry)
RETURNS  boolean
AS $$
DECLARE
	_name VARCHAR(200);
	_bandera boolean;
	BEGIN
		_bandera=false;

		_name=(SELECT name_0 FROM us_admin WHERE st_contains(us_admin.geom, _geom));
		IF (_name IS NULL) THEN	
			_bandera=false;
		ELSE
			_bandera=true;	
		END IF;	
	RETURN _bandera;
	END;
$$ LANGUAGE plpgsql;


--TEST
select check_contained(ST_PointFromText('POINT(-98.711 39.31513)', 4326));
select check_contained(ST_PointFromText('POINT(-12 -74)', 4326));

-------------------------------------------Funccion para eliminar Filas que no estan en US
CREATE OR REPLACE FUNCTION remove_changes(init INTEGER,final INTEGER) 
RETURNS INT
AS $$
DECLARE
	_geom GEOMETRY;
	_bandera boolean;
      
BEGIN		        
        FOR _i IN init..final
        
		LOOP 	
		    RAISE  NOTICE '====================ID=%', _i;
			_geom=(select geom from osm_changeset where ogc_fid=_i);
			_bandera=check_contained(_geom);
			--RAISE  NOTICE '===========================%', _bandera ;
			IF (_bandera=false) THEN
			RAISE  NOTICE '===========================%', 'Elimina' ;			
				DELETE FROM osm_changeset
				WHERE ogc_fid=_i;					 				    
			END IF;				
 
		END LOOP;		
	       RETURN final;
END;
$$ LANGUAGE plpgsql;


--Ejecutar Funcion para ajecutar mmas rapido el procesamiento y aprovechar al maxino La Maquina

select remove_changes(1,50000);
select remove_changes(50001,100000);
select remove_changes(100001,150000);
select remove_changes(150001,200000);
select remove_changes(200001,250000);
select remove_changes(250001,300000);
select remove_changes(300001,313817);


select count(*) from osm_changeset
select * from osm_changeset limit 10

--ALTER TABLE osm_changeset  DROP COLUMN id

ALTER TABLE osm_changeset ADD COLUMN id SERIAL;
CREATE INDEX osm_changeset_id_index ON osm_changeset(id);

select * from osm_changeset limit  10;

(SELECT id,user_id,osm_user,timestamp, geom from  osm_changeset ) as osm

select osm_user, count(*) as num_edit from osm_changeset GROUP BY osm_user ORDER BY num_edit DESC


select substring((CAST(((TIMESTAMP WITH TIME ZONE 'epoch' + INTERVAL '1 second' * timestamp)|| ' ') AS date)|| ''),1,10) as date , 
count(*) as num_edition from osm_changeset 
GROUP BY substring((CAST(((TIMESTAMP WITH TIME ZONE 'epoch' + INTERVAL '1 second' * timestamp)|| ' ') AS date)|| ''),1,10) 
ORDER BY substring((CAST(((TIMESTAMP WITH TIME ZONE 'epoch' + INTERVAL '1 second' * timestamp)|| ' ') AS date)|| ''),1,10)