阅读 Open Street Map xml 响应

Posted

技术标签:

【中文标题】阅读 Open Street Map xml 响应【英文标题】:Read Open Street Map xml response 【发布时间】:2021-11-28 17:54:48 【问题描述】:

尝试从 Open Street Map 网页读取数据。我有经度和纬度。基于这些网页链接生成。

假设输出是: https://nominatim.openstreetmap.org/reverse?format=xml&lat=48.927834&lon=16.861641&zoom=18&addressdetails=1

如何阅读网页内容?我已经尝试过了,但在result 中没有得到任何信息。

  string urlString = "https://nominatim.openstreetmap.org/reverse?format=xml&lat=48.927834&lon=16.861641&zoom=18&addressdetails=1";

  HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(urlString);
  myRequest.Method = "GET";
  WebResponse myResponse = myRequest.GetResponse();
  StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
  string result = sr.ReadToEnd();
  sr.Close();
  myResponse.Close();

获取:

抛出异常:System.Net.Requests.dll 中的“System.Net.WebException” 抛出异常:“System.Net.WebException”在 System.Private.CoreLib.dll

我的目标是解析xml:

  // Loading from a file, you can also load from a stream
  XDocument xml = XDocument.Parse(result);

  // Query the data and write out a subset of contacts
  IEnumerable<string> query = from c in xml.Root.Descendants("addressparts")
              select c.Element("road").Value + " " +
                     c.Element("house_number").Value;

【问题讨论】:

异常详情是什么? 你写的是你得到了一个 WebException。 好吧,异常被抛出,但你没有捕捉到它,方法以那个异常结束。在方法中加入 try/catch 或在 Visual Studio 的异常设置窗口中检查所有 CLR 异常类型。 @Steeeve 添加了详细信息 @Steeeve 发布的解决方案似乎有效。也许您可以将其添加为答案 【参考方案1】:

您必须在请求中提供有效的用户代理,否则请求将被阻止。来自当前Nominatim Usage Policy:

提供一个有效的 HTTP Referer 或 User-Agent 来标识应用程序(由 http 库设置的普通 User-Agent 不会这样做)。
myRequest.UserAgent = "MyApp Version 1.2.3.4"

【讨论】:

以上是关于阅读 Open Street Map xml 响应的主要内容,如果未能解决你的问题,请参考以下文章

在 Open Street Maps 上绘制 ESRI ArcGIS 数据

阅读 Excel Open XML 忽略空白单元格

SQL Server 中的 XML 比较(字符串)

将 Street View Text 数据集的 GroundTruth 标注在图像上

在 open cv 中进行 videoCapture 后应用程序没有响应

如何编译 Open62541 教程中的示例 xml 文件?