Geocodificación a una forma en lugar de un punto
El proyecto en el que estoy trabajando actualmente es Find-A-Record . Estamos geocodificando colecciones de registros genealógicos y almacenándolos en un índice espacial (explore nuestro blog si desea obtener más información). Las búsquedas se basan en una forma. Devolvemos colecciones que se cruzan o están contenidas dentro del área de búsqueda.
Durante los primeros estados de desarrollo, utilizamos geonames para geocodificar colecciones hasta cierto punto. Esto funciona bien para colecciones que están asociadas con niveles administrativos más bajos, como ciudades, pueblos y aldeas. Sin embargo, realmente se descompone cuando obtienes el nivel de condado, estado y país.
El censo estadounidense de 1940 está asociado con los Estados Unidos y se le asignaría un punto en el norte de Kansas. Cualquier consulta dentro de los Estados Unidos que no esté cerca de ese punto no devolverá el Censo de los Estados Unidos de 1940.
Para resolver esto, necesitamos geocodificar colecciones con una forma en lugar de un punto.
OSM
OpenStreetMaps tiene los datos que necesitamos, pero es extremadamente difícil de extraer. La jerarquía administrativa no se almacena explícitamente. Nominatim se utiliza para resolver este problema para OSM. Una búsqueda de Nominatim solo devuelve características. Entonces, una consulta para Knighton en Teme devuelve dos paradas de autobús, pero no la relación de límite administrativo.
La API Overpass parecía prometedora, pero no puede hacer coincidencias de cadenas difusas. Overpass solo puede hacer coincidencias exactas o expresiones regulares. Podríamos usar Overpass si hubiera una manera fácil de estandarizar los nombres de lugares. En otras palabras, si OSM nos proporcionó una manera de estandarizar "Knighton on Teme, Worcestershire, Inglaterra" a "Knighton on Teme CP, Malvern Hills, Worcestershire, West Midlands, Inglaterra, Reino Unido" de acuerdo con la jerarquía OSM, entonces una cadena difusa la correspondencia no sería necesaria.
Resumen
Lo que necesitamos es un servicio que nos permita realizar búsquedas de cadenas difusas para un lugar (o nivel administrativo) y recuperar sus límites.
Reconocemos que será difícil obtener datos de límites para todo el mundo. Afortunadamente, probablemente no lo necesitemos pronto. Solo necesitamos datos para las áreas del mundo donde existen registros genealógicos y los genealogistas investigan.
Parece que necesitaremos construir nuestro propio servicio que indexe OSM de tal manera que nos permita consultar los límites administrativos. Pero realmente preferiríamos no hacerlo. ¿Hay alguna otra forma de recuperar estos datos con los servicios existentes?
También estoy trabajando con nombres de lugares globales y datos de límites (incluidos los históricos) en este momento, ¡así que entiendo por lo que estás pasando!
Sin embargo, creo que realmente hay dos pasos para su problema: 1. use una búsqueda de nombres difusos para convertir el nombre de un área de administración en algo estándar, luego 2. busque los límites de ese lugar en las bases de datos de límites. En lugar de tratar de encontrar datos que también tienen una búsqueda difusa.
WeRelate Places podría ayudar con el paso 1 para los nombres de lugares antiguos, y muchos otros geocodificadores como los que ya usa pueden estandarizar los nombres modernos.
El paso 2 es realmente difícil en la actualidad, ya que gran parte de los datos de límites adecuados están bajo una licencia no comercial (o peor), especialmente para datos históricos. Un punto de partida para los países y los niveles de administración 1 es Natural Earth .
Luego están las fuentes nacionales para las divisiones administrativas inferiores, que se extraen de los datos del gobierno abierto, como USGeoJSON y uk-atlas . Nada de lo que tenga conocimiento es realmente de alcance global.
Tenga cuidado de rastrear la procedencia de los datos y la licencia, una restricción no comercial es muy común, por ejemplo para GADM , Visión de Gran Bretaña y Atlas (Estados Unidos) de límites históricos del condado .
fuente
Su consulta de Nominatim incluye un
place_id
campo que tiene el valor 4828147 en su ejemplo. Este campo sirve como un identificador interno para Nominatim (por lo que no es globalmente único). Pero se puede usar para ver la jerarquía de direcciones internas de Nominatim para este lugar . Esta jerarquía también contiene relaciones de límites, por ejemplo, la relación 1875245 y varias otras.Al recorrer esta lista y mirar la
admin_level
clave, debería ser posible encontrar la relación que está buscando. Lamentablemente, esta página especial aún no parece estar disponible a través de una API.fuente