【发布时间】:2017-07-25 23:38:02
【问题描述】:
我试图从我的本地立交桥 API 获取 OSM 数据。获取 OSM 数据有四个步骤。
- 运行二进制文件
/srv/osm3s/bin/osm3s_query - osm3s_query 运行后,您将看到此消息
encoding remark: Please enter your query and terminate it with CTRL+D. - 输入您的查询
<query type="node"><bbox-query n="51.0" s="50.9" w="6.9" e="7.0"/><has-kv k="amenity" v="pub"/></query><print/> - 按 ctrl+D 并获取 OSM 结果
我的代码如下:
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("/srv/osm3s/bin/osm3s_query");
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ( (line = br.readLine()) != null)
System.out.println(line);
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t)
{
t.printStackTrace();
}
在显示消息encoding remark: Please enter your query and terminate it with CTRL+D. 后,进程将挂起第 2 步。我不知道如何为进程提供查询字符串。
有人有想法吗?
【问题讨论】:
-
你有进程的输入流。也可以获取输出流。
-
您应该将查询写入输出流。
-
根据
Process的 Javadoc:“从 1.5 开始,ProcessBuilder.start() 是创建流程的首选方式。”
标签: java process centos overpass-api