//放大的代码:
private void MapZoomIn(NameValueCollection queryString)
{
SharpMap.Map map = Session["map"] as SharpMap.Map;
PointF pointFLeftBottom = new PointF(float.Parse(queryString["Left"]), float.Parse(queryString["Bottom"]));
PointF pointFRightTop = new PointF(float.Parse(queryString["Right"]), float.Parse(queryString["Top"]));
SharpMap.Geometries.BoundingBox zoomToBoundingBox = new SharpMap.Geometries.BoundingBox(map.ImageToWorld(pointFLeftBottom), map.ImageToWorld(pointFRightTop));
map.ZoomToBox(zoomToBoundingBox);
Session.Remove("map");
Session["map"] = map;
}
//缩小的代码:
private void MapZoomOut(NameValueCollection queryString)
{
SharpMap.Map map = Session["map"] as SharpMap.Map;
PointF pointFLeftBottom = new PointF(float.Parse(queryString["Left"]), float.Parse(queryString["Bottom"]));
PointF pointFRightTop = new PointF(float.Parse(queryString["Right"]), float.Parse(queryString["Top"]));
SharpMap.Geometries.BoundingBox boundingBox = new SharpMap.Geometries.BoundingBox(map.ImageToWorld(pointFLeftBottom), map.ImageToWorld(pointFRightTop));
SharpMap.Geometries.Point mapCenterPoint = boundingBox.GetCentroid();
double ratio = 0.0;
double ratioX=boundingBox.Width / map.Envelope.Width;
double ratioY=boundingBox.Height / map.Envelope.Height;
if (ratioX > ratioY)
{
ratio = ratioX;
}
else
{
ratio = ratioY;
}
double semiWidth = map.Envelope.Width / ratio / 2;
double semiHeight = map.Envelope.Height / ratio / 2;
SharpMap.Geometries.BoundingBox zoomToBoundingBox = new SharpMap.Geometries.BoundingBox(mapCenterPoint.X - semiWidth, mapCenterPoint.Y - semiHeight, mapCenterPoint.X + semiWidth, mapCenterPoint.Y + semiHeight);
map.ZoomToBox(zoomToBoundingBox);
Session.Remove("map");
Session["map"] = map;
}
//平移的代码:
private void MapPan(NameValueCollection queryString)
{
SharpMap.Map map = Session["map"] as SharpMap.Map;
PointF pointFFirst = new PointF(float.Parse(queryString["FirstX"]), float.Parse(queryString["FirstY"]));
PointF pointFSecond = new PointF(float.Parse(queryString["SecondX"]), float.Parse(queryString["SecondY"]));
SharpMap.Geometries.Point firstPoint = map.ImageToWorld(pointFFirst);
SharpMap.Geometries.Point secondPoint = map.ImageToWorld(pointFSecond);
SharpMap.Geometries.Point mapCenterPoint = map.Center;
SharpMap.Geometries.Point mapNewCenterPoint = new SharpMap.Geometries.Point(mapCenterPoint.X + firstPoint.X - secondPoint.X, mapCenterPoint.Y + firstPoint.Y - secondPoint.Y);
map.Center = mapNewCenterPoint;
Session.Remove("map");
Session["map"] = map;
}
//全图显示的代码:
private void MapFullExtent(NameValueCollection queryString)
{
SharpMap.Map map = Session["map"] as SharpMap.Map;
map.ZoomToExtents();
Session.Remove("map");
Session["map"] = map;
}
//空间查询的代码:
private void MapQuery(NameValueCollection queryString)
{
SharpMap.Map map = Session["map"] as SharpMap.Map;
PointF pointFLeftBottom = new PointF(float.Parse(queryString["Left"]), float.Parse(queryString["Bottom"]));
PointF pointFRightTop = new PointF(float.Parse(queryString["Right"]), float.Parse(queryString["Top"]));
SharpMap.Geometries.BoundingBox boundingBox = new SharpMap.Geometries.BoundingBox(map.ImageToWorld(pointFLeftBottom), map.ImageToWorld(pointFRightTop));
SharpMap.Data.FeatureDataSet featureDataSet = new SharpMap.Data.FeatureDataSet();
ILayer pLayer = map.GetLayerByName(queryString["LayerName"]);
SharpMap.Layers.VectorLayer vectorLayer = pLayer as SharpMap.Layers.VectorLayer;
vectorLayer.DataSource.ExecuteIntersectionQuery(boundingBox, featureDataSet);
if (featureDataSet.Tables.Count > 0) //得到了结果
{
//增加点击选择的对象到selection图层
//这样就新增了一个图层,因此渲染该副地图则显示选中对象
SharpMap.Layers.VectorLayer layerSelected = new SharpMap.Layers.VectorLayer("Selection");
layerSelected.DataSource = new SharpMap.Data.Providers.GeometryProvider(featureDataSet.Tables[0]);
layerSelected.Style.Fill = new System.Drawing.SolidBrush(System.Drawing.Color.Yellow);
map.Layers.Add(layerSelected);
}
Session.Remove("map");
Session["map"] = map;
}
//长度测量的代码:
private void MapMeasurePolyline(NameValueCollection queryString, out string responseXML)
{
SharpMap.Map map = Session["map"] as SharpMap.Map;
string pointsCoordinate = queryString["PointsCoordinate"];
string[] pointCoordinatePair = pointsCoordinate.Split(',');
SharpMap.Geometries.LineString lineStringMeasure = new SharpMap.Geometries.LineString();
for (int i = 0; i < pointCoordinatePair.Length / 2; i++)
{
PointF pointF=new PointF(Convert.ToSingle(pointCoordinatePair[i*2]),Convert.ToSingle(pointCoordinatePair[i*2+1]));
SharpMap.Geometries.Point point = map.ImageToWorld(pointF);
lineStringMeasure.Vertices.Add(point);
}
StringBuilder resultsXML = new StringBuilder("");
resultsXML.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
resultsXML.Append("<map>");
resultsXML.Append("<measure>");
resultsXML.Append("<长度>");
resultsXML.Append("<![CDATA[");
resultsXML.Append(lineStringMeasure.Length.ToString());
resultsXML.Append("]]>");
resultsXML.Append("</长度>");
resultsXML.Append("</measure>");
resultsXML.Append("</map>");
responseXML = resultsXML.ToString();
}