I start off passing a central latitude ($lat_degrees) and longitude
($long_degrees) and a radius ($radius) to a TCL script.  Using the
spherical cosine law to calculate distance, I want to select all sites
in a table within that given radius.  Here are 2 code fragments from the
script...

===================================================================
sqlite3 db :memory:
# Note: GIS convention has longitude negative in the western hemisphere.
# But end-users will get annoyed at having to enter the minus sign all the
# time.  So the conversion is done internally in the distance() function.
proc sql_distance { lat1 long1 lat2 long2 } {
  set radian [expr 180 / 3.1415926]
  set lat1 [expr $lat1 / $radian ]
  set long1 [expr $long1 / $radian * (-1) ]
  set lat2 [expr $lat2 / $radian ]
  set long2 [expr $long2 / $radian ]
  return [expr {
    acos(sin($lat1) * sin($lat2) + cos($lat1) * cos($lat2) * cos($long2 - 
$long1)) * 6371}]}
db function distance sql_distance

...

db eval { create table temp2 as
          select e_stnid, i_stnid, deci_lat, deci_long, elevation, stn_name,
            distance( $lat_degrees, $long_degrees, deci_lat, deci_long) as dist
          from cl.stations
          where dist <= $radius}
===================================================================

  $lat_degrees and $long_degrees are defined
  deci_lat and deci_long are valid field names (type real) in table
stations in the attached database (alias "cl").  I get an error message
which tells me that deci_lat and deci_long are not defined.  I've run a
separate test to confirm that every row has non-null numbers in deci_lat
and deci_long.  So that's not the problem.  Here's the error message...

missing operand at _...@_
in expression " _...@_/ 57.295780490442965"
    (parsing expression " / 57.295780490442965")
    invoked from within
"expr $lat2 / $radian "
    (procedure "sql_distance" line 5)
    invoked from within
"sql_distance 49.25 123 {} {}"
    invoked from within
"db eval { create table temp2 as
          select e_stnid, i_stnid, deci_lat, deci_long, elevation,
stn_name,
            distance( $lat_degrees, $long..."
    invoked from within
"if { $argc < 4 } {
  puts "Error: This query requires at least 4 parameters, namely"
  puts "Central Latitude, Central Longitude, Radius, and at least..."
    (file "./tcltest.004" line 2

-- 
Walter Dnes <waltd...@waltdnes.org>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to