How to display 1 million points in the Map?

5706
16
04-21-2011 09:43 AM
SripathiRao
New Contributor
Hi,

I am new to arcGIS. I have requirement to display 1 million points in the Map. Can anyone guide me the efficient way to achieve this?

I have tried by using Graphic Layer by adding Graphic object to GraphicCollection, but it is taking indefinite time to display the points.

Any help will be highly appreciated.

Thanks in Anticipation,
Sripathi Rao
0 Kudos
16 Replies
wangzhifang
Occasional Contributor
Here's a Chinese blog talk about how to achieve this in several situations, FYI.
http://blog.newnaw.com/?p=633
0 Kudos
SripathiRao
New Contributor
Thanks for the reply.

My requirement needs to display all the million points in the map without using the layers (featurelayer) for clusters. 1 million points must be visible in 40 sq. kms area.

The solution which I got above are using layers to display points as clusters.

Did arcGIS supports this kind of requirement?

Any workaround will be highly appreciated.

Thanks in Anticipation,
Sripathi Rao
0 Kudos
YamunadeviRathinasamy
New Contributor II
I am doing this by the following steps:

1) Stored procedure to get 1million record based on the spatial filter. and it returns "OBJECTID.Convert(varchar(mx),GEOMETRY)"
2) Write WCF to call this procedure and get back the result using Datareader into List<string>
3) Write a parser to parse the geometry string into ESRI.arcGIS.Client.Geometry type
4) Create Graphic with symbol and the parsed geometry
5) Add to the graphics layer.
0 Kudos
IgressT
New Contributor II
I am doing this by the following steps:

1) Stored procedure to get 1million record based on the spatial filter. and it returns "OBJECTID.Convert(varchar(mx),GEOMETRY)"
2) Write WCF to call this procedure and get back the result using Datareader into List<string>
3) Write a parser to parse the geometry string into ESRI.arcGIS.Client.Geometry type
4) Create Graphic with symbol and the parsed geometry
5) Add to the graphics layer.


Can you be more specific because I am dealing with just 20,000 points.
Because 1 million points is lot of data that is being returned
are you doing some kind of paging? If yes how are doing it (I mean how are you dealing with paging and adding to the data to the map)
Adding all points to graphics layer will freeze up browser are you doing some of clustering?

Please let me know your implementation.

thanks
0 Kudos
SripathiRao
New Contributor
I am doing this by the following steps:

1) Stored procedure to get 1million record based on the spatial filter. and it returns "OBJECTID.Convert(varchar(mx),GEOMETRY)"
2) Write WCF to call this procedure and get back the result using Datareader into List<string>
3) Write a parser to parse the geometry string into ESRI.arcGIS.Client.Geometry type
4) Create Graphic with symbol and the parsed geometry
5) Add to the graphics layer.



Thanks for the reply. I have tried this, but my screen is hanging. Any other approach??

Thanks,
Sripathi Rao
0 Kudos
VincenzoPiscitelli
New Contributor
Just a question...

How would one visualize 1 million points?  On a screen with a resolution of 1280x1024 you only have 1.3 million pixels.  Assuming you used a graphic that was 1 pixel (which doesn't make much sense) and that the distribution of points was equal, that would saturate 77% of the screen?!  Hardly useful.

Can you explain why you need to visualize so many points at one time?  It might help others offer some possible solutions.
0 Kudos
IgressT
New Contributor II
Just a question...

How would one visualize 1 million points?  On a screen with a resolution of 1280x1024 you only have 1.3 million pixels.  Assuming you used a graphic that was 1 pixel (which doesn't make much sense) and that the distribution of points was equal, that would saturate 77% of the screen?!  Hardly useful.

Can you explain why you need to visualize so many points at one time?  It might help others offer some possible solutions.


I have to display around 20,000 points and this is my reason why to display all the points...
Each point that I display represents that data was collected at that particular location.
As soon as the user launches my app I want to give him an overall view of where data was collected. My plan is to implement clustering.
So I have to get all the data points from SQL Server and add them to a graphics layer and implement the clustering.
My problem is how to get all the 20,000 points from the server. How to design my WCF service
0 Kudos
VincenzoPiscitelli
New Contributor
Clustering is definitely the way to go.

Getting the data via a web service should be straight forward.

Define a graphics layer in XAML and define its GraphicsLayer.Clusterer accordingly.  See http://help.arcgis.com/en/webapi/silverlight/samples/start.htm#SimpleClusterer for a sample on how to do that.


  1. Create your WCF Web Service

  2. Define a web method that performs the appropriate query.

  3. Return the data as some sort of collection.  You can wrap them into a custom object if you wish.

  4. On the client, create a graphic for each point and add them to the graphics layer.


Again, refer to the sample I linked above.  The overall process is the same.  Except you are replacing the QueryTask with your own web service call and rather than using the geometry in the FeatureSet, you would create your own geomentry from the data returned from the web service.

Oh and 1 other thing.  Returning 20,000 records x (how ever may attributes + coordinates) is going to be very verbose if you use XML.  Try using a custom binding for your web service and use binaryHttpBinding.  It will reduce the amount of data that gets sent over the wire.

Hope this helps.
0 Kudos