Что я бы порекомендовал:
- Получите данные из Open Street Maps, лицензия подразумевает, что вы упоминаете источник. Есть некоторые выдержки из OSM для некоторых стран, я не знаю, есть ли уже сделанные для некоторых городов, но я думаю, что это может быть достигнуто с вашей стороны.
[EDIT]
Например, вы можете загрузить данные из http://www.openstreetmap.org, просто перейдите на вкладку экспорта, выберите формат XML-данных Open Street Map и экспортируйте данные: вы получите данные OSM для выбранного ограничивающего прямоугольника.
Еще некоторые данные можно загрузить из облачного хранилища: http://downloads.cloudmade.com/
- Затем импортируйте эти данные в базу данных sqlite. Затем создайте пространственный индекс из этой базы данных sqlite с географической информацией: такого можно достичь, используя Пространственный (Пространственный - очень хорошее расширение ГИС для Sqlite)
[EDIT] Spatialite предоставляет инструмент с графическим интерфейсом для создания пространственной базы данных из различных форматов источников данных. Инструмент можно скачать в двоичном формате здесь: http://www.gaia -gis.it /atialite-2.4.0-4 / binaries.html (пространственный_гуй) тот, который лучше всего поддерживает файлы .osm.
Еще один хороший ресурс - QGis для визуализации данных OSM / создания пространственной БД. Это бесплатно / с открытым исходным кодом и очень зрелый:
http://www.qgis.org/
- как только вы это сделаете, вы сможете реализовать базовый геокодер, потому что пространственный объект реализует такие функции, как «дать мне самую близкую линию к этой координате GPS» (базовая функция ГИС).
Это очень грубые линии. Я могу вдаваться в более глубокие детали, если вы заинтересованы в таком подходе: я достиг этого на своей стороне. Я знаю, как скомпилировать пространственный объект для iOS (это заняло у меня некоторое время ....), а также как импортировать данные OSM и создавать для них пространственные индексы.