使用任何开源的位置的纬度和经度

时间:2013-03-06 11:00:54

标签: javascript perl api

如何检索位置纬度和经度。

输入:用户输入位置名称。

输出:用户输入的位置的纬度和经度。

需要注意的一点:

  

它必须是免费的(不像谷歌。)并且还支持超过20个   每天有数百万的请求。解决方案可以是任何类型   在线(api,javascript)或离线(文本,.csv文件)

已经通过Mapquest,openstreet地图服务,但在Mapquest的情况下,他们需要钱,如果openstreet限制是查询的数量

我正在寻找一个解决方案,比如使用mapquest中的地图图块,使用传单javascript或openlayer javascript将查询发送到mapquest服务器,这是我的搜索免费但问题是请求地图我们需要给他们的位置(地理位置的地理代码)的纬度和经度,在此基础上他们提供维护数据库的瓷砖这是不好的步骤,因为在位置的基础上有很多地方有相同的世界各地的名字..但我们需要与谷歌比较相同或约90%正确的地理位置的地理代码。


2 个答案:

答案 0 :(得分:5)

OpenStreetMap的

或者您可以使用openstreetmap数据。 They have a worldwide database with it, all 23G of it

您可以下载所有内容并根据需要使用它。

您可以使用Geo::Parse::OSM来解析从openstreetmap获得的23千兆字节的OSM文件。

Ad-hoc解决方案

如果您想按位置lat / long进行地理编码,我建议您制作一个table in Postgresql and do some spatial indexing。您可以在该表中输入Maxmind在其数据库中的所有内容(参见下文),或者您可以将数据放入Openstreetmap(参见下文)。然后,您可以在该表上快速搜索。 Postgresql可能有一个quadtree数据结构或类似的东西,可以让它轻松搜索该表中的条目。

表中的

Here is another presentation that tells you how you can spatially index your data以及您可以对其执行哪些类型的查询。 这是一个例子:

create table pubs (name varchar,beer_price float4);
addgeometrycolumn(‘beer_db’,'pubs','location’,2167,'POINT',3);
insert into pubs values ( 'Garricks Head', 4.50, 
     GeometryFromText( 'POINT (1196131 383324)’   ,2167));

select name, beer_price, 
distance(location, GeometryFromText('POINT(1195722 
383854)',2167)) 
from pubs order by beer_price;

  name           | beer_price |     distance     
  ---------------+------------+------------------
  Fireside       |       4.25 | 1484.10275160491
  The Forge      |       4.33 | 1533.06561109862

你可能遇到另一个问题,即lat / long究竟是什么意思,因为城市可能是一个点,一个圆圈或一个多边形,具体取决于你如何定义它。 也许你想要从一个城市的纬度/长度开始的某个半径内的点。

的MaxMind

我想这取决于你所说的位置。如果您正在谈论城市,国家,州,邮政编码,areacode,那么使用Maxmind web service。在该链接中,您可以找到有关查询Maxmind的信息。但是你需要一个可以从他们那里购买的许可证密钥。

他们也有C API for querying that service

或者,对于离线使用,您可以get their free offline Maxmind db

Google地图

如果您想在街道级别I suggest you use Google Maps API进行地理定位。 如果您想要执行这么多请求,您将需要一个您必须支付的API密钥。

他们还有一个商业软件包,you can see the detailed comparison here。它们允许您每天查找100,000个地址。

答案 1 :(得分:1)

打开街道地图。一张免费的世界地图。 数据可免费下载(与谷歌不同),并在其开放许可下使用。

This将震撼你的世界:)