我在asp.net网站(Visual Studio 2010,C#)中使用了nominatim进行反向地理编码。
我在另一个网页上得到XML或json格式的答案,如下所示:
我无法使用XML阅读器或HTTP响应读取此地址。
需要帮助才能将此文本转换为纯文本并显示在我的网站上。
答案 0 :(得分:5)
要解决Forbidden错误,我已添加了WebClient对象的标题,如下所示 -
INSERT INTO mainTable
SELECT * FROM #tempTable;
答案 1 :(得分:4)
好吧,你必须反序列化你从Web服务获得的json数据。 您必须定义两个新类,即:
[DataContract]
public class Address
{
[DataMember]
public string road { get; set; }
[DataMember]
public string suburb { get; set; }
[DataMember]
public string city { get; set; }
[DataMember]
public string state_district { get; set; }
[DataMember]
public string state { get; set; }
[DataMember]
public string postcode { get; set; }
[DataMember]
public string country { get; set; }
[DataMember]
public string country_code { get; set; }
}
[DataContract]
public class RootObject
{
[DataMember]
public string place_id { get; set; }
[DataMember]
public string licence { get; set; }
[DataMember]
public string osm_type { get; set; }
[DataMember]
public string osm_id { get; set; }
[DataMember]
public string lat { get; set; }
[DataMember]
public string lon { get; set; }
[DataMember]
public string display_name { get; set; }
[DataMember]
public Address address { get; set; }
}
之后,您将能够使用以下代码获取数据:
WebClient webClient = new WebClient();
var jsonData = webClient.DownloadData("http://nominatim.openstreetmap.org/reverse?format=json&lat=23.02951&lon=72.48689");
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(RootObject));
var rootObject = ser.ReadObject(new MemoryStream(jsonData));
rootObject 包含您需要的所有数据,以便将其转换为纯文本或任何其他格式。
答案 2 :(得分:2)
为了补充 Vladimir Gondarev 提供的示例,Nominatim目前不接受没有Referer和User-Agent的请求。 这样,只需添加以下两行:
webClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
webClient.Headers.Add("Referer", "http://www.microsoft.com");
(根据自己的喜好修改)。