Nathan,

I've had to develop a couple of dealer locators in the past.  After looking
again, I get similar times as you.  Fortuanately in my case, the results rarely
return more than 100 matches.  A while back when I was doing some testing with
JTransit, these math operations seemed to be faster than Witango.

Mike

Nathan Hitchcock wrote:

> Greetings,
>
> I've just finished a "dealer locator" app that provides a list of store
> addresses within X miles to given zip code.  It's basically that "show me
> the closest locations to me" feature that every site seems to have now.
> While it was not the big of a deal to develop, I'm running into some
> performance issues, and they seem to revolve around Witango's ability to
> perform complex triginomic calculations.  Here's the code that seems to be
> slowing it down:
>
> <@ROWS ARRAY="local$matches">
>
> <@! define variables >
> <@ASSIGN NAME="lat2" SCOPE="local" VALUE='<@COL 2>'>
> <@ASSIGN NAME="long2" SCOPE="local" VALUE='<@COL 3>'>
>
> <@! calc distance in kilometers >
> <@ASSIGN NAME="x" SCOPE="local" VALUE='<@CALC EXPR="(sin(@@local$lat1 *
> @@local$pi / 180) * sin(@@local$lat2 * @@local$pi / 180) + cos(@@local$lat1
> * @@local$pi / 180) * cos(@@local$lat2 * @@local$pi / 180) *
> cos(abs((@@local$long2 * @@local$pi / 180)-(@@local$long1 * @@local$pi /
> 180))))">'>
> <@ASSIGN NAME="x" SCOPE="local" VALUE='<@CALC
> EXPR="atan((sqrt(1-(@@local$x*@@local$x)))/@@local$x)">'>
> <@ASSIGN NAME="dist_km" SCOPE="local" VALUE='<@CALC EXPR="1.852 * 60.0 *
> ((@@local$x/@@local$pi)*180)">'>
>
> <@! convert distance to miles >
> <@ASSIGN NAME="dist_mi" SCOPE="local" VALUE='<@CALC EXPR="@@local$dist_km /
> 1.609344">'>
>
> <@! add row to array with distances >
> <@ASSIGN NAME="row_str" SCOPE="local" VALUE='<@COL 1>,<@COL 2>,<@COL
> 3>,@@local$dist_mi,<@OMIT STR="<@COL 4>" CHARS=",">,<@OMIT STR="<@COL 5>"
> CHARS=",">,<@OMIT STR="<@COL 6>" CHARS=",">,<@COL 7>,<@COL 8>'>
> <@ADDROWS ARRAY="local$matches2" VALUE="<@ARRAY ROWS='1' COLS='9'
> VALUE='@@local$row_str'>">
>
> </@ROWS>
>
> The "matches" array is generated by finding all locations that fit within a
> pair of lattitude and logitude corrdinates that were calculated in a
> previous step.  Basically, the user enteres a zip code and a desired
> distance from that zip code and it finds all addresses within that area,
> leaving you with the "matches" array.  The code above then takes that array
> and determines the exact distance from the target zip code so it can sort
> the list accordingly.
>
> This array can contain anywhere from just a few addresses to thousands.  Any
> thing under about 100 matches it can process in about 3 seconds or less.
> More than about 100, and the user is twiddling their thumbs in wait.  Here's
> some times I've logged with the assistance of the <@TIMER> tag.
>
> MATCHES  TIME(MS)
> 58         1166
> 79         2033
> 148        6950
> 206       12700
> 291       23617
> 320       28450
> 660      113733
>
> Server Specs: Dual 500 PIII, 500 MB Ram, running Win NT 4.0
>
> Does this seem like an excessivly long time to do this kind of math, or is
> it just me?  Would I be better off writing this particular bit of code so
> that SQL does the math?
>
> ________________________________________________________________________
> TO UNSUBSCRIBE: send a plain text/US ASCII email to [EMAIL PROTECTED]
>                 with unsubscribe witango-talk in the message body

--
Mike Tyranski
Lynch2
p: 847.608.6900
f: 847.608.9501
http://www.lynch2.com


________________________________________________________________________
TO UNSUBSCRIBE: send a plain text/US ASCII email to [EMAIL PROTECTED]
                with unsubscribe witango-talk in the message body

Reply via email to