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

Loading…
Cancel
Save