SqlGeospatialDataReader Not Working

3 posts, 1 answers
  1. Tim
    Tim avatar
    41 posts
    Member since:
    Oct 2012

    Posted 24 Feb 2014 Link to this post

    I'm trying to follow the example at http://demos.telerik.com/silverlight/#Map/WktReader and I can't get a polygon to load. I'm trying this simple example of hard coding one polygon but will eventually want to load several from SQL. Can someone please take a look at the following code and let me know what I'm doing wrong. There should be one polygon loading around Atlanta. The example in the URL has 4 but I'm only attempting one. I am not using MVVM in this example.

    Thanks,

    Tim

    My xaml looks like:
    <UserControl x:Class="xxxx.MainPage"
            mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
        <Grid x:Name="LayoutRoot">
            <telerik:RadMap x:Name="radMap" Center="39.36830, -95.27340" ZoomLevel="5">
                <telerik:InformationLayer x:Name="informationLayer">
                    <telerik:InformationLayer.Reader>
                        <telerik:SqlGeospatialDataReader Source="{Binding Path=WktDataCollection}"
                                                         GeospatialPropertyName="Geometry"
                                                         ToolTipFormat="Name">
                            <telerik:SqlGeospatialDataReader.PointTemplate>
                                <DataTemplate>
                                    <Border Background="Yellow" BorderThickness="1" Padding="2,2,2,2">
                                        <telerik:MapLayer.HotSpot>
                                            <telerik:HotSpot X="0.5" Y="0.5" ElementName="PART_Image" />
                                        </telerik:MapLayer.HotSpot>
                                        <Grid Name="PART_Panel">
                                            <Path Fill="{Binding Path=PointBrush}" Name="PART_Image">
                                                <Path.Data>
                                                    <GeometryGroup>
                                                        <EllipseGeometry Center="7,7" RadiusX="4" RadiusY="4" />
                                                        <EllipseGeometry Center="7,7" RadiusX="6" RadiusY="6" />
                                                    </GeometryGroup>
                                                </Path.Data>
                                            </Path>
                                        </Grid>
                                    </Border>
                                </DataTemplate>
                            </telerik:SqlGeospatialDataReader.PointTemplate>
                        </telerik:SqlGeospatialDataReader>
                    </telerik:InformationLayer.Reader>
                    <telerik:InformationLayer.ShapeFill>
                        <telerik:MapShapeFill Fill="#7FFFFFFF" Stroke="#5A636B" StrokeThickness="3" />
                    </telerik:InformationLayer.ShapeFill>
                    <telerik:InformationLayer.HighlightFill>
                        <telerik:MapShapeFill Fill="#B2FFFFFF" Stroke="#5A636B" StrokeThickness="3" />
                    </telerik:InformationLayer.HighlightFill>
                </telerik:InformationLayer>
            </telerik:RadMap>
        </Grid>
    </UserControl>

    And my codebehind looks like:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using Telerik.Windows.Controls.Map;
    using System.Collections.ObjectModel;
     
    namespace xxxx
    {
        public partial class MainPage : UserControl
        {
            private Collection<WktDataRow> _wktDataCollection;
     
            public Collection<WktDataRow> WktDataCollection
            {
                get
                {
                    return this._wktDataCollection;
                }
                set
                {
                    this._wktDataCollection = value;
                }
            }
     
            public MainPage()
            {
                InitializeComponent();           
     
                this.radMap.Provider = new BingMapProvider(MapMode.Aerial, true, "myKey");
     
                WktDataRow northAreaDataRow = new WktDataRow();
                northAreaDataRow.Name = "North Area";
                northAreaDataRow.Geometry = "Polygon (("
                        + "-84.3932461670301, 33.7967217961125"
                        + ", -84.418995373573 33.808989109452"
                        + ", -84.4303250244518 33.8377961143588"
                        + ", -84.4303250244518 33.8480616114576"
                        + ", -84.4320416382213 33.8563301427474"
                        + ", -84.4413113525767 33.8668784860621"
                        + ", -84.4605374267954 33.8908212383562"
                        + ", -84.447147839393 33.8996555568394"
                        + ", -84.4169354370492 33.9161818236152"
                        + ", -84.384663098182 33.9127628588944"
                        + ", -84.3788266113656 33.9133326958734"
                        + ", -84.3633770874397 33.9101985453388"
                        + ", -84.3616604736702 33.9101985453388"
                        + ", -84.3300747803108 33.9204553366171"
                        + ", -84.2957425049201 33.9198855472676"
                        + ", -84.2596936157599 33.8919612018418"
                        + ", -84.2713665893927 33.8831260863279"
                        + ", -84.2768597534552 33.8745751033359"
                        + ", -84.2905926636114 33.8640277109635"
                        + ", -84.3039822510137 33.8480616114574"
                        + ", -84.3125653198613 33.8397922798236"
                        + ", -84.3489575317754 33.8249625088656"
                        + ", -84.3589138916386 33.8226807773054"
                        + ", -84.3688702515018 33.8124122318747"
                        + ", -84.3822598389041 33.8058511269131"
                        + ", -84.3932461670301 33.7967217961125"
                        + ", -84.3932461670301 33.7967217961125"
                        + "))";
     
                this.WktDataCollection = new Collection<WktDataRow>();
     
                this.WktDataCollection.Add(northAreaDataRow);
     
                Loaded += new RoutedEventHandler(Map_Loaded);
            }
     
            private void Map_Loaded(object sender, RoutedEventArgs e)
            {
                
     
            }
     
            public Brush PointBrush
            {
                get
                {
                    return new SolidColorBrush(Color.FromArgb(255, 31, 163, 235));
                }
            }
        }
     
        public class WktDataRow
        {
            private string _name;
            private string _geometry;
     
            public string Name
            {
                get { return this._name; }
                set { this._name = value; }
            }
     
            public string Geometry
            {
                get { return this._geometry; }
                set { this._geometry = value; }
            }
        }
    }













  2. Tim
    Tim avatar
    41 posts
    Member since:
    Oct 2012

    Posted 24 Feb 2014 Link to this post

    I converted to MVVM and it works. I would still like to know what is incorrect with my non MVVM attempt if anyone could look at it.

    Tim
  3. DevCraft banner
  4. Answer
    Andrey
    Admin
    Andrey avatar
    1681 posts

    Posted 26 Feb 2014 Link to this post

    Hi Tim,

    You use data binding for the Source property of SqlGeospatialDataReader, but you don't specify the data context. So, the binding does not work. To fix it you should specify the DataContext property like the following:

    public MainPage()
    {
        InitializeComponent();
     
        this.radMap.Provider = new BingMapProvider(MapMode.Aerial, true, "myKey");
     
        WktDataRow northAreaDataRow = new WktDataRow();
        northAreaDataRow.Name = "North Area";
        northAreaDataRow.Geometry = "Polygon (("
                + "-84.3932461670301, 33.7967217961125"
                + ", -84.418995373573 33.808989109452"
                + ", -84.4303250244518 33.8377961143588"
                + ", -84.4303250244518 33.8480616114576"
                + ", -84.4320416382213 33.8563301427474"
                + ", -84.4413113525767 33.8668784860621"
                + ", -84.4605374267954 33.8908212383562"
                + ", -84.447147839393 33.8996555568394"
                + ", -84.4169354370492 33.9161818236152"
                + ", -84.384663098182 33.9127628588944"
                + ", -84.3788266113656 33.9133326958734"
                + ", -84.3633770874397 33.9101985453388"
                + ", -84.3616604736702 33.9101985453388"
                + ", -84.3300747803108 33.9204553366171"
                + ", -84.2957425049201 33.9198855472676"
                + ", -84.2596936157599 33.8919612018418"
                + ", -84.2713665893927 33.8831260863279"
                + ", -84.2768597534552 33.8745751033359"
                + ", -84.2905926636114 33.8640277109635"
                + ", -84.3039822510137 33.8480616114574"
                + ", -84.3125653198613 33.8397922798236"
                + ", -84.3489575317754 33.8249625088656"
                + ", -84.3589138916386 33.8226807773054"
                + ", -84.3688702515018 33.8124122318747"
                + ", -84.3822598389041 33.8058511269131"
                + ", -84.3932461670301 33.7967217961125"
                + ", -84.3932461670301 33.7967217961125"
                + "))";
     
        this.WktDataCollection = new Collection<WktDataRow>();
        this.WktDataCollection.Add(northAreaDataRow);
     
        this.DataContext = this;
    }
    I hope this information is helpful.

    Regards,
    Andrey Murzov
    Telerik
Back to Top