12.07.2015 Views

PostGIS 1.5.8 Manual - Fedora Project Packages GIT repositories

PostGIS 1.5.8 Manual - Fedora Project Packages GIT repositories

PostGIS 1.5.8 Manual - Fedora Project Packages GIT repositories

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>PostGIS</strong> <strong>1.5.8</strong> <strong>Manual</strong>239 / 3107.10.2 ST_Line_Locate_PointST_Line_Locate_Point — Returns a float between 0 and 1 representing the location of the closest point on LineString to thegiven Point, as a fraction of total 2d line length.Synopsisfloat ST_Line_Locate_Point(geometry a_linestring, geometry a_point);DescriptionReturns a float between 0 and 1 representing the location of the closest point on LineString to the given Point, as a fraction oftotal 2d line length.You can use the returned location to extract a Point (ST_Line_Interpolate_Point) or a substring (ST_Line_Substring).This is useful for approximating numbers of addressesAvailability: 1.1.0Examples--Rough approximation of finding the street number of a point along the street--Note the whole foo thing is just to generate dummy data that looks--like house centroids and street--We use ST_DWithin to exclude--houses too far away from the street to be considered on the streetSELECT ST_AsText(house_loc) As as_text_house_loc,startstreet_num +CAST( (endstreet_num - startstreet_num)* ST_Line_Locate_Point(street_line, house_loc) As integer) As street_numFROM(SELECT ST_GeomFromText(’LINESTRING(1 2, 3 4)’) As street_line,ST_MakePoint(x*1.01,y*1.03) As house_loc, 10 As startstreet_num,20 As endstreet_numFROM generate_series(1,3) x CROSS JOIN generate_series(2,4) As y)As fooWHERE ST_DWithin(street_line, house_loc, 0.2);as_text_house_loc | street_num-------------------+------------POINT(1.01 2.06) | 10POINT(2.02 3.09) | 15POINT(3.03 4.12) | 20--find closest point on a line to a point or other geometrySELECT ST_AsText(ST_Line_Interpolate_Point(foo.the_line, ST_Line_Locate_Point(foo.the_line ←↪, ST_GeomFromText(’POINT(4 3)’))))FROM (SELECT ST_GeomFromText(’LINESTRING(1 2, 4 5, 6 7)’) As the_line) As foo;st_astext----------------POINT(3 4)See AlsoST_DWithin, ST_Length2D, ST_Line_Interpolate_Point, ST_Line_Substring

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!