Как лучше всего хранить и искать адрес? - PullRequest
0 голосов
/ 10 октября 2019

Я создаю сервис, где люди могут находить списки в зависимости от местоположения. Услуга предлагается в Германии, и местоположения там кажутся очень хитрыми.

Так как же текущая настройка?

В каждом списке я храню адрес, подобный этому, используя данные nominatim. Данные адреса основаны на zipCodes. Итак, я получаю zipCodes и вне этого храню этот адресный объект:

address: {
suburb: "Neukölln",
city_district: "Neukölln",
city: "Berlin",
state: "Berlin",
postcode: "12053",
country: "Deutschland",
country_code: "de",
lat: "52.4775104",
lon: "13.4322809163976",
displayName: "Neukölln, Berlin, 12053, Deutschland"
},

Затем пользователь во внешнем интерфейсе использует autosuggest на основе API komoot, который дает мне что-то в следующем формате:

city: "Berlin"
country: "Deutschland"
name: "Berlin"
osm_id: 240109189
osm_key: "place"
osm_type: "N"
osm_value: "city"
postcode: "10117"
state: "Berlin"

Как вы можете видеть, я могу искать сейчас с osm_value и именем. Поэтому я бы искал город: Берлин.

Теоретически это работает довольно хорошо. Но для больших городов, таких как Берлин, nominatim и komoot дают очень плохие результаты. Часто, когда город не указан, даже если есть город. (См. Эту проблему: https://github.com/openstreetmap/Nominatim/issues/1487)

Мой вопрос будет таким: как может выглядеть правильная структура данных, и есть ли у вас лучшая идея для ее построения? Платные услуги - это хорошо - я просто не нашел ни однойправильно (кроме чрезвычайно дорогих gmaps).

Требования: Поиск zipCode, city, city_district, village, town, county

Наличие примерно 300 тыс. геокодировок в месяц

...