Gmap.net 仅显示多边形内的标记
Gmap.net show only markers within polygon
我目前正在与 gmap.net 一起使用多边形创建一定的半径。我目前已经为半径制作了一个多边形,但现在我遇到了一个问题,我想创建多个标记但只显示多边形内的标记。这可能吗?
_polygonOverlay = new GMapOverlay("destination");
_gMap.Overlays.Add(_polygonOverlay);
private void CreateCircle(PointLatLng destination, double radius)
{
List<PointLatLng> radiusPoint = new List<PointLatLng>();
double seg = Math.PI * 2 / 40;
for (int i = 0; i < 40; i++)
{
double theta = seg * i;
double latitude = destination.Lat + Math.Cos(theta) * radius;
double longitude = destination.Lng + Math.Sin(theta) * radius;
PointLatLng cirlePoint = new PointLatLng(latitude, longitude);
radiusPoint.Add(cirlePoint);
}
GMapPolygon radiusCircle = new GMapPolygon(radiusPoint, "radius");
_polygonOverlay.Polygons.Add(radiusCircle);
}
private void CreateMarkers()
{
_polygonOverlay.Markers.Add(new GMarkerGoogle(new PointLatLng(xxx, xxx), GMarkerGoogleType.blue));
_polygonOverlay.Markers.Add(new GMarkerGoogle(new PointLatLng(xxx, xxx), GMarkerGoogleType.blue));
_polygonOverlay.Markers.Add(new GMarkerGoogle(new PointLatLng(xxx, xxx), GMarkerGoogleType.blue));
}
这是我创建一个圆(仍然需要一些工作)和一些标记的代码示例。
已经谢谢了
由于您正在处理一个圆,您应该能够简单地检查您的标记与圆心的距离。如果距离大于半径,则不要将其添加到叠加层。
GMap 使您可以访问确定此信息的必要方法。做这样的事情:
//Assuming p1 is your marker and p2 is your circle center coordinate
double markerDist = GMap.NET.MapProviders.EmptyProvider.Instance.Projection.GetDistance(p1.Position, p2);
if(markerDist <= circleRadius)
{
//Add the marker to the overlay
}
假设您有一个 GMapPolygon
和一些点数,您可以只使用
bool inside = gMapPolygon.IsInside(point)
检查 GMarker
的 point
是否在 GMapPolygon
中
我目前正在与 gmap.net 一起使用多边形创建一定的半径。我目前已经为半径制作了一个多边形,但现在我遇到了一个问题,我想创建多个标记但只显示多边形内的标记。这可能吗?
_polygonOverlay = new GMapOverlay("destination");
_gMap.Overlays.Add(_polygonOverlay);
private void CreateCircle(PointLatLng destination, double radius)
{
List<PointLatLng> radiusPoint = new List<PointLatLng>();
double seg = Math.PI * 2 / 40;
for (int i = 0; i < 40; i++)
{
double theta = seg * i;
double latitude = destination.Lat + Math.Cos(theta) * radius;
double longitude = destination.Lng + Math.Sin(theta) * radius;
PointLatLng cirlePoint = new PointLatLng(latitude, longitude);
radiusPoint.Add(cirlePoint);
}
GMapPolygon radiusCircle = new GMapPolygon(radiusPoint, "radius");
_polygonOverlay.Polygons.Add(radiusCircle);
}
private void CreateMarkers()
{
_polygonOverlay.Markers.Add(new GMarkerGoogle(new PointLatLng(xxx, xxx), GMarkerGoogleType.blue));
_polygonOverlay.Markers.Add(new GMarkerGoogle(new PointLatLng(xxx, xxx), GMarkerGoogleType.blue));
_polygonOverlay.Markers.Add(new GMarkerGoogle(new PointLatLng(xxx, xxx), GMarkerGoogleType.blue));
}
这是我创建一个圆(仍然需要一些工作)和一些标记的代码示例。
已经谢谢了
由于您正在处理一个圆,您应该能够简单地检查您的标记与圆心的距离。如果距离大于半径,则不要将其添加到叠加层。
GMap 使您可以访问确定此信息的必要方法。做这样的事情:
//Assuming p1 is your marker and p2 is your circle center coordinate
double markerDist = GMap.NET.MapProviders.EmptyProvider.Instance.Projection.GetDistance(p1.Position, p2);
if(markerDist <= circleRadius)
{
//Add the marker to the overlay
}
假设您有一个 GMapPolygon
和一些点数,您可以只使用
bool inside = gMapPolygon.IsInside(point)
检查 GMarker
的 point
是否在 GMapPolygon