Select to view content in your preferred language

Lat Long to XY Geometry Service Question

3042
1
11-26-2013 10:19 AM
BrandonIves
Emerging Contributor
Hi,

I am attempting to draw points on a map using the lat/long values I am getting from a table. My problem is that my basemap and other data is in X/Y (Missouri State Plane) and when I try to do a mashup with a tiled service my graphics aren't where they are supposed to be.

I am having trouble understanding how to use a geometry service to convert the spatial reference. Any help would be greatly appreciated.


Below is my code so far:

xaml:

<UserControl x:Class="TruckGPS_Test.MainPage"
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"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400"
xmlns:esri="http://schemas.esri.com/arcgis/client/2009"
    xmlns:esriSymbols="clr-namespace:ESRI.ArcGIS.Client.Symbols;assembly=ESRI.ArcGIS.Client">
<Grid x:Name="LayoutRoot" Background="White">
  
 
  <Grid.Resources>
    <esri:SimpleMarkerSymbol x:Key="RedMarkerSymbol" Color="Red" Size="12" Style="Circle" />
   <esri:SimpleMarkerSymbol x:Key="YellowMarkerSymbol" Color="Yellow" Size="25" Style="Circle" />
   <esriSymbols:PictureMarkerSymbol x:Name="TRUCK" Source="images/bucket-truck-box.png" />
  </Grid.Resources>


  <esri:Map x:Name="MyMap" WrapAround="True" Margin="0,0,-325,-506" MouseMove="MyMap_MouseMove">
   <!--<esri:ArcGISTiledMapServiceLayer ID="MyLayer"
    Url="http://gisaprd/ArcGIS/rest/services/BaseMap_ArcReader_Cached/MapServer" />-->
   <!--<esri:ArcGISTiledMapServiceLayer ID="MyLayer"
    Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />-->
            <esri:ArcGISTiledMapServiceLayer ID="Aerials" Url="http://gisaprd/ArcGIS/rest/services/AerialCoordinateTest/MapServer" Visible="False"  />
   <esri:ArcGISDynamicMapServiceLayer Url="http://gisaprd/ArcGIS/rest/services/BaseMapCool__WebViewer/MapServer" />
   <esri:ArcGISDynamicMapServiceLayer ID="Landbase" Url="http://gisaprd/ArcGIS/rest/services/SRSLandbase/MapServer"  />
   <esri:ArcGISDynamicMapServiceLayer ID="Show All Feeders" Url="http://gisaprd/ArcGIS/rest/services/SRSShowAllFeeders/MapServer" Visible="False" />
   <esri:ArcGISDynamicMapServiceLayer ID="Electric Data"  Url="http://gisaprd/ArcGIS/rest/services/SRSElectricData/MapServer"/>
   <esri:ArcGISDynamicMapServiceLayer ID="Feeders Outages" Url="http://gisaprd/ArcGIS/rest/services/SRSShowFeedersWOutages/MapServer"
    DisableClientCaching="True" Opacity=".65" Visible="False"/>


   <esri:GraphicsLayer ID="TruckGPS" >

    <esri:GraphicsLayer.MapTip>
     <Grid Background="#FFD65555" >
      <Border BorderBrush="#FFFF0000" BorderThickness="1" CornerRadius="5" />
      <StackPanel Orientation="Vertical" >
       <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding [USER_NAME]}" FontWeight="Bold" Foreground="White"  HorizontalAlignment="Left"/>
       </StackPanel>
       <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding [SYSTIME]}" FontWeight="Bold" Foreground="White"  HorizontalAlignment="Left"/>
       </StackPanel>
      </StackPanel>
     </Grid>
    </esri:GraphicsLayer.MapTip>
   </esri:GraphicsLayer>

  </esri:Map>

  <Grid MinWidth="300" HorizontalAlignment="Right" Background="White" VerticalAlignment="Top" Margin="0,15,15,0" >
   <StackPanel Margin="5">
    <TextBlock x:Name="ScreenCoordsTextBlock"
     HorizontalAlignment="Left" VerticalAlignment="Center" Text="Screen Coords: "
         TextWrapping="Wrap" />
    <TextBlock x:Name="MapCoordsTextBlock"
     HorizontalAlignment="Left" VerticalAlignment="Center" Text="Map Coords: "
         TextWrapping="Wrap" />
   </StackPanel>
  </Grid>


</Grid>
</UserControl>



C#:


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 ESRI.ArcGIS.Client;
using ESRI.ArcGIS.Client.Geometry;
using ESRI.ArcGIS.Client.Symbols;
using System.Runtime.Serialization;
using ESRI.ArcGIS.Client.Tasks;
using System.Windows.Threading;
using ESRI.ArcGIS.Client.Bing;


