使用PostGIS进行反向地理编码的最佳方法是什么?


13

有没有办法使用PostGIS进行反向地理编码?网络上有很多信息,但是我发现它非常令人困惑...

我已将PostGIS数据库中的osm数据导入到自己的Postgres中。现在,我想对数据库进行地理编码和反向地理编码。我不知道是否有一些存储过程,或者某个项目可以解决我的问题。

我要做的下一步是制作一个可以处理这种请求的Web服务,但这是另一个问题。


在此站点上搜索反向地理编码时,会有一些结果。脱颖而出的一个答案是这一个关于提供IT服务。
dassouki 2011年

您的问题有点含糊。您有什么特别的问题吗?还是您需要有关反向地理编码的一般方法的帮助?
肖恩

我已经尝试过使用Nominatim,但是在使用“地名词典”输出时遇到了问题。每次导入osm数据时,都会引发“分段错误”。
华金中号

Answers:


14

最后,我了解了使用PostGIS数据库进行地理编码和反向地理编码的方法。我创建了一个存储过程,该过程查找点附近的几何类型。此存储过程使用距离函数获取最近的点。之后,我创建了一个RESTful API,该API调用此存储过程来解决反向地理编码请求。

如果我错了,请纠正我,但我知道Nominatim项目为从OSM导入的数据库创建了一个API。因此,您不必为反向地理编码和地理编码创建任何存储过程。另外,您不必进行任何Web服务即可通过Web解决请求。

希望这对某人有帮助。

CREATE OR REPLACE FUNCTION reverse_geocode (lat double precision, lon double precision)
RETURNS text AS 
$BODY$ 
declare  point geometry;  rec record;  geocode text; 
begin  
    point := geomfromtext('POINT('||lat||' '||lon||')', 4326);  
    select name, distance(way, point) as dist  
    into rec  from mapserverdb_point  
    order by dist asc limit 1;  
    geocode := rec.name;  
    return geocode; 
end; 
$BODY$   
LANGUAGE plpgsql; 

我们可以看一下程序吗?
canisrufus 2011年

当然: CREATE OR REPLACE FUNCTION reverse_geocode(lat double precision, lon double precision) RETURNS text AS $BODY$ declare point geometry; rec record; geocode text; begin point := geomfromtext('POINT('||lat||' '||lon||')', 4326); select name, distance(way, point) as dist into rec from mapserverdb_point order by dist asc limit 1; geocode := rec.name; return geocode; end; $BODY$ LANGUAGE plpgsql;
华金中号

4

PostGIS 2.0 Tiger地理编码器具有使用Tiger数据的反向地理编码器。地理编码器可以在PostGIS 1.5 8.4+或更高版本上很好地安装。

如果您在美国,可能是最容易使用的,因为它们都打包为plpgsql函数。

http://www.postgis.org/documentation/manual-svn/Extras.html#Tiger_Geocoder http://www.postgis.org/documentation/manual-svn/Reverse_Geocode.html


谢谢。我不需要美国信息即可获取反向地址。现在,我已经了解了反向地理编码与PostGIS数据库一起工作的方式。非常感谢。
华金中号
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.