zoukankan      html  css  js  c++  java
  • Silverlight学习笔记十七BingMap(七)之检索地理位置(GeocodeService服务)

    GeocodeService服务用来检索地理位置

    效果如图

    一、添加服务引用

    GeocodeService服务也是WCF服务,地址是http://dev.virtualearth.net/webservices/v1/geocodeservice/GeocodeService.svc

    二、实例

    1. public class ChinaTileSource
        {
            /// <summary>
            /// 加载中国地图系统
            /// http://r2.tiles.ditu.live.com/tiles/r{quadkey}.png?g=41中国地图系统
            /// </summary>
            /// <returns>TileSource</returns>
            public TileSource GetChinaTileSource()
            {
                UriBuilder tileSourceUri = new UriBuilder("http://r2.tiles.ditu.live.com/tiles/r{quadkey}.png?g=41");

                MapTileLayer tileLayer = new MapTileLayer();
                LocationRectTileSource tileSource = new LocationRectTileSource(tileSourceUri.Uri.ToString()
                   , new LocationRect(new Location(60, 60), new Location(13, 140)), new Range<double>(1, 16));
                return tileSource;
            }
        }

    2.前台

    <UserControl x:Class="SlBindMapDemo.GeocodeServiceDemo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                 xmlns:map="clr-namespace:Microsoft.Maps.MapControl;assembly=Microsoft.Maps.MapControl"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400">

        <Grid x:Name="LayoutRoot" Width="500" Height="400">
            <map:Map CredentialsProvider="AkGGA_JlwP7XGV8JxIPb8oEWxrInlLMGKpCe7QM4QB5cg4UGNCqUyjqVfC0B2-XC" x:Name="myMap"></map:Map>
            <StackPanel VerticalAlignment="Top" HorizontalAlignment="Right" Background="Gray" Opacity="0.78" Orientation="Vertical" Margin="2,23,2,2">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="地名:" Margin="0,5,0,5"></TextBlock>
                    <TextBox x:Name="tbName" Width="233"></TextBox>
                    <Button x:Name="btnQuery" Content="搜索" Click="btnQuery_Click" Width="80" Height="30"></Button>
                </StackPanel>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="经度:"></TextBlock>
                    <TextBox x:Name="tbLongitude" Width="110"></TextBox>
                    <TextBlock Text="纬度:"></TextBlock>
                    <TextBox x:Name="tbLatitude" Width="110"></TextBox>
                    <Button x:Name="btnQueryReverse" Content="反向搜索" Click="btnQueryReverse_Click" Width="60" Height="30"></Button>
                </StackPanel>
            </StackPanel>
        </Grid>

    </UserControl>

    3.后台

     public partial class GeocodeServiceDemo : UserControl
        {
            const string BingMapID = "AkGGA_JlwP7XGV8JxIPb8oEWxrInlLMGKpCe7QM4QB5cg4UGNCqUyjqVfC0B2-XC";
            public GeocodeServiceDemo()
            {
                InitializeComponent();
               
                MapTileLayer tileLayer = new MapTileLayer();
                ChinaTileSource gts = new ChinaTileSource();

                tileLayer.TileSources.Add(gts.GetChinaTileSource());
                myMap.Children.Add(tileLayer);
            }

            /// <summary>
            /// 检索

      ///根据国家或地名检索
            /// GeocodeRequest用来处理正向检索请求
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnQuery_Click(object sender, RoutedEventArgs e)
            {
                GeocodeServiceClient client = new GeocodeServiceClient();
                client.GeocodeCompleted += new EventHandler<GeocodeCompletedEventArgs>(OnGeocodeCompleted);

                //创建请求
                GeocodeRequest request = new GeocodeRequest();
                request.Credentials = new Credentials();

                //BingMap ID
                request.Credentials.ApplicationId = BingMapID;

                //检索条件
                request.Query = this.tbName.Text.Trim();

                //进行检索
                client.GeocodeAsync(request);
            }

            private void OnGeocodeCompleted(object sender, GeocodeCompletedEventArgs e)
            {
                if (e.Error == null)
                {
                    //获取结果
                    GeocodeResponse response = e.Result;
                    double latitude = response.Results[0].Locations[0].Latitude;
                    double longitude = response.Results[0].Locations[0].Longitude;

                    this.tbLatitude.Text = latitude.ToString();
                    this.tbLongitude.Text = longitude.ToString();

                    //根据经纬度和级别设置视图,并显示该位置
                    myMap.SetView(new Location(latitude, longitude), 4);
                }
            }

            /// <summary>
            /// 反向检索

       ///根据经纬度检索
            /// ReverseGeocodeRequest用来处理反向检索请求
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnQueryReverse_Click(object sender, RoutedEventArgs e)
            {
                GeocodeServiceClient client = new GeocodeServiceClient();
                client.ReverseGeocodeCompleted += new EventHandler<ReverseGeocodeCompletedEventArgs>(OnReverseGeocodeCompleted);

                ReverseGeocodeRequest request = new ReverseGeocodeRequest();
                request.Credentials = new Credentials();
                request.Credentials.ApplicationId = BingMapID;
                request.Location = new Location(int.Parse(this.tbLongitude.Text), int.Parse(this.tbLatitude.Text));
                client.ReverseGeocodeAsync(request);
            }

            private void OnReverseGeocodeCompleted(object sender, ReverseGeocodeCompletedEventArgs e)
            {
                if (e.Error == null)
                {
                    if (e.Result.Results.Count > 0)
                    {
                        GeocodeResponse response = e.Result;
                        this.tbName.Text = response.Results[0].DisplayName;

                        double latitude = response.Results[0].Locations[0].Latitude;
                        double longitude = response.Results[0].Locations[0].Longitude;
                        //根据经纬度和级别设置视图,并显示该位置,这一点很重要啊。
                        myMap.SetView(new Location(latitude, longitude), 4);
                    }
                    else
                        MessageBox.Show("没有检索到该地址");
                }
            }
        }

  • 相关阅读:
    马赛克算法及iOS代码实现
    iOS制作Static Library(静态库),实现多工程的连编
    iOS由ImageIO.framework实现gif的系统解码
    KVC和KVO实现监听容器类(数组等)的变化
    Dynamicaly Typed(动态定型), Objective-C Runtime Programming
    Mac OSX下修改hosts文件
    MAC配置SVN服务器
    Encoding非常用编码转换
    Block作为参数使用
    UITextField关闭系统自动联想和首字母大写功能
  • 原文地址:https://www.cnblogs.com/salam/p/1806319.html
Copyright © 2011-2022 走看看