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