namespace TruckGPS_Test
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
             //AddMarkerGraphics();

            QueryTask queryTaskTruckGPS = new QueryTask("http://gisaprd/ArcGIS/rest/services/TruckGPS/MapServer/8");
            queryTaskTruckGPS.ExecuteCompleted += QueryTask_ExecuteCompletedTruckGPS;
            ESRI.ArcGIS.Client.Tasks.Query queryTruckGPS = new ESRI.ArcGIS.Client.Tasks.Query();
            queryTruckGPS.OutFields.Add("*");
            queryTruckGPS.ReturnGeometry = false;
            queryTruckGPS.Where = "1=1";
            queryTaskTruckGPS.ExecuteAsync(queryTruckGPS, "initial");

            //This timer updates the outage feature count after a 30 second wait
            System.Windows.Threading.DispatcherTimer myDispatcherTimer = new System.Windows.Threading.DispatcherTimer();
            myDispatcherTimer.Interval = new TimeSpan(0, 0, 0, 10, 0);
            myDispatcherTimer.Tick += new EventHandler(Each_Tick);
            myDispatcherTimer.Start();

        }
       
        public void Each_Tick(object o, EventArgs sender)
        {
            QueryTask queryTaskTruckGPS = new QueryTask("http://gisaprd/ArcGIS/rest/services/TruckGPS/MapServer/8");
            queryTaskTruckGPS.ExecuteCompleted += QueryTask_ExecuteCompletedTruckGPS;
            ESRI.ArcGIS.Client.Tasks.Query queryTruckGPS = new ESRI.ArcGIS.Client.Tasks.Query();
            queryTruckGPS.OutFields.Add("*");
            queryTruckGPS.ReturnGeometry = false;
            queryTruckGPS.Where = "1=1";
            queryTaskTruckGPS.ExecuteAsync(queryTruckGPS, "initial");

        }

        private void QueryTask_ExecuteCompletedTruckGPS(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args)
        {
            //If Counter isn't working check the web service, make sure the table is added to the map service
                          
            FeatureSet featureSet = args.FeatureSet;
            GraphicsLayer graphicsLayer = MyMap.Layers["TruckGPS"] as GraphicsLayer;
            graphicsLayer.ClearGraphics();
            if (featureSet != null && featureSet.Features.Count > 0)
            {

                ////Check the system time and subtract the time amount wanted from the last gps systime read for movement or idle truck
                //System.DateTime dTime = DateTime.Now;
                //// tSpan is 0 days, 0 hours, 0 minutes, and 0 seconds.
                //System.TimeSpan tSpan = new System.TimeSpan(0, 1, 0, 0);
                //System.DateTime result = dTime - tSpan;
              
              
                foreach (ESRI.ArcGIS.Client.Graphic feature in featureSet.Features)
                {
                                       
                    if ((feature.Attributes["LONGITUDE"] != null) && (feature.Attributes["LATITUDE"] != null) )
                        //&& (feature.Attributes["S"])
                    {

                        var Machine_Name = feature.Attributes["MACHINE_NAME"].ToString();
                        var User_Name = feature.Attributes["USER_NAME"].ToString();
                        double x = Convert.ToDouble(feature.Attributes["LONGITUDE"]);
                        double y =Convert.ToDouble(feature.Attributes["LATITUDE"]);

                        feature.Geometry = new MapPoint(x, y);
                        //if (User_Name == "CU656")
                        //{
                            feature.Symbol = LayoutRoot.Resources["TRUCK"] as ESRI.ArcGIS.Client.Symbols.Symbol;
                            graphicsLayer.Graphics.Add(feature);
                        //}
                        //else
                        //{
                        //    feature.Symbol = LayoutRoot.Resources["RedMarkerSymbol"] as ESRI.ArcGIS.Client.Symbols.Symbol;
                        //    graphicsLayer.Graphics.Add(feature);
                        //}
                    }
                }
                { (MyMap.Layers["TruckGPS"] as GraphicsLayer).Refresh(); };
            }
            else
            {
                graphicsLayer.ClearGraphics();
                //MessageBox.Show("No features returned from query");
            }
        }
        private void MyMap_MouseMove(object sender, System.Windows.Input.MouseEventArgs args)
        {
            if (MyMap.Extent != null)
            {
                System.Windows.Point screenPoint = args.GetPosition(MyMap);
                ScreenCoordsTextBlock.Text = string.Format("Screen Coords: X = {0}, Y = {1}",
                    screenPoint.X, screenPoint.Y);

                ESRI.ArcGIS.Client.Geometry.MapPoint mapPoint = MyMap.ScreenToMap(screenPoint);
                if (MyMap.WrapAroundIsActive)
                    mapPoint = ESRI.ArcGIS.Client.Geometry.Geometry.NormalizeCentralMeridian(mapPoint) as ESRI.ArcGIS.Client.Geometry.MapPoint;
                MapCoordsTextBlock.Text = string.Format("Map Coords: X = {0}, Y = {1}",
                    Math.Round(mapPoint.X, 4), Math.Round(mapPoint.Y, 4));
            }
        }

    }

}
0 Kudos
1 Reply
BrandonIves
Emerging Contributor
I have been looking at this example in the help but I am having trouble taking my Truck_GPS graphics layer and changing the spatial reference to match my tiled map service.

http://help.arcgis.com/en/webapi/silverlight/help/index.html#//01660000001v000000
0 Kudos