簡體   English   中英

使用Geonames.org下載使用什么算法進行反向地理編碼?

[英]What algorithm is used for Reverse Geocoding using Geonames.org downloads?

我會使用API​​ Geonames,但我的應用程序將無法訪問互聯網。 所以它必須獨立運行。 我看到有很多來自Geonames.org的文件要下載,但我沒有看到任何軟件可以幫助我們進行反向地理編碼。 我想提供lat / lon並讓它返回國家代碼。 我正在考慮下載數據並將其放入MySQL數據庫。

反向地理編碼使用什么算法,因此我可以使用geonames.org下載來使用它。 我的項目是用PHP編寫的。 謝謝!

Geonames為大多數國家/地區提供數據。 這些數據可以導入MySQL數據庫。 可以使用lat lng搜索。

問題是文件中的數據可能太多,無法滿足您的要求。 您可以刪除所有所需國家/地區除lat,lng和國家/地區代碼之外的所有字段,然后將它們合並為1條記錄。

MySQL查詢

SELECT country code FROM XX WHERE lat BETWEEN 55 AND 55.5 AND lng BETWEEN -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

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

希望這可以幫助!

您正在尋找的算法更多的是數據結構,然后是復雜的公式。 Mysql支持R樹和空間​​索引查詢。 該概念是一個分層樹,其中lat長對作為邊界框,樹的根在邊界框中具有整個世界。 Kd樹也可以。 在極少數情況下,您需要查找四元組或空間填充曲線。 這是一個分形,並將維度減少到一個數字。 公式為H(x,y)= H(x)+ H(y)。 分形也預先設置了一些接近度信息,我不知道它是如何用R樹解決的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM