Update a column with the number of point
In MI Pro go to: Table > Update Column... and fill the dialog out like this:
Table to update: POLYGONS
Column to Update: (or pick an existing column)
Get Value From Table: POINTS
Calculate: Count
Click on Join and specify "where objects from table POINTS objects from table POLYGON"
Push OK in the Specify Join dialog
And Push OK in the Update Column dialog to run this update statement
Update a column with the most frequent value
This is a bit more tricky as we need to find the most frequent value and MI Pro doesn't have a single function to do so. You can however find this values thru a number of queries:
- Count how many times each value occurs
- Find the maximum number of occurencies
- Use the maximum number to identify the most frequent used values
For this to work your polygons need a unique ID (can be a column updated with the ROWID or a unique name). This column is called ID in the statements below.
With MapInfo Pro's SQL that would look like this (run these from the MapBasic window which can be opened from Options > Show MapBasic window):
Select POLYGONS.ID, POINTS.YEAR, Count(*) "NUM"
From POLYGONS, POINTS
Where POLYGONS.Obj Contains POINTS.Obj
Group by POLYGONS.ID, POINTS.YEAR
Into YEAR__GROUPED
Select ID, Max(NUM) "MAX_NUM"
From YEAR__GROUPED
Group By ID Into YEAR__GROUPED__MAX
Select ID, YEAR, NUM From YEAR__GROUPED
Where ID + "#" + NUM In (Select ID + "#" + MAX_NUM From YEAR__GROUPED__MAX)
Into YEAR__GROUPED__MODUS
To run the statements from the MapBasic window, make sure you highlight the entire statement before hitting the Enter key on your keyboard.
Now follow the description above to update or add a new column to your POLYGONS table. In this case you need to use the final query table (YEAR_GROUPED_MODUS) and join the two tables on the ID column of the POLYGON table.
You can also run this statement (to add a new temporary column) thru the MapBasic window:
Add Column POLYGONS (YEAR Float)
From YEAR__GROUPED__MODUS
Set To YEAR Where ID = ID
Or this to update an existing column called YEAR:
Add Column POLYGONS (YEAR Float)
From YEAR__GROUPED__MODUS
Set To YEAR Where ID = ID
Also note that you will get a "random" result if some of the points have more than one most frequent value.
Best Answer
I looked at SharpMap and it suggests you need a 3rd party to view MapInfo files.
if you want to use MapInfo tab format files, you need an OgrProvider. For SharpMap v0.9 it is in the SharpMap.Extensions project. For SharpMap v2.0 there is one in the branches/initialgdalintegration branch.
If you get this extension, you'll be able to view MapInfo files; Geography and attribution
EDIT
from the SharpMap web site
I've added the patch with the GetFeatureInfo request possibility.
I've made the following changes.
ICanQueryLayer .cs: Added a boolean in ICanQueryLayer to set layers queryable for the WMS
VectorLayer.cs, GdalRasterLayer.cs, Layergroup.cs: implemented this boolean of ICanQueryLayer
WmsServer.cs: added the getFeatureInfo thing
capabilities.cs: added the required getfeature information for the capabilities
The code added to wmsserver works as follows:
A getfeatureinfo request is received
Checks on all necessary parameters
The map size and boundingbox are set according to the settings of the client and the point clicked in the map of the client is translated to the coordinates of the projection using this new map size and bbox
The optional parameter FEATURES_COUNT is checked whether the client requests one or more features per layer
For each requested layer, it is checked whether the layer is queryable. When true, the layer is queried and all found features are placed in the featuredataset.
This featuredataset is then sorted on area size, because when the client requests a limited number of features, the user is more likely to be interested in the feature with the smallest bbox (imagine a very curved polygon like the character C and a small polygon within the bbox of the 'C' polygon. If the user clicks the small polygon, both the 'C' polygon bbox and the small polygon bbox will be returned. When the FEATURES_COUNT is set to 1, only the feature attributes of the 'C' polygon might be send back, instead of the small polygon attributes the user wanted to see. By sorting on bboxarea from small to large, the small polygon attribute information will be send back. If the user wants to see attribute information of the 'C' polygon, he will click the 'C' polygon and the click will only be within the 'C' polygon bbox and not within the small polygon bbox (hope this is clear to you;-))
Then for each feature that will be returned to the user (as set by FEATURES_COUNT) all the ItemArrays from the featuredataset are placed in the string.
I've added exceptions where necessary. I should have added an exception for quering layers which are set WMSQueryable= false, but I forgot ;-)
A difference between the WMS1.1.1 spec and the WMS 1.3.0 spec is the parameter name of the point clicked by the user. It used to be X and Y in 1.1.1, but this has changed to I and J in 1.3.0. In order to make life a little bit easy for myself in OpenLayers and for others which might not know about this change, I added support for X and Y as well. If both are within the Request, the I and J will overwrite values set by X and Y. Including neither X&Y nor I&J will result in an exception.
These are the major changes.