Compute all the lineString/segment lengths and determine the longest lineString of a multiLineString * shape: in paramater, the multiLineString to compute. * segment_lengths: out parameter, the segment lengths of all lineString. * line_lengths: out parameter, the lineString lengths of the multiLineString. * max_line_index: out parameter, the index of the longest lineString of the multiLineSt
| 1515 | * segment_index: out parameter, the index of the longest lineString of the multiLineString. |
| 1516 | */ |
| 1517 | void msPolylineComputeLineSegments(shapeObj *shape, double ***segment_lengths, double **line_lengths, int *max_line_index, double *max_line_length, int *segment_index, double *total_length) |
| 1518 | { |
| 1519 | int i, j, temp_segment_index; |
| 1520 | double segment_length, max_segment_length; |
| 1521 | |
| 1522 | (*segment_lengths) = (double **) msSmallMalloc(sizeof(double *) * shape->numlines); |
| 1523 | (*line_lengths) = (double *) msSmallMalloc(sizeof(double) * shape->numlines); |
| 1524 | |
| 1525 | temp_segment_index = *segment_index = *max_line_index = 0; |
| 1526 | |
| 1527 | *total_length = 0; |
| 1528 | *max_line_length = 0; |
| 1529 | for(i=0; i<shape->numlines; i++) { |
| 1530 | |
| 1531 | (*segment_lengths)[i] = (double*) msSmallMalloc(sizeof(double) * shape->line[i].numpoints); |
| 1532 | |
| 1533 | (*line_lengths)[i] = 0; |
| 1534 | max_segment_length = 0; |
| 1535 | for(j=1;j<shape->line[i].numpoints;j++) { |
| 1536 | segment_length = sqrt((((shape->line[i].point[j].x-shape->line[i].point[j-1].x)*(shape->line[i].point[j].x-shape->line[i].point[j-1].x)) + ((shape->line[i].point[j].y-shape->line[i].point[j-1].y)*(shape->line[i].point[j].y-shape->line[i].point[j-1].y)))); |
| 1537 | (*line_lengths)[i] += segment_length; |
| 1538 | (*segment_lengths)[i][j-1] = segment_length; |
| 1539 | if(segment_length > max_segment_length) { |
| 1540 | max_segment_length = segment_length; |
| 1541 | temp_segment_index = j; |
| 1542 | } |
| 1543 | } |
| 1544 | |
| 1545 | *total_length += (*line_lengths)[i]; |
| 1546 | |
| 1547 | if((*line_lengths)[i] > *max_line_length) { |
| 1548 | *max_line_length = (*line_lengths)[i]; |
| 1549 | *max_line_index = i; |
| 1550 | *segment_index = temp_segment_index; |
| 1551 | } |
| 1552 | } |
| 1553 | } |
| 1554 | |
| 1555 | /* |
| 1556 | ** If no repeatdistance, find center of longest segment in polyline p. The polyline must have been converted |
no test coverage detected