да, с сервером, походу, работает мало народу
А я тут дошел до следующего
protected void Map1_Point(object sender, ESRI.ArcGIS.ADF.Web.UI.WebControls.PointEventArgs args)
{
Int32 x = Convert.ToInt32(args.ScreenPoint.X);
Int32 y = Convert.ToInt32(args.ScreenPoint.Y);
ESRI.ArcGIS.ADF.Web.Geometry.Point mapPoint = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(x, y,
Map1.GetTransformationParams(TransformationDirection.ToMap));
if (map == null)
{
map = CWebApp.get_MapServerCtx(Map1, 0);
}
//IPoint MapPoint = m_WebApp.ServerContext.CreateObject("esriGeometry.Point") as IPoint;
//MapPoint.X = mapPoint.X;
//MapPoint.Y = mapPoint.Y;
map.ClearSelection();
IEnvelope pEnvelope = new EnvelopeClass();
IActiveView pActiveView = map as IActiveView;
//IDisplayTransformation pDisplayTrans = pActiveView.ScreenDisplay.DisplayTransformation;
//pDisplayTrans.TransformRect(pEnvelope, ref r, 4); //5 = esriTransformPosition + esriTransformToMap.
pEnvelope.XMax = mapPoint.X;
pEnvelope.XMin = mapPoint.X + 1;
pEnvelope.YMax = mapPoint.Y;
pEnvelope.YMin = mapPoint.Y + 1;
pEnvelope.SpatialReference = map.SpatialReference;
ISelectionEnvironment pSelectionEnvironment = new SelectionEnvironmentClass();
pSelectionEnvironment.CombinationMethod = esriSelectionResultEnum.esriSelectionResultNew;
pSelectionEnvironment.PointSelectionMethod = esriSpatialRelEnum.esriSpatialRelIntersects;
map.SelectByShape(pEnvelope, pSelectionEnvironment, false);
ISelection pSel = map.FeatureSelection;
IDisplay pDisp = pActiveView.ScreenDisplay;
ESRI.ArcGIS.esriSystem.ITrackCancel pTrC = new TrackCancelClass();
pSel.Draw(pDisp, pTrC);
pActiveView.Refresh();
Map1.Refresh();
System.Windows.Forms.MessageBox.Show(" Selected:" + map.SelectionCount.ToString());
}
плюс статические метод для получения объекта карты через IMap:
public static IMap get_MapServerCtx(ESRI.ArcGIS.ADF.Web.UI.WebControls.Map MapCtrl, int MapResoursNumber)
{
MapFunctionality mf = (MapFunctionality)MapCtrl.GetFunctionality(MapResoursNumber);
MapResourceLocal mr_local = (MapResourceLocal)mf.MapResource;
IServerContext ctx = mr_local.ServerContextInfo.ServerContext;
IMapServer ms = (IMapServer)ctx.ServerObject;
IMapServerObjects mso = (IMapServerObjects)ms;
MapInformation m_MapInfo = (MapInformation)mr_local.MapInformation;
String dataFrame = m_MapInfo.DataFrame;
return mso.get_Map(dataFrame);
}
Мэсседжбокс вроде выдает кол-во объектов "под кликом", но только с тех слоев, которые были видны по-дефолту. Если включить видимость еще какого нибудь слоя, в селекшн объекты с него не попадают.
Чего не хватает?
Не ругайте меня сильно, потому как мало опыта в SOA