| 511 | } |
| 512 | |
| 513 | int msShapeGetClass(layerObj *layer, mapObj *map, shapeObj *shape, int *classgroup, int numclasses) |
| 514 | { |
| 515 | int i, iclass; |
| 516 | |
| 517 | /* INLINE features do not work with expressions, allow the classindex */ |
| 518 | /* value set prior to calling this function to carry through. */ |
| 519 | if(layer->connectiontype == MS_INLINE) { |
| 520 | if(shape->classindex < 0 || shape->classindex >= layer->numclasses) return(-1); |
| 521 | |
| 522 | if(map->scaledenom > 0) { /* verify scaledenom here */ |
| 523 | if((layer->class[shape->classindex]->maxscaledenom > 0) && (map->scaledenom > layer->class[shape->classindex]->maxscaledenom)) |
| 524 | return(-1); /* can skip this feature */ |
| 525 | if((layer->class[shape->classindex]->minscaledenom > 0) && (map->scaledenom <= layer->class[shape->classindex]->minscaledenom)) |
| 526 | return(-1); /* can skip this feature */ |
| 527 | } |
| 528 | |
| 529 | return(shape->classindex); |
| 530 | } |
| 531 | |
| 532 | if (layer->numclasses > 0) { |
| 533 | if (classgroup == NULL || numclasses <=0) |
| 534 | numclasses = layer->numclasses; |
| 535 | |
| 536 | for(i=0; i<numclasses; i++) { |
| 537 | if (classgroup) |
| 538 | iclass = classgroup[i]; |
| 539 | else |
| 540 | iclass = i; |
| 541 | |
| 542 | if (iclass < 0 || iclass >= layer->numclasses) |
| 543 | continue; /* this should never happen but just in case */ |
| 544 | |
| 545 | if(map->scaledenom > 0) { /* verify scaledenom here */ |
| 546 | if((layer->class[iclass]->maxscaledenom > 0) && (map->scaledenom > layer->class[iclass]->maxscaledenom)) |
| 547 | continue; /* can skip this one, next class */ |
| 548 | if((layer->class[iclass]->minscaledenom > 0) && (map->scaledenom <= layer->class[iclass]->minscaledenom)) |
| 549 | continue; /* can skip this one, next class */ |
| 550 | } |
| 551 | |
| 552 | /* verify the minfeaturesize */ |
| 553 | if ((shape->type == MS_SHAPE_LINE || shape->type == MS_SHAPE_POLYGON) && (layer->class[iclass]->minfeaturesize > 0)) |
| 554 | { |
| 555 | double minfeaturesize = Pix2LayerGeoref(map, layer, |
| 556 | layer->class[iclass]->minfeaturesize); |
| 557 | if (msShapeCheckSize(shape, minfeaturesize) == MS_FALSE) |
| 558 | continue; //skip this one, next class |
| 559 | } |
| 560 | |
| 561 | if(layer->class[iclass]->status != MS_DELETE && msEvalExpression(layer, shape, &(layer->class[iclass]->expression), layer->classitemindex) == MS_TRUE) |
| 562 | return(iclass); |
| 563 | } |
| 564 | } |
| 565 | |
| 566 | return(-1); /* no match */ |
| 567 | } |
| 568 | |
| 569 | char *msShapeGetAnnotation(layerObj *layer, shapeObj *shape) |
| 570 | { |
no test coverage detected