Intersections

Bob Basques bob.basques at CI.STPAUL.MN.US
Thu Oct 14 15:50:18 PDT 2004


Eric Katherman wrote:

>My streets table contains the following fields which contain basically
>everything but the to and from name.
>
>gid INT4
>objectid INT8
>length NUMERIC (e.g. 208.98332212)
>add1_l INT8 (e.g. 27656)
>add1_r INT8 (e.g. 27657)
>add2_l INT8 (e.g. 27720)
>add2_r INT8 (e.g. 27721)
>date_ VARCHAR
>source INT4
>map INT4
>community VARCHAR
>type VARCHAR (e.g. Rd)
>name VARCHAR (the street name)
>the_geom GEOMETRY
>
>Unfortunately my table doesn't have as much detail as your's appears to,
>although with what I see, in theroy I should be able to create an "snode"
>table from where any point in the "the_geom" table matches another and then
>get the names from them right?  If Central and 5th intersect then there would
>be a record for both Central and 5th that should have that corresponding
>point in it.
>
>
that's the idea.  then you let the user figure out which record they
want to use.  We even do some generalizing after the select by grouping
all location less than 150 feet from each other into a single point.
This works well for those spots that have two raodways crossing each
other in both direction, wher typically you would get back four
different intersection points.

>The problem that I had when trying to test a select statement using the_geom
>table returned this:
>
>SQL>select name from streets  where the_geom LIKE '475151.296';
>ERROR:operator does not exist: geometry ~~ "unknown"
>HINT:No operator matches the given name and argument type(s). You may need to
>add explicit type casts.
>
>
Are the numbers stored as Ascii or actual numbers?  If the GEOMETRY is
anything like ORACLE, it's a bit harder to get at it directly with a SQL
select.  You may need a procedure of sort to get at the actual values.

bobb

