0

オンサイト プロジェクトを管理するアプリを開発しています。ユーザーがプロジェクトの場所を国から住所、緯度/経度の座標まで指定できるようにする必要があります。

問題は、位置情報が国全体で一様に記述されていないことです。つまり、国は位置階層で異なる名前を持っています。したがって、1 つのプロジェクトが米国にある場合、次の階層があります。

Country / State / City

一方、チリには次の階層があります。

Country / Region / County / City / district / neighborhood

これをどのようにモデル化すればよいですか?

.netプロジェクトに貼り付けて動作する既製のモジュールはありますか? 階層を 4 つの異なるレベルに単純化し、ユーザーが国ごとに異なる階層の複雑さに対処できるようにする必要がありますか?

私にとって最善の解決策は、コードに簡単に組み込むことができる既製のアセンブリを使用することですが、自分で実装をコーディングすることを恐れていません。

問題は、私が作成したすべてのソリューションが複雑すぎて実用的ではないことです。そのため、アドバイスは大歓迎です。

4

1 に答える 1

0

緯度/経度の座標を保存してから、GMaps を使用して場所を調べてみませんか。

static string baseUri = 
  "http://maps.googleapis.com/maps/api/geocode/xml?latlng={0},{1}&sensor=false";
string location = string.Empty;

public static void RetrieveFormatedAddress(string lat, string lng)
{
    string requestUri = string.Format(baseUri, lat, lng);

    using (WebClient wc = new WebClient())
    {
        string result = wc.DownloadString(requestUri);
        var xmlElm = XElement.Parse(result);
        var status = (from elm in xmlElm.Descendants() where 
            elm.Name == "status" select elm).FirstOrDefault();
        if (status.Value.ToLower() == "ok")
        {
            var res = (from elm in xmlElm.Descendants() where 
                elm.Name == "formatted_address" select elm).FirstOrDefault();
            requestUri = res.Value;
        }
    }
}

編集:

逆の単純なバージョンは次のとおりです。

public static Coordinate GetCoordinates(string region)
{
    using (var client = new WebClient())
    {

        string uri = "http://maps.google.com/maps/geo?q='" + region + 
          "'&output=csv&key=sadfwet56346tyeryhretu6434tertertreyeryeryE1";

        string[] geocodeInfo = client.DownloadString(uri).Split(',');

        return new Coordinate(Convert.ToDouble(geocodeInfo[2]), 
                   Convert.ToDouble(geocodeInfo[3]));
    }
}

public struct Coordinate
{
    private double lat;
    private double lng;

    public Coordinate(double latitude, double longitude)
    {
        lat = latitude;
        lng = longitude;

    }

    public double Latitude { get { return lat; } set { lat = value; } }
    public double Longitude { get { return lng; } set { lng = value; } }

}
于 2012-10-26T02:30:58.123 に答える