[16:38] <Rachelle> iemand verstand hoe je ruwweg een cirkel van +/- 50 km om een gps coordinate kan berekenen?
[16:39] <CasW> Hoe bedoel je, 'kan berekenen'?
[16:41] <Rachelle> als ik een lat/long van stel den bosch heb.
[16:42] <Rachelle> en dan de coordiaten van ruwweg 50 km in een rondje
[16:43] <Rachelle> het is voor een zoekfunctie welke bedrijven in de DB eronder vallen.
[16:45] <lordnoid> Voor elk bedrijf de afstand berekenen, en kijken of die > or < dan 50km is
[16:46] <Rachelle> wilde het dus wat beter maken ;)
[16:46] <Rachelle> ik heb voor elk bedrijf de GPS coordinaten in de database staan
[16:46] <Rachelle> elk bedrijf dat op die site aangemeld is
[16:48] <lordnoid> maar alle coordinaten in een cirkel.. dan zijn er enorm veel.. oneindig veel zelfs. Hoe gaat dat efficienter zijn?
[16:49] <CasW> Tsja, het is best te doen, hoor, alle punten binnen die cirkel vinden (ten minste, de wiskundige definitie ervan; zoals lordnoid zei, het zijn er oneindig veel, je wilt ze niet allemaal gaan omschrijven of zo), maar dan moet je eerst lat en lon omrekenen naar een punt in de 3d ruimte (lat en lon converteren naar 3d poolcoordinaten) en vervolgens daarmee die cirkel berekenen.
[16:49] <CasW> In ieder geval zal het niet veel mooier en al helemaal niet sneller zijn dan gewoon voor ieder bedrijf de afstand berekenen
[16:49] <Rachelle> zover ik weet zijn GPS coordinaten toch gewoon 2 getallen?
[16:50] <Rachelle> where lat BETWEEN ? AND ?  AND long BETWEEN ? AND ?
[16:50] <CasW> Ja, maar omdat het de 2d ruimte van het oppervlak van de aarde beschrijft, is het handiger om het om te rekenen naar de punten in de 3d ruimte
[16:50] <Rachelle> het gaat alleen om NL ;) de kromming van de aarde is verwaarloosbaar
[16:50] <lordnoid> Rachelle als je dat gebruikt heb je een (bijna) vierkant
[16:50] <CasW> Dat beschrijft (ongeveer) een vierkantje
[16:50] <CasW> Precies, dat dacht ik ook
[16:51] <Rachelle> een vierkantje is voor mij ook prima. het gaat ten slotte om een ruwweg schatting van alles wat in range ligt
[16:51] <lordnoid> maar 1,4x zo veel? :P
[16:51] <Rachelle> het gaat er meer om van hoe kom ik van iets als dit : 150703.6272133817 414029.4914345219  naar die waardes
[16:52] <CasW> Je kan dus vrij simpel omrekenen naar poolcoordinaten en dan weet je dat de afstand ongeveer de straal van de aarde maal de hoek die je met het 0-punt maakt, is
[16:52] <CasW> https://en.wikipedia.org/wiki/Latitude#Latitude_and_coordinate_systems
[16:52] <CasW> (Het is wat wiskundig)
[16:52] <Rachelle> ja dat zie ik.  spul dat ik al ruim 10 jaar niet meer gezien heb
[16:53] <CasW> Wat je desnoods ook nog kan doen, is zoeken naar hoe groot die 'vakjes' van 1 lat bij 1 lon ongeveer zijn in Nederland en dat nemen als een schatting
[16:54] <Rachelle> vakjes? Ik heb nog nooit met die GPS coordinaten gewerkt he.  Ik herken ze net
[16:54] <lordnoid> het zijn dezelfde soort coordinaten als op je landkaart of wereldbol
[16:56] <CasW> Oké, latitudes zijn de 'horizontale' lijnen op de aardbol, longitudes zijn de 'verticale' lijnen op de aardbol. Omdat de aarde zo groot is, verschillen de groottes van de vakjes tussen 2 lijnen lat en 2 lijnen lon nog wel, maar als je kijkt naar alleen Nederland, verschilt dat niet zo heel erg, daar kan je dus een constante waarde aannemen zonder te veel detail te verliezen
[16:58] <Rachelle> 300KM op 40.000 is tenslotte niet veel
[16:59] <CasW> Nee, dat valt wel mee, dus daar kan je het wel ongeveer schatten
[17:00] <lordnoid> alleen het is wel de vraag of dit alles nou echt veel efficiënter gaat worden dan 1 simpele, constante tijd operatie op elke entry in de database :P
[17:01] <Rachelle> probleem daarmee : deze actie hangt aan het zoekveld en er is niet te zeggen hoeveel bedrijven er uiteindelijk in de database komen
[17:01] <lordnoid> je vervangt de ene where-clause door de andere
[17:01] <Rachelle> en ik ben niet onder de indruk van die server
[17:02] <Rachelle> gezien ie zelfs moeite heeft met concrete5 zonder de cache aan -_-'
[17:02] <lordnoid> je wasmachine zou 'm nog kunnen draaien :P
[17:03] <CasW> Je kan iets doen van dat je lokaal een lijst van alle coordinaten van alle bedrijven bijhoudt, en dat je daar de berekening op uitvoert, als je echt bang bent voor de prestaties van de server
[17:04] <Rachelle> " een lijst van alle coordinaten van alle bedrijven bijhoudt"  Die heb ik :)  Bij registratie zoek ik het adres op en sla dat op
[17:04] <CasW> Die heb je lokaal staan of op die sql server?
[17:04] <Rachelle> in de database van de server
[17:04] <Rachelle> maar dit moet ie dus live kunnen doen
[17:04] <Rachelle> klant => zoekpagina => stad + afstand => zoeken veilingen
[17:05] <CasW> Tsja, dan kan je nog steeds gewoon alle entries nemen en daarna pas de berekening uitvoeren, je kan de where-clause gebruiken (die echt niet veel tijd inneemt inderdaad) of je kan een afstandentabel bij gaan houden voor iedere stad in Nederland (die je kan kiezen)
[17:06] <Rachelle> de steden zijn vrij. is gewoon een tekstveld
[17:06] <CasW> Dus ik zou Ferwert in kunnen vullen, een klein dorpje in Friesland?
[17:06] <Rachelle> jup
[17:06] <CasW> Ja, dan valt die laatste optie af
[17:07] <lordnoid> Ik heb zo'n where-clause ooit geschreven.. kan kijken of ik m nog heb.. dacht dat ik m had weggegooid
[17:08] <Rachelle> weinig kans dat ie iets vind in zo'n gat, maar het kan wel
[17:09] <CasW> where (lat*convertLatToKilometers*lat*convertLatToKilometers+lon*convertLonToKilometers*lon*convertLonToKilometers) < 50*50, zoiets
[17:09] <Rachelle> al snap ik niet waarom ze uberhaupt die optie erin willen hebben.  Gezien je al kan filteren op provincie
[17:09] <lordnoid> ik had er een voor een cirkel gemaakt :P
[17:09] <CasW> Deze is voor een cirkel ;-)
[17:09] <CasW> x^2+y^2=r^2, heb je geen wortelfunctie nodig
[17:10] <lordnoid> hm.. maar die werkt niet overal op aarde dan
[17:10] <lordnoid> maar goed genoeg voor Rachelle dan inderdaad
[17:10] <CasW> Hm, hoezo niet? Als je de kromming van de aarde negeert wel hoor
[17:11] <lordnoid> oh.. dan lijkt ie misschien ook wel op die van mij
[17:11] <Rachelle> ik denk niet dat de kromming van de aarde van belang is voor dit stukje aarde van 200X350 km
[17:11] <lordnoid> ik had die formule van wikipedia wat omgegooid iig
[17:12] <Rachelle> Die klanten zijn dom
[17:12] <CasW> (Ik was alleen even vergeten lat en lon te normaliseren naar die plaats op aarde, vervang lat door (lat-latVanPlaatsWaarvanJeDeAfstandWiltWeten) en lon op dezelfde manier)
[17:12] <Rachelle> " al snap ik niet waarom ze uberhaupt die optie erin willen hebben.  Gezien je al kan filteren op provincie"
[17:13] <CasW> Och, voor de grensplaatsen of zo, het is best een logische. Gebruikers willen het vaak weten.
[17:16] <Rachelle> die provincies zijn niet hardcoded op die van NL ;) Niks houd je tegen om ook duitsland en belgie erin te zetten
[17:16] <Rachelle> provincie => id => foreign key van company tabel
[17:18] <Rachelle> ik voorzie ook een ander probleem : de API staat hier => http://geodata.nationaalgeoregister.nl/
[17:18] <Rachelle> FUP?
[17:19] <Rachelle> ik kan me niet voorstellen dat ze zo happig zullen zijn als een populaire site daar live aan hangt
[17:19] <lordnoid> wat voor site maak je eigenlijk?
[17:20] <Rachelle> bruiloft (en toebehoren) veilingen site
[17:20] <CasW> Tsja, dat is je baas z'n probleem, niet het jouwe ;-) Ik zou het wel even noemen, je zorgen, maar verder hoef je je er geen zorgen over te maken
[17:20] <Rachelle> klant bedoel je CasW
[17:20] <CasW> *Klant
[17:21] <lordnoid> denk dat ze met FUP meer bedoelen dat je niet duizenden requests aan je normale pagina's koppelt
[17:21] <lordnoid> als je een knopje maakt met "zoek waar ik ben" zal het vast niet erg zijn :)
[17:21] <Rachelle> gezien die zoekpagina redelijk de main landingspagina voor de veilingen is. (a la zoekpagina van ebay)..........
[17:22] <lordnoid> ah op die manier
[17:22] <lordnoid> zijn er geen open databases met al die info die je kan downloaden?
[17:22] <Rachelle> niet dat ik weet
[17:22] <CasW> En misschien kan je zelfs om de zoveel tijd een lokale kopie maken van de database om daarop te werken
[17:25] <lordnoid> google maps api doet het geloof ik ook
[17:25] <Rachelle> jup maar die is daar ook niet happig op
[17:25] <Rachelle> als je die zo misbruikt
[17:26] <Rachelle> hmmm dit voldoet wel. niet druk over maken :
[17:26] <Rachelle> http://www.geodatasource.com/developers/php
[17:26] <lordnoid> ik heb ooit wel zo'n postcode => coordinaten database gezien.. ze zijn er wel..
[17:27] <Rachelle> gewone search => resultaten => matchen tegen GPS
[17:28] <lordnoid> Rachelle ik kan later vanavond bij de server waar mijn query waarschijnlijk op staat dus die stuur ik je nog wel na
[17:28] <lordnoid> heb je een pure SQL oplossing, klinkt leuker
[17:31] <Rachelle> niet nodig lordnoid ;) maar bedankt voor het aanbod
[17:31] <Rachelle> wil niet te veel tijd hieraan verdoen (botert niet zo tussen mij en die klant)
[17:31] <Rachelle> maar hoor dat vriendinlief roept voor het eten. tot straks
[17:32] <lordnoid> klant is onderdaan :P tot zo
[18:49] <Rachelle> klanten zijn irri
[19:28]  * Rachelle geeft overheid een schop
[19:28] <Rachelle> die coordinaten wat die API terug krijgt zijn geen lat/long!
[19:31] <lordnoid> wat dan?
[19:32] <Rachelle> EPSG:28992
[19:32] <Rachelle> raar systeem van de NL overheid
[19:33] <Rachelle> of te wel : onbruikbaar
[19:36] <Rachelle> hmmm wellicht niet, maar geen zin in veel rekenwerk met cirkels.  Ik weet al hoe ik moet rekenen
[19:41] <Rachelle> is gewoon stelling van pietje
[19:42] <lordnoid> oh ja heb ik ook weleens gehoord dat ze een soort x/y coordinaten hanteren bij de overheid
[19:42] <lordnoid> rare mensen
[19:44] <Rachelle> uhu
[19:44] <Rachelle> public function calcEPSGDistance($fl_latStart, $fl_longStart, $fl_latDestination, $fl_longDestination){
[19:44] <Rachelle> 		if( $fl_latStart > $fl_latDestination ){
[19:44] <Rachelle> 			$fl_lat = ($fl_latStart - $fl_latDestination);
[19:44] <Rachelle> 		}
[19:44] <Rachelle> 		else {
[19:44] <Rachelle> 			$fl_lat = ($fl_latDestination - $fl_latStart);
[19:44] <Rachelle> 		}
[19:44] <Rachelle> 		
[19:44] <Rachelle> 		if( $fl_longStart > $fl_longDestination ){
[19:45] <Rachelle> 			$fl_long = ($fl_longStart  - $fl_longDestination);
[19:45] <Rachelle> 		}
[19:45] <Rachelle> 		else {
[19:45] <Rachelle> 			$fl_long = ($fl_latDestination - $fl_longStart);
[19:45] <Rachelle> 		}
[19:45] <Rachelle> 		
[19:45] <Rachelle> 		$fl_distance = sqrt( ($fl_lat*$fl_lat) + ($fl_long*fl_long));
[19:45] <Rachelle> 		return $fl_distance;
[19:45] <Rachelle> 	}
[19:45] <Rachelle> done
[19:45] <Rachelle> tenminste.  *twijfelt*
[19:46] <Rachelle> rare overheid
[19:51] <Rachelle> heb het volgens mij
[19:51] <Rachelle> Amsterdam - DB
[19:51] <Rachelle> 0 KM => niks, 50KM => niks, 100 KM => 3 veilingen
[19:53] <Rachelle> ^_^