22 messaggi dal 05 febbraio 2009
Ciao

dovrei scrivere una funzione che dati due valori x ed y in ingresso che rappresentano due coordinate di una griglia, vanno a prendere da una tabella il valore più vicino.

Mi spiego: io clicco su una griglia ed ottengo le due coordinate; nella tabella ho memorizzato delle coordinate a cui è associato un valore; io devo trovare la distanza minima fra il mio punto ed i vari punti nella tabella, ed una volta trovata leggere il valore associato.
Per far questo devo ovviamente scansionare tutta la tabella e calcolare ogni volta la distanza.

E' meglio (o possibile) farlo con una stored procedure oppure scrivo la funzione nel mio caso in c#???

Grazie in anticipo del consiglio!
203 messaggi dal 21 maggio 2004
io farei una stored...anche perchè se fai una funzione in c# devi richiamare x forza la connessione al DB x prendere i dati dalla tabella.

Inoltre se devi fare della modifiche alla funzione metterai mano sono alla stored senza dover ricompilare la soluzione, questa è la mia opinione.

Ciao
Ste
22 messaggi dal 05 febbraio 2009
Si, hai ragione.

Mi aiuti a scrivere lo scheletro? In particolare non saprei come scrivere il loop e come memorizzare temporaneamente il valore della distanza minima calcolato e confrontato ad ogni passo (sono un newbe della stored procedure).

Ringrazio in anticipo ...
203 messaggi dal 21 maggio 2004
però non capisco una cosa...se clicchi sulla griglia ottieni x e y che andrai a cerchare nella tabella delle coordinate, che ti restituira un singolo valore, ovvero un punto.
Non capisco cosa intendi per "distanza minima"..
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
andrea99999 wrote:
Ciao

dovrei scrivere una funzione che dati due valori x ed y in ingresso che rappresentano due coordinate di una griglia, vanno a prendere da una tabella il valore più vicino.

Mi spiego: io clicco su una griglia ed ottengo le due coordinate; nella tabella ho memorizzato delle coordinate a cui è associato un valore; io devo trovare la distanza minima fra il mio punto ed i vari punti nella tabella, ed una volta trovata leggere il valore associato. Per far questo devo ovviamente scansionare tutta la tabella e calcolare ogni volta la distanza.

E' meglio (o possibile) farlo con una stored procedure oppure scrivo la funzione nel mio caso in c#???

Grazie in anticipo del consiglio!

se utilizzi SQL Server 2008, la cosa probabilmente piu' semplice e' l'utilizzo del tipo di dato apposito, geography
(http://msdn.microsoft.com/en-us/library/bb895266.aspx), che prevede anche apposite funzionalita' di ricerca minima, vedi ad esempio
http://community.ugiss.org/blogs/abenedetti/archive/2008/17/14/sql-2008-geography-e-distanze.aspx saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
22 messaggi dal 05 febbraio 2009
Si, uso SQL2008 Express; ho modificato il tipo di dato portandolo a Geography.

Ora mi rimane il problema di come scrivere la SP; quando usavo Lat e Lon la funzione era questa (la SP deve praticamente fare la stessa cosa con il tipo di dato Geograpy):

foreach (DataRow r in tabella.Rows)
{
parkLat = double.Parse(r[3].ToString()); // Lat
parkLon = double.Parse(r[4].ToString()); // Lon

distanza = Math.Sqrt(Math.Pow (parkLat-latP ,2) + Math .Pow (parkLon-lonP ,2));
if (distanza < parkDist)
{
parkDist = distanza;
phi = double.Parse(r[2].ToString());
}
} // Fine foreach

LatP e LonP sono le coordinate in input, io devo trovare quale punto in tabella ha la distanza minima con quello che fornisco in input.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.