Elke rij waarden bij invullen uit het functie resultaat van waarden uitdezelfde rij
Ik kom niet uit het volgende. Mocht iemand me even kunnen helpen, bedankt.
Ik wil waarden zetten in rijen van mijn tabel die gegenereerd worden uit waarden uitdezelfde rijen. Hier gebruik ik de PHP functie getting_the_closest(53.2045314315038,5.77743964367885); voor die resulteert in dit voorbeeld als output: 391.28,53.206656065508,5.7821233028534
Ik gebruik deze functie om de waarden uit de kolommen lat en lng van elke rij in te lezen.
Zegmaar als voorbeeld:
lat lng
53.2045314315038 5.77743964367885
De output van deze functie wil ik in dezelfde rij krijgen gezet in de kolommen meters_closest lat_closest lng_closest zoals in dit voorbeeld.
Zegmaar:
meters_closest lat_closest lng_closest
391.28 53.206656065508 5.7821233028534
De waarden in lat en lon staan dus al vast en de overige rijen van mijn kolommen meters_closest, lat_closest en lng_closest moeten dus gevuld worden met de berekening die getting_the_closest maakt met input van waarden uit elke zelfde rij van de table1. Het is de bedoeling dat ik alle rijen in de tabel table1 zo gevuld krijg.
Bedankt,
grid
Gewijzigd op 30/10/2019 15:23:01 door Leeuwarden Friesland
En kan het ook niet voorkomen dat een specifieke lat, lng combinatie meerdere "closest" coordinaten heeft? Dus misschien zou je een aparte "closest" tabel moeten introduceren voor een-op-veel relatie?
Nou, gezien de precisie van lat/lon ga er vanuit dat er altijd 1 de closeste is. Misschien scheelt het maar een mm, maar dan heeft ie toch gewonnen ;-)
https://www.geodatasource.com/developers/php Ik gebruik mysql meestal gewoon vanuit navicat of phpmyadmin voor dit soort dingen. Alleen ik ben nu afhankelijk van de functie waarbij ik ook PHP nodig heb.
Ik heb uiteraard wel een database verbinding en mogelijkheid voor queries te maken enzo. In dit geval PDO maar alles is welkom.
Ik heb niet de ervaring om de rijen door te lopen en op te vullen. De functie getting_the_closest heb ik al in PHP geschreven. Dit is een aangepaste versie van Ik heb uiteraard wel een database verbinding en mogelijkheid voor queries te maken enzo. In dit geval PDO maar alles is welkom.
Code (php)
1
2
3
4
2
3
4
require("../googlemaps/data/database.php");
$db = new PDO( "mysql:host=" . $servername . ";dbname=" . $database, $username, $password );
$results = $db->query("")->fetchAll(PDO::FETCH_ASSOC);
$db = new PDO( "mysql:host=" . $servername . ";dbname=" . $database, $username, $password );
$results = $db->query("")->fetchAll(PDO::FETCH_ASSOC);
Gewijzigd op 30/10/2019 16:17:48 door Leeuwarden Friesland
Idealiter refereer je aan dit record via een (intern auto-increment) id, en niet de specifieke lat-lon waarden.
Stel echter dat je de coordinatenparen A, B en C in je database hebt zitten.
Vervolgens heb je een paar X, waarvan je wilt weten of deze het dichtst bij A, B of C ligt. Hier komt bijvoorbeeld B uit. Maar nu heb je een ander paar Y, verschillende van X, waarbij de uitkomst ook B is. Wordt X dan door Y vervangen als Y dichterbij is, of zijn beide resultaten relevant en zul je dus de mogelijkheid moeten hebben om meerdere paren op te hangen aan B?
Rob Doemaarwat op 30/10/2019 16:11:29:
Nou, gezien de precisie van lat/lon ga er vanuit dat er altijd 1 de closeste is. Misschien scheelt het maar een mm, maar dan heeft ie toch gewonnen ;-)
Zeg nooit nooit :). En wie zegt dat een verschil onder, ik zeg maar wat, de vijf(tig) meter inhoudt dat beide coordinaten "gelijkwaardig" zijn? Als dit bijvoorbeeld bushaltes en openbare toiletten zijn ofzo, dan zijn beide relevant, en maakt het niet zoveel uit welke je kiest. Je sluit dan in ieder geval niet op voorhand een keuze uit.
Gewijzigd op 30/10/2019 16:38:52 door Thomas van den Heuvel
Gewijzigd op 30/10/2019 17:01:16 door Leeuwarden Friesland
Gewijzigd op 30/10/2019 17:15:41 door Thomas van den Heuvel
Gewijzigd op 30/10/2019 17:18:45 door Leeuwarden Friesland
Zolang je niet aangeeft wat dit alles zou moeten doen kunnen we je met geen goed fatsoen adviseren wat te doen. Hierbij helpt het dus om een (zo) volledig (mogelijk) plaatje te schetsen, anders wordt het zo'n schaakspel om informatie los te peuteren.
Ik kijk in eerste instantie naar aanpak, en geef niet zomaar een directe "oplossing", simpelweg omdat het heel vaak niet vaststaat of het wel een oplossing is, of dat de ingeslagen oplossingsrichting uberhaupt een juiste/slimme is.
Met de onvolledige informatie die ik nu hebt lijkt het er op dat de database nog niet helemaal (of helemaal niet) uitgenormaliseerd is, of die functie getting_the_closest() moet informatie vissen uit een andere tabel waar we geen weet van hebben.
En als je dan verbanden hebt tussen informatie in verschillende tabellen, dan lijkt het mij het beste om deze verbanden echt vast te leggen in (foreign) keys / constraints, zodat je uiteindelijk ook echt een relationele database hebt, in plaats van tabellen die als los zand aan elkaar hangen via coordinatenparen.
Code (php)
1
2
3
2
3
select * from tabel
order by power(lat - :lat_kantoor,2) + power(lon - :lon_kantoor,2)
limit 10
order by power(lat - :lat_kantoor,2) + power(lon - :lon_kantoor,2)
limit 10
Gewijzigd op 31/10/2019 11:28:38 door Rob Doemaarwat