public override void OnMapMouseDoubleClick(object sender, MouseEventArgs e)
{
if (!_start) return;
PointLatLng currentPoint = this._gMapControl.FromLocalToLatLng(e.X, e.Y);
double mercatorX, mercatorY;
Helper.LonLat2Mercator(currentPoint.Lng, currentPoint.Lat, out mercatorX, out mercatorY);
Point2D point2D = new Point2D(mercatorX, mercatorY);
_point2Ds.Add(point2D);
Map map = new Map(_mapUrl);
QueryParameterSet queryParameterSet = new QueryParameterSet();
queryParameterSet.ReturnContent = true;
queryParameterSet.QueryOption = QuerySetting.QueryOption;
queryParameterSet.ExpectCount = QuerySetting.ExceptionCount;
queryParameterSet.QueryParams = new QueryParameter[QuerySetting.LayerNames.Count];
for (int i = 0; i < QuerySetting.LayerNames.Count; i++)
{
queryParameterSet.QueryParams[i] = new QueryParameter();
queryParameterSet.QueryParams[i].Name = QuerySetting.LayerNames[i];
}
Geometry geo = new Geometry();
geo.Parts = new int[1] { _point2Ds.Count };
geo.Points = _point2Ds.ToArray();
geo.Type = GeometryType.REGION;
QueryResult queryResult = null;
try
{
queryResult = map.QueryByGeometry(_mapName, geo, SpatialQueryMode.INTERSECT, queryParameterSet);
}
catch (ServiceException serviceException)
{
MessageBox.Show(serviceException.Message);
}
//高亮显示查询结果。
if (queryResult != null && queryResult.Recordsets != null && queryResult.Recordsets.Length > 0)
{
for (int i = 0; i < queryResult.Recordsets.Length; i++)
{
if (queryResult.Recordsets[i] != null && queryResult.Recordsets[i].Features != null &&
queryResult.Recordsets[i].Features.Length > 0)
{
for (int j = 0; j < queryResult.Recordsets[i].Features.Length; j++)
{
if (queryResult.Recordsets[i].Features[j].Geometry != null && (
queryResult.Recordsets[i].Features[j].Geometry.Type == GeometryType.POINT
|| queryResult.Recordsets[i].Features[j].Geometry.Type == GeometryType.TEXT))
{
double lat, lng;
Helper.Mercator2LonLat(queryResult.Recordsets[i].Features[j].Geometry.Points[0].X, queryResult.Recordsets[i].Features[j].Geometry.Points[0].Y, out lng, out lat);
PointLatLng pointLatLng = new PointLatLng(lat, lng);
GMapMarkerGoogleRed marker = new GMapMarkerGoogleRed(pointLatLng);
_highLightOverlay.Markers.Add(marker);
}
else if (queryResult.Recordsets[i].Features[j].Geometry != null &&
(queryResult.Recordsets[i].Features[j].Geometry.Type == GeometryType.REGION
|| queryResult.Recordsets[i].Features[j].Geometry.Type == GeometryType.RECTANGLE))
{
if (queryResult.Recordsets[i].Features[j].Geometry.Parts != null)
//queryResult.Recordsets[i].Features[j].Geometry.Parts.Length > 1)
{
int startIndex = 0;
for (int k = 0; k < queryResult.Recordsets[i].Features[j].Geometry.Parts.Length; k++)
{
List<PointLatLng> regionClient = new List<PointLatLng>();
for (int n = startIndex; n < queryResult.Recordsets[i].Features[j].Geometry.Parts[k]; n++)
{
double lat, lng;
Helper.Mercator2LonLat(queryResult.Recordsets[i].Features[j].Geometry.Points[n].X, queryResult.Recordsets[i].Features[j].Geometry.Points[n].Y, out lng, out lat);
regionClient.Add(new PointLatLng(lat, lng));
}
GMapPolygonExtension hight = new GMapPolygonExtension("", regionClient, 2.0F,
System.Drawing.Color.FromArgb(125, 255, 0, 0), System.Drawing.Color.FromArgb(50, 255, 0, 0));
_highLightOverlay.Polygons.Add(hight);
startIndex += queryResult.Recordsets[i].Features[j].Geometry.Parts[k];
}
}
}
else if (queryResult.Recordsets[i].Features[j].Geometry != null &&
(queryResult.Recordsets[i].Features[j].Geometry.Type == GeometryType.LINE))
{
int startIndex = 0;
for (int k = 0; k < queryResult.Recordsets[i].Features[j].Geometry.Parts.Length; k++)
{
List<PointLatLng> regionClient = new List<PointLatLng>();
for (int n = startIndex; n < startIndex + queryResult.Recordsets[i].Features[j].Geometry.Parts[k]; n++)
{
double lat, lng;
Helper.Mercator2LonLat(queryResult.Recordsets[i].Features[j].Geometry.Points[n].X, queryResult.Recordsets[i].Features[j].Geometry.Points[n].Y, out lng, out lat);
regionClient.Add(new PointLatLng(lat, lng));
}
GMapRouteExtension hight = new GMapRouteExtension("", regionClient,
System.Drawing.Color.FromArgb(125, 255, 0, 0), 5.0F, false);
_highLightOverlay.Routes.Add(hight);
startIndex += queryResult.Recordsets[i].Features[j].Geometry.Parts[k];
}
}
}
}
}
}
_gMapOverlay.Polygons.Clear();
_points.Clear();
_point2Ds.Clear();
flag = false;
_start = false;
base.OnMapMouseDoubleClick(sender, e);
}