Created
January 25, 2012 21:21
-
-
Save jatorre/1678789 to your computer and use it in GitHub Desktop.
Find the intersection for a latitude and longitude
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--First, this is quick hack ported from https://github.com/fruminator/openstreetblock/ | |
--Replace the latitude and longitude accordly on the different places and encode the whole SQL or it will not work | |
http://vizzuality.cartodb.com/api/v1/sql?q= | |
select l.name, l.osm_id from osm_line l join way_nodes wn on l.osm_id = wn.way_id where wn.node_id = ( select n.id from nodes n where ARRAY[n.id::integer] && (select w.nodes from osm_line l join osm_ways w on l.osm_id = w.id where st_intersects(way , ST_buffer(ST_SetSRID(ST_MakePoint(-73.999548,40.71954),4326), .002)) order by way <-> ST_SetSRID(ST_MakePoint(-73.999548,40.71954),4326) limit 1) order by n.geom <-> ST_SetSRID(ST_MakePoint(-73.999548,40.71954),4326) limit 1) and wn.way_id != ( select osm_id from osm_line l join osm_ways w on l.osm_id = w.id where st_intersects(way, ST_buffer(ST_SetSRID(ST_MakePoint(-73.999548,40.71954),4326), .002) ) LIMIT 1) and l.name is not null and l.name != '' | |
--example | |
http://vizzuality.cartodb.com/api/v1/sql?q=select%20l.name%2C%20l.osm_id%20%20%20from%20osm_line%20l%20%20%20join%20way_nodes%20wn%20%20%20on%20l.osm_id%20%3D%20wn.way_id%20%20%20where%20wn.node_id%20%3D%20(%20%20%20%20select%20n.id%20%20%20from%20nodes%20n%20%20%20where%20ARRAY%5Bn.id%3A%3Ainteger%5D%20%26%26%20(select%20w.nodes%20from%20osm_line%20l%20join%20osm_ways%20w%20on%20l.osm_id%20%3D%20w.id%20%20%20%20where%20%20%20%20%20%20%20%20%20st_intersects(way%20%20%20%20%20%20%20%20%20%2C%20ST_buffer(ST_SetSRID(ST_MakePoint(-73.999548%2C40.71954)%2C4326)%2C%20.002))%20order%20by%20way%20%3C-%3E%20ST_SetSRID(ST_MakePoint(-73.999548%2C40.71954)%2C4326)%20%20%20%20%20%20%20limit%201)%20order%20by%20n.geom%20%3C-%3E%20ST_SetSRID(ST_MakePoint(-73.999548%2C40.71954)%2C4326)%20%20%20limit%201)%20and%20wn.way_id%20!%3D%20(%20%20%20select%20osm_id%20from%20osm_line%20l%20%20%20join%20osm_ways%20w%20on%20l.osm_id%20%3D%20w.id%20%20%20where%20st_intersects(way%2C%20ST_buffer(ST_SetSRID(ST_MakePoint(-73.999548%2C40.71954)%2C4326)%2C%20.002)%20%20%20)%20LIMIT%201)%20%20%20%20%20and%20l.name%20is%20not%20null%20and%20l.name%20!%3D%20'' | |
--- Here is in multiple lines | |
select l.name, l.osm_id | |
from osm_line l | |
join way_nodes wn | |
on l.osm_id = wn.way_id | |
where wn.node_id = ( | |
select n.id | |
from nodes n | |
where ARRAY[n.id::integer] && (select w.nodes from osm_line l | |
join osm_ways w on l.osm_id = w.id | |
where | |
st_intersects(way | |
, ST_buffer(ST_SetSRID(ST_MakePoint(-73.999548,40.71954),4326), .002) | |
) | |
order by way <-> ST_SetSRID(ST_MakePoint(-73.999548,40.71954),4326) | |
limit 1) | |
order by n.geom <-> ST_SetSRID(ST_MakePoint(-73.999548,40.71954),4326) | |
limit 1 | |
) | |
and wn.way_id != ( | |
select osm_id from osm_line l | |
join osm_ways w on l.osm_id = w.id | |
where | |
st_intersects(way | |
, ST_buffer(ST_SetSRID(ST_MakePoint(-73.999548,40.71954),4326), .002) | |
) LIMIT 1) | |
and l.name is not null and l.name != '' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
It's working now! Sorry about that, I'm not sure what the problem was - might have been because I was trying to request it unencoded before.
Thanks again for all your help, this is going to be really useful for us.
Peter.