>Eric
>
>
>
>>Eric Katherman wrote:
>>
>>
>>>The linetypes are LINE and I just started playing with postgis and have
>>>successfully been able to draw the centerlines from the DB if that helps
>>>at all. I am not sure if the line segments are city blocks or not, I got
>>>the data from my county.
>>>
>>>Here are two lines from ogrinfo.
>>>
>>>
>>This is very similar to what I started with for our centerline file.
>>The way I handle the intersections is to create a new SQL table from the
>>Segment data.   In my dataset though, I have the Names of the street as
>>a text field.  It also has the FROM and TO street names in it as well.
>>With these three piece of data a nd the endpoint coordinates, one can
>>assemble a new TABLE with a self join SQL request that builds a point
>>database with the name of each street name that ends at each
>>corrosponding line segment or SuperNODE (SNODE).  Note: this will get
>>all street names at every intersectionn, not just those that cross each
>>other. Notice further down, that DALE, COMO and FRONT all intersect each
>>other at the same intersection.
>>
>>
>>The end results look something like this?
>>
>>SQL> desc snodes;
>> Name                                      Null?    Type
>> ----------------------------------------- --------
>>----------------------------
>> ID                                                 CHAR(9)
>> X                                                  NUMBER(6)
>> Y                                                  NUMBER(6)
>> INTERS                                             CHAR(100)
>>
>>SQL> select * from snodes where rownum < 5;
>>
>>ID                 X          Y
>>--------- ---------- ----------
>>INTERS
>>---------------------------------------------------------------------------
>>----- 301000001     546326     171797
>>COMO AV and HUNTING VALLEY RD
>>
>>
>>301000003     546801     171503
>>COMO AV and EUSTIS ST
>>
>>
>>301000004     548524     171520
>>
>>ID                 X          Y
>>--------- ---------- ----------
>>INTERS
>>---------------------------------------------------------------------------
>>----- BRANSTON ST
>>
>>
>>301000005     548959     171546
>>DUDLEY AV and GRANTHAM ST
>>
>>
>>
>>SQL> select * from snodes where inters like '%COMO%' and inters like
>>'%FRONT%';
>>
>>ID                 X          Y
>>--------- ---------- ----------
>>INTERS
>>---------------------------------------------------------------------------
>>----- 312000057     564421     165392
>>COMO PL and FRONT AV
>>
>>
>>901500906     566512     165392
>>COMO AV and FRONT AV and N DALE ST
>>
>>
>>
>>----------------------------------------------------
>>
>>The create statement (for Oracle, your's will be different I'm sure)
>>would look something like this:
>>
>>create view snode as
>>   select fnode_ snode, streetname, cityrigt, cityleft, x1, y1, z1
>>     from tlg_county
>>union
>>   select tnode_, streetname, cityrigt, cityleft, x2, y2, z2
>>     from tlg_county
>>
>>Your data will obviously be different, but hopefully this helps you in
>>the right direction.
>>
>>Once you have a SNODE file then you can just add it as another layer
>>behind MapServ that can be selected via the StreetNames or via an ID
>>from some other process, we use a PERL CGI for this against the
>>database, and then zoom to the spot with MapServ, but it could all just
>>be done inside of MapServ too.
>>
>>---------------------------------------------------
>>
>>The TLG_COUNTY table referenced above looks like this:
>>
>>SQL> desc tlg_county
>> Name                                                  Null?    Type
>> ----------------------------------------------------- --------
>>------------------------------------
>> GEOM
>>MDSYS.SDO_GEOMETRY
>> FNODE_                                                         FLOAT(126)
>> TNODE_                                                         FLOAT(126)
>> LPOLY_                                                         FLOAT(126)
>> RPOLY_                                                         FLOAT(126)
>> LENGTH                                                         FLOAT(126)
>> TLGRDS_                                                        FLOAT(126)
>> TLGRDS_ID                                                      FLOAT(126)
>> L_F_ADD                                                        FLOAT(126)
>> R_F_ADD                                                        FLOAT(126)
>> L_T_ADD                                                        FLOAT(126)
>> R_T_ADD                                                        FLOAT(126)
>> STREETALL
>>VARCHAR2(35) F_CLASS
>>VARCHAR2(6) ALT_NAM1
>>VARCHAR2(36) ALT_NAM2
>>VARCHAR2(36) CENCTY_L
>>FLOAT(126) CENMUN_L
>>FLOAT(126) CENCTY_R
>>FLOAT(126) CENMUN_R
>>FLOAT(126) ZIP5_L
>>FLOAT(126) ZIP5_R
>>FLOAT(126) CITYLEFT
>>VARCHAR2(20) CITYRIGT
>>VARCHAR2(20) PREDIR
>>VARCHAR2(2) STREETNAME
>>VARCHAR2(20) TYPE
>>VARCHAR2(8) SUFDIR
>>VARCHAR2(2) CTYLABRV
>>VARCHAR2(3) CTYRABRV
>>VARCHAR2(3) SPEED_LIM
>>FLOAT(126) ONEWAY
>>FLOAT(126) TLGID
>>FLOAT(126) X1
>>FLOAT(126) Y1
>>FLOAT(126) Z1
>>FLOAT(126) X2
>>FLOAT(126) Y2
>>FLOAT(126) Z2
>>FLOAT(126)
>>
>>
>>bobb
>>
>>
>>
>>>OGRFeature(Streets):4
>>> OBJECTID (Integer) = 13
>>> LENGTH (Real) =     449.92674416700
>>> ADD1_L (Integer) = 0
>>> ADD1_R (Integer) = 0
>>> ADD2_L (Integer) = 0
>>> ADD2_R (Integer) = 0
>>> DATE_ (Integer) = 19970705
>>> SOURCE (Integer) = 2
>>> MAP (Integer) = 8
>>> COMMUNITY (String) = Maricopa County
>>> TYPE (String) = (null)
>>> NAME (String) = Apartment
>>> LINESTRING (459403.220 1075050.365,459434.741 1074948.799,459520.438
>>>1074768.288,459596.252 1074646.142)
>>>
>>>OGRFeature(Streets):5
>>> OBJECTID (Integer) = 14
>>> LENGTH (Real) =     787.59510637000
>>> ADD1_L (Integer) = 0
>>> ADD1_R (Integer) = 0
>>> ADD2_L (Integer) = 0
>>> ADD2_R (Integer) = 0
>>> DATE_ (Integer) = 19970705
>>> SOURCE (Integer) = 2
>>> MAP (Integer) = 8
>>> COMMUNITY (String) = Maricopa County
>>> TYPE (String) = (null)
>>> NAME (String) = Apartment
>>> LINESTRING (459382.095 1075094.728,459287.050 1075056.376,459285.226
>>>1074952.446,459294.343 1074888.628,459478.501 1074564
>>>.073,459596.252 1074646.142)
>>>
>>>
>>>
>>>>What does your Street centerline data look like now?
>>>>
>>>>Is it a seperate line segment per city block or polylines or ???
>>>>
>>>>bobb
>>>>
>>>>Eric Katherman wrote:
>>>>
>>>>
>>>>>Can someone please give me some idea or a sample on how one would begin
>>>>>to find an intersection of two lines, streets in my case. Info on
>>>>>finding intersecting lines with other data besides streets could be
>>>>>helpful as well. I ultimately want to give a user the option to enter
>>>>>two street names and then zoom to that intersection.  Any suggestions
>>>>>or examples?
>>>>>
>>>>>Eric
>>>>>
>>>>>
>
>
>



More information about the MapServer-users mailing list