Serializing JSON Geometry Objects between Silverlight, WPF and ArcObjects

Richie Carmichael posted a great article about serialization of objects in JSON to send to the server. He walk us through to the best practices to do that.

I have been getting lots of questions lately in how to send Silverlight geometry to the server to send it to ArcObjects to store into a geospatial database.

I would like to say before that even the code below will work for doing that task, I would recommend to take this hack as it is, a hack until a solution to do that is put it into place, I do not know if this is the best way to do just that. The sample below will send a polygon from Silverlight to a Spatial database. Please do let me know if I can optimize the code or there is something else I can do better.

Given a ArcGIS.Geometry.Polygon convert it to a PointCollection then serialize it to JSON:

            ArcGIS.Geometry.PointCollection pointCollection = new ESRI.ArcGIS.Geometry.PointCollection();                        
            foreach(ArcGIS.Geometry.PointCollection ring in _geometry.Rings)
            {
                foreach (ESRI.ArcGIS.Geometry.MapPoint point in ring)
                {
                    pointCollection.Add(point);
                }                
            }

Convert it to Json

            MemoryStream memoryStream = new MemoryStream();
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
            serializer.WriteObject(memoryStream, obj);
            memoryStream.Position = 0;
            StreamReader streamReader = new StreamReader(memoryStream);
            string JSON = streamReader.ReadToEnd();
            memoryStream.Close();
 
 

Send it using a Silverlight Service to the server and use the WPF binaries of those objects.

Server side Serialize it to a PointCollection

Byte[] bytes = Encoding.Unicode.GetBytes(polygon);
            MemoryStream memoryStream = new MemoryStream(bytes);
            DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(gPolygon.GetType());
            gPolygon = dataContractJsonSerializer.ReadObject(memoryStream) as ESRI.ArcGIS.Geometry.PointCollection;
            memoryStream.Close();

Then create a double array to of those points, this will not bring attributes of you geometry, just the points.


double [] coor = new double[poly.Count*2];
            int t = 0;
            for (int i = 0; i < poly.Count; i++)
            {
                coor[t] = poly[i].X;
                t++;
                coor[t] = poly[i].Y;
                t++;
            }

So you can then convert it to a IPolygon from ArcObjects:



                    ESRI.ArcGIS.Geometry.IPointCollection pPointCol = _serverContext.CreateObject("esriGeometry.Polygon") as ESRI.ArcGIS.Geometry.IPointCollection;
                    for (int i = 0; i < Coordinates.Length; i += 2)
                    {
                        ESRI.ArcGIS.Geometry.IPoint pt = (ESRI.ArcGIS.Geometry.IPoint)_serverContext.CreateObject("esriGeometry.Point");
                        pt.PutCoords(Coordinates[i], Coordinates[i + 1]);
                        pPointCol.AddPoints(1, ref pt);
                    }

                    feature.Shape = pPointCol as ESRI.ArcGIS.Geometry.IPolygon;

Hope this opens a thread to accomplish this task faster and better.

Cheers

Al

Published Monday, April 06, 2009 10:39 PM by albertpascual

Comments

# re: Serializing JSON Geometry Objects between Silverlight, WPF and ArcObjects

Monday, March 22, 2010 2:55 AM by Catherine

Give please. Never read a book through merely because you have begun it. Help me! Need information about: Tooth whitening chicago. I found only this - <a href="openparliament.eu/.../ToothWhitening">cf tooth whitening treatment</a>. Tooth whitening, the anxiety makes the oil of the bleaching skin onto the carbamide's years while whitening considerable options to rub the hemorrhoids and stretchmarks. The cocaine would be absorbed into people and often prohibited by the form, tooth whitening. Best regards :confused:, Catherine from Guatemala.

# re: Serializing JSON Geometry Objects between Silverlight, WPF and ArcObjects

Saturday, April 02, 2011 10:04 PM by weblogs.asp.net

Serializing json geometry objects between silverlight wpf and arcobjects.. Reposted it :)

Leave a Comment

(required) 
(required) 
(optional)
(required)