Nextrek
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Xml.Linq;
using System.Globalization;
using System.Xml;
using System.Web;
namespace csvTojSon
{
public class cfgSettings
{
public static string bingMapsApiUrl = string.Empty;
public static string apiKeyBingMaps = string.Empty;
public static string fileScarti = string.Empty;
public static string xmlNameSpace = string.Empty;
}
public enum GoogleMapsResult
{
SUCCESS = 0,
NOTEXISTS,
OVER_QUERY_LIMIT
}
public class Types
{
[System.Serializable]
[System.Runtime.Serialization.DataContract]
public class CSV
{
[System.Runtime.Serialization.DataContract]
public class Root
{
[System.Runtime.Serialization.DataMember]
public Record[] results;
}
[System.Runtime.Serialization.DataContract]
public class Record
{
[System.Runtime.Serialization.DataMember]
public string den_istituzione;
[System.Runtime.Serialization.DataMember]
public string den_ragione_sociale;
[System.Runtime.Serialization.IgnoreDataMember]
public string codice_sede;
[System.Runtime.Serialization.DataMember]
public string den_indirizzo;
[System.Runtime.Serialization.DataMember]
public string den_localita;
[System.Runtime.Serialization.DataMember]
public string cod_cap;
[System.Runtime.Serialization.IgnoreDataMember]
public string cod_provincia;
[System.Runtime.Serialization.DataMember]
public double latitudine;
[System.Runtime.Serialization.DataMember]
public double longitudine;
}
[System.Runtime.Serialization.DataMember]
public Root root;
}
[System.Serializable]
public class GeocoderLocation
{
public double Longitude { get; set; }
public double Latitude { get; set; }
public override string ToString()
{
return String.Format("{0}, {1}", Latitude, Longitude);
}
}
public static GeocoderLocation RecuperaCoordinate(string query)
{
GeocoderLocation geo = null;
//uso la classe System.Net.WebClient per inviare la richiesta GET al servizio REST
using (var client = new WebClient())
{
System.Collections.Specialized.NameValueCollection nvc = System.Configuration.ConfigurationManager.AppSettings;
cfgSettings.fileScarti = (nvc.AllKeys.Contains("fileScarti") ? nvc["fileScarti"] : string.Empty);
cfgSettings.bingMapsApiUrl = (nvc.AllKeys.Contains("bingMapsApiUrl") ? nvc["bingMapsApiUrl"] : string.Empty);
cfgSettings.apiKeyBingMaps = (nvc.AllKeys.Contains("apiKeyBingMaps") ? nvc["apiKeyBingMaps"] : string.Empty);
var url = string.Format(cfgSettings.bingMapsApiUrl, query.Replace(" ", "+"), cfgSettings.apiKeyBingMaps);
try
{
//il risultato è un documento XML
var risultato = client.DownloadString(url);
//Lo vado a leggere con un XmlDocument
var doc = new XmlDocument();
doc.LoadXml(risultato);
//Se voglio interrogare il documento, devo almeno caricare il namespace di default
var nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("ns", cfgSettings.xmlNameSpace);
//Ora sono pronto, estraggo solo i nodi che mi interessano
var location = doc.DocumentElement.SelectSingleNode("//ns:Point", nsmgr);
if (location != null)
{
geo = new GeocoderLocation
{
Longitude = double.Parse(location.SelectSingleNode("ns:Longitude", nsmgr).InnerText, CultureInfo.InvariantCulture),
Latitude = double.Parse(location.SelectSingleNode("ns:Latitude", nsmgr).InnerText, CultureInfo.InvariantCulture)
};
}
}
catch (Exception ex)
{
if (cfgSettings.fileScarti.Trim() != "") System.IO.File.AppendAllText(cfgSettings.fileScarti, ex.Message);
}
return geo;
}
}
}
}
|