【发布时间】:2013-03-30 14:06:08
【问题描述】:
为了研究,我们必须开发一款基于位置的 Android 游戏。目前我们使用 OSMDroid 来显示地图。玩家必须收集一些资源(如木头、石头……)。这些资源当前以硬编码的 long/lat 存储在我们的后端,并将通过 setMarker 添加到当前地图上。 为了在全球范围内提供这款游戏,我们希望根据“真实”世界动态设置资源。所以我们需要来自 OSM 的不同层(如森林、海洋等)来自动设置我们的资源,而无需询问我们的后端。 在用谷歌搜索几个小时后,我发现 Overpass API 似乎可以帮助我实现这个功能。但我找不到任何在 Android 中使用 Overpass API 的教程。我尝试了一些东西,但我不明白......所以我需要你的帮助,请给我一个例子或解释如何实现这个:/
这是我当前的代码,但我认为这不正确..
URL url = new URL("http://overpass-api.de/api/interpreter");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
inputStream.close();
以下异常将在InputStream inputStream = urlConnection.getInputStream();: 处抛出:
W/System.err(3958): java.io.FileNotFoundException: http://overpass-api.de/api/interpreter W/System.err(3958):在 libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177) W/System.err(3958):在 de.htw.berlin.games.based.location.gui.MapActivity$test.doInBackground(MapActivity.java:536) W/System.err(3958):在 de.htw.berlin.games.based.location.gui.MapActivity$test.doInBackground(MapActivity.java:1) W/System.err(3958):在 android.os.AsyncTask$2.call(AsyncTask.java:287) W/System.err(3958):在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) W/System.err(3958):在 java.util.concurrent.FutureTask.run(FutureTask.java:137) W/System.err(3958):在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) W/System.err(3958):在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) W/System.err(3958):在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) W/System.err(3958): 在 java.lang.Thread.run(Thread.java:856)
感谢所有有用的回复:)
【问题讨论】:
标签: android osmdroid openstreetmap