使用Geonames.org下载使用什么算法进行反向地理编码?

时间:2012-09-26 10:38:31

标签: php mysql geonames

我会使用API​​ Geonames,但我的应用程序无法访问互联网。所以它必须独立运行。我看到有很多来自Geonames.org的文件要下载,但我没有看到任何软件可以帮助我们进行反向地理编码。我想提供lat / lon并让它返回国家代码。我正在考虑下载数据并将其放入MySQL数据库。

反向地理编码使用了什么算法,因此我可以使用geonames.org下载来使用它。我的项目是用PHP编写的。谢谢!

3 个答案:

答案 0 :(得分:3)

Geonames为大多数国家/地区提供数据。这些数据可以导入MySQL数据库。可以使用lat lng搜索。

问题是文件中的数据可能太多,无法满足您的要求。您可以删除所有所需国家/地区除lat,lng和国家/地区代码之外的所有字段,然后将它们合并为1条记录。

MySQL查询

SELECT country code FROM XX在{55}和55.5之间lat以及在{-2}之间lng -2    和-1.5

这将通过111kM的“Box”提取数据。您可以更改范围以适应。

从下表中可以看出111kM“盒子”仅在赤道(0°)有效。对于其他纬度,需要增加lng范围。

    lat                 lng
0°  110.574 km  111.320 km
15° 110.649 km  107.551 km
30° 110.852 km  96.486 km
45° 111.132 km  78.847 km
60° 111.412 km  55.800 km
75° 111.618 km  28.902 km
90° 111.694 km  0.000 km

答案 1 :(得分:2)

geonames downloads主要在.txt个文件中,这些文件可以通过SQLYog导入到mysql数据库中

表格结构

CREATE DATABASE geonames;
USE geonames;

CREATE TABLE geoname (
geonameid int PRIMARY KEY,
name varchar(200),
asciiname varchar(200),
alternatenames varchar(4000),
latitude decimal(10,7),
longitude decimal(10,7),
fclass char(1),
fcode varchar(10),
country varchar(2),
cc2 varchar(60),
admin1 varchar(20),
admin2 varchar(80),
admin3 varchar(20),
admin4 varchar(20),
population int,
elevation int,
gtopo30 int,
timezone varchar(40),
moddate date
) CHARACTER SET utf8; 

MYsql查询将数据导入此表

LOAD DATA INFILE '/path/to/your/file/geoname.txt' INTO TABLE `geoname`;

设置完毕后,您可以使用lat / long查询此表以获取国家/地区名称

以下是您可以参考的链接

http://sgowtham.net/blog/2009/07/29/importing-geonames-org-data-into-mysql/

http://forum.geonames.org/gforum/posts/list/732.page

希望这有帮助!

答案 2 :(得分:1)

您正在寻找的算法更多的是数据结构,而不是复杂的公式。 Mysql支持R树和空间​​索引查询。该概念是一个分层树,其中lat长对作为边界框,树的根在边界框中具有整个世界。 Kd树也可以。在极少数情况下,您需要查找四元组或空间填充曲线。这是一个分形,并将维度减少到一个数字。公式为H(x,y)= H(x)+ H(y)。分形也预先设置了一些接近度信息,我不知道它是如何用R树解决的。