Prawdopodobnie powinieneś reprezentować kraje/miasta jako wielokąty w DB, a następnie użyć funkcji przecinania wielokątów w stylu OpenGIS do przecięcia.
Ale , MySQL nie poprawnie zaimplementuj przecięcie wielokątów (tylko MBR — Minimalny prostokąt graniczny). Tak więc to podejście, choć teoretycznie poprawne, po prostu nie zadziała w przypadku MySQL. Możesz rozważyć przejście do Postgres.
To, co możesz zrobić, to wykorzystać możliwości przecinania się bazy danych MBR i uzupełnić je własnym kodem, który wykonuje przecięcie wielokąta/punktu (możesz znaleźć biblioteki, które to robią).