latlong( CLLocationCoordinate2D
) が MKMapview に描画された MKPolygon 内にあるかどうかを検証しています。
以下のコードを使用して、MKMapview に MKPolygon を描画しています。
MKPolygon *polygon = [MKPolygon polygonWithCoordinates:coordinates count:count];
[mapviewcontroller.mapview addOverlay:polygon];
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay
{
MKPolygonRenderer *renderer = [[MKPolygonRenderer alloc] initWithPolygon:overlay];
renderer.fillColor = [[UIColor grayColor] colorWithAlphaComponent:0.2];
renderer.strokeColor = [[UIColor blackColor] colorWithAlphaComponent:0.7];
renderer.lineWidth = 2;
return renderer;
}
MKPolygon 内の latlong を検証しています。
CLLocationCoordinate2D sampleLocation = CLLocationCoordinate2DMake(13,80);//13,80 is the latlong of clear colored area of the MKPolygon in the below image.
MKMapPoint mapPoint = MKMapPointForCoordinate(sampleLocation);
CGPoint mapPointAsCGP = CGPointMake(mapPoint.x, mapPoint.y);
for (id<MKOverlay> overlay in mapview.overlays) {
if([overlay isKindOfClass:[MKPolygon class]]){
MKPolygon *polygon = (MKPolygon*) overlay;
CGMutablePathRef mpr = CGPathCreateMutable();
MKMapPoint *polygonPoints = polygon.points;
for (int p=0; p < polygon.pointCount; p++){
MKMapPoint mp = polygonPoints[p];
if (p == 0)
CGPathMoveToPoint(mpr, NULL, mp.x, mp.y);
else
CGPathAddLineToPoint(mpr, NULL, mp.x, mp.y);
}
if(CGPathContainsPoint(mpr , NULL, mapPointAsCGP, FALSE)){
isInside = YES;
}
CGPathRelease(mpr);
}
}
通常のケースではうまく機能しますが、ユーザーが以下のようなポリゴンを描画すると、MKpolygon には交差するいくつかのポイントがあり、ある領域では色が塗りつぶされ、ある領域では色がクリアされます。
MKPolygon 内の透明な色の部分の緯度経度を渡すと、NO が返されるはずです。しかし、それはYESを返しています。つまり、if(CGPathContainsPoint(mpr , NULL, mapPointAsCGP, FALSE))
TRUE です。
MKPolygon が交差している間にこの問題を修正するにはどうすればよいですか? 誰かがそのクリアな色の領域に色を塗りつぶすことを提案した方が良い. どんな提案でも大歓迎です。