slowly it works..

master
steffen 13 years ago
parent 5c0bfbe028
commit 3bc2432a44

@ -1182,7 +1182,7 @@ struct s_osmareapnt {
};
#define MAX_SUBID 40
#define MAX_SUBID 250
int osm_area_split_add (struct s_osmmarea *marea) {
/* allocate enought memory */
struct map_area *a = NULL;
@ -1191,7 +1191,7 @@ int osm_area_split_add (struct s_osmmarea *marea) {
int _debug = 0;
float angle_sum;
if (marea->marea->id == 18763935) _debug = 1;
if (marea->marea->id == 22963833) _debug = 0;
else return 1;
d_printf ("marea: %lld cnt:%d", marea->marea->id, marea->marea->p_cnt);
// map_area_add (marea->marea, MHLOAD_RELOAD);
@ -1221,7 +1221,7 @@ int osm_area_split_add (struct s_osmmarea *marea) {
while (pt[0].pnr >= 0 && pt_c > 2 && a->subid < MAX_SUBID) {
/* st - will keep first pt to start checking polygon
* c - count how many angles are above 180° */
d_printf ("**************** subid:%d pt_c:%d", a->subid, pt_c);
if (_debug) d_printf ("**************** subid:%d pt_c:%d", a->subid, pt_c);
for (angle_sum = 0.0, st = -1, c = 0, i = 0; i < pt_c; i++) {
if (i == pt_c-1) pt[i].angle = point_angle (pt[i-1].km, pt[i].km, pt[0].km);
else if (i == 0) pt[i].angle = point_angle (pt[pt_c-1].km, pt[i].km, pt[i+1].km);
@ -1289,8 +1289,8 @@ int osm_area_split_add (struct s_osmmarea *marea) {
if (_debug) d_printf ("select %d [pnr:%d] second:%d", sel, pt[sel].pnr, s);
for (i = 0; i < pt_c; i++) {
if (i != sel) {
pt[i].sel_angle = point_angle (pt[i].km, pt[st].km, pt[s].km);
pt[i].sel_dist = vec_len (vec_sub (pt[i].km, pt[st].km));
pt[i].sel_angle = point_angle (pt[i].km, pt[sel].km, pt[s].km);
pt[i].sel_dist = vec_len (vec_sub (pt[i].km, pt[sel].km));
}
else {
pt[i].sel_angle = -2.0;
@ -1332,11 +1332,12 @@ int osm_area_split_add (struct s_osmmarea *marea) {
if (a->p_cnt < 3) {
/* found nothing try next one */
i = sel + 1; if (i >= pt_c) i = 0;
do {
sel = i;
i++; if (i >= pt_c) i = 0;
} while (sel > st && (pt[i].angle > M_PI || pt[sel].angle < M_PI));
// i = sel + 1; if (i >= pt_c) i = 0;
// do {
// sel = i;
// i++; if (i >= pt_c) i = 0;
// } while (sel > st && (pt[i].angle > M_PI || pt[sel].angle < M_PI));
sel++; if (sel >= pt_c) sel = 0;
}
} while (sel > st && a->p_cnt < 3);

Loading…
Cancel
Save