laad coördinaten vanuit de database die binnen de grenzen van de kaart vallen

Ik moet een reeks gefilterde records uit de database retourneren die de coördinaten binnen de grenzen van de huidige kaarten bevinden (map.getBounds ())

Volgens Google Maps API v3 is dit mogelijk om client-kant te doen met behulp van hun api en de functie "containsLatLng (latlng: GLatLng)", maar ik wil deze implementatie aan de serverzijde uitvoeren en dan alleen de records teruggeven die binnen deze coördinaten vallen .

Mijn huidige implementatie werkt als kaart gecentreerd is in Afrika, maar als de kaart China en Canada in dezelfde weergave toont, werkt mijn implementatie niet omdat de lengtegraad van positief naar negatief in de Stille Oceaan keert.

Eventuele suggesties over hoe dit nauwkeurig te implementeren?

2
@RobHaupt. Precies, dat is het probleem eigenlijk! Ik zal de polylijn gebruiken om te zien of het de grenzen daadwerkelijk weggooit.
toegevoegd de auteur byte_slave, de bron
Geen expert hierover, dus ik geef liever commentaar dan antwoord, is het probleem dat de lengtegraad van positief naar negatief gaat in de pacific? Dat zou dan de grenzen verleggen.
toegevoegd de auteur Rob Haupt, de bron

1 antwoord

In Google Maps neemt de LatLngBounds-objectconstructor de hoeken in het zuidwesten en noordoosten van de rechthoekige grenzen.

Wetende dat een punt de zuidwestelijke hoek is en niet de zuidoosthoek is cruciaal voor het oplossen van het probleem.

Als je weet dat een punt de zuidwestelijke hoek is en de andere de noordoostelijke hoek, vergelijk dan de lengtegraden van de twee hoeken. Uw algoritme werkt als volgt:

  • Als de lengtegraad van de zuidwesthoek minder is dan de lengtegraad van de noordoostelijke hoek, dan ligt een punt binnen de grenzen als het een lengtegraad heeft tussen die twee lengtegraden en een breedtegraad tussen de twee breedtegraden van de hoeken. (Dit is waarschijnlijk wat je doet voor alles, daarom werkt het in Afrika waar de conditie waar is, maar niet in iets dat de Stille Oceaan overspant.)

  • Als de lengtegraad van de zuidwesthoek groter is dan de lengtegraad van de noordoostelijke hoek, dan overschrijdt je lengte 0 lengtegraad en moet je de voorwaarde omkeren: een punt is binnen de grenzen als het heeft een lengtegraad die niet is tussen de lengtegraad van de zuidwesthoek en de lengtegraad van de noordoostelijke hoek.

Voor de eenvoud en omdat het bijna zeker waar is, neem ik aan dat je nooit een grens zult hebben die de Noordpool of de Zuidpool bedekt. (In Google Maps weet ik niet eens of u kunt dergelijke grenzen hebben.)

3
toegevoegd