我刚买了一台谷歌Nexus One智能手机,我想写一个小型Android应用程序以获得乐趣。假设我可以获得当前的GPS坐标,那么我如何能够以编程方式在某个半径范围内找到附近的地标或兴趣点?是否有API可以获取GPS地理标记的地标,例如Google地球的数据库?
例如,如果我在芝加哥市中心,我的节目会指向我在该城市参观的所有“旅游”事物。
理想情况下,它会在我的智能手机上运行,但如有必要,我可以让智能手机查询网络服务器,然后运行更多查询。
答案 0 :(得分:4)
取决于您从哪里获取地标数据。如果您想进行网络查询,可以使用上述内容之一运行。
或者 - 如果您有自己的数据,可以使用lat和lon值将其存储在db中,然后为查询形成边界矩形。这个问题告诉你如何计算一个覆盖当前点周围给定半径的边界框(它将是一个框,因此它将大于一个圆....
How to calculate the bounding box for a given lat/lng location?
使用边界框,您现在可以从数据库where lat < maxlat and lat > minlat and lon > minlon and lon < maxlon
执行查询,该查询将在框中为您提供所有兴趣点。
然后,使用Android api中的Location类,您可以计算每个匹配的方位和距离,然后您可以从您的位置按半径排序。
答案 1 :(得分:2)
最快的方法是:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:0,0?q=business+near+city");
startActivity(intent);
在geo之后你放置了你的坐标,在q =之后输入你的搜索泪,比如旅游+城市。这将启动带有兴趣点的Google地图应用。
如果要在应用程序中使用地图视图,则需要从某些服务获取数据,例如您自己的数据。但是你可以从Google的ajax搜索中提取数据,如下所示: http://ajax.googleapis.com/ajax/services/search/local?v=1.0&rsz=large&gl=pl&q=tourism+chicago 更多信息:http://code.google.com/apis/ajaxsearch/documentation/reference.html#_fonje_local 这将为您提供具有地理坐标的结果,您需要提供一种解析结果的方法,并可能将它们放入数据库中。
答案 2 :(得分:1)
您可能会看到的另一个Web服务是: http://developer.yahoo.com/geo/geoplanet/
答案 3 :(得分:1)
您可以使用的一个对开发人员友好的数据源是http://compass.webservius.com - 它是一个包含美国数百万商家信息的数据库,可以使用REST API轻松搜索坐标边界框。
答案 4 :(得分:1)
Foursquare有一个很棒的API,可以为您提供GPS坐标的商家和其他感兴趣的地方。不要求用户登录访问。 foursquare用户不断维护支持数据库。