Где получить координатные границы городов?
Чтобы получит полигоны городов из OpenStreetMap можно воспользоваться overpass-turbo.eu (api сайта заблокирован, используйте VPN)
Запрос для Московской области:[out:xml];

area
  (area.region)
  ["boundary"="administrative"]
  ["name"="Московская область"]
->.a;

(
  node
  	(area.a)
  	["place"~"city|town"];
  way
  	(area.a)
  	["place"~"city|town"];>;
  relation
  	(area.a)
  	["place"~"city|town"];>;
)->.b;
.b out meta qt;
Результат можно экспортировать в geojson. Эти данные о полигонах загружать в свою базу и там искать. 
Ограничения бесплатного сервера не позволят сделать запрос на всю страну, континент, планету. 
Для этого нужно арендовать сервер, установить в него докер Overpass, импортировать данные OpenStreetMap для планеты или меньших частей и уже свой сервер нагружать запросами.
Если требуется искать ближайший центр населённого пункта, то есть ответ на похожий вопрос. Это задача поиска ближайшего соседа. Есть готовые архивы с координатами населенных пунктов.
Ответ одновременно очень простой и очень сложный: openstreetmap.org
Для городов (в основном) там есть границы. Вытащить их можно, например, загрузив планету в постгрес. Или еще несколькими способами. #switch2osm