예제 #1
0
        private static bool IsIncludedInQtree(Mapa mapa, BaseQtree qtree)
        {
            var header = mapa.Header;
            var minlat = Util.LatitudFromWorldCoord(header.YMin);
            var maxlat = Util.LatitudFromWorldCoord(header.YMax);
            var minlon = Util.LongitudFromWorldCoord(header.XMin);
            var maxlon = Util.LongitudFromWorldCoord(header.XMax);
            var bottom = Math.Min(minlat, maxlat);
            var top    = Math.Max(minlat, maxlat);
            var left   = Math.Min(minlon, maxlon);
            var right  = Math.Max(minlon, maxlon);

            return(qtree.IsInsideQtree(top, bottom, left, right));
        }
예제 #2
0
        private void Generate(BaseQtree qtree, Mapa mapa)
        {
            if (!IsIncludedInQtree(mapa, qtree))
            {
                return;
            }

            for (var j = mapa.Poligonales.Count - 1; j >= 0; j--)
            {
                var poligonal = mapa.Poligonales[j];
                if (!Drawable(poligonal.Nivel))
                {
                    continue;
                }

                var vertices = mapa.Poligonales.GetVertices(j);

                LonLat last     = null;
                var    drawNext = true;
                foreach (var vertice in vertices)
                {
                    var lonlat = new LonLat(mapa.Coords[Math.Abs(vertice)]);
                    if (last != null && drawNext)
                    {
                        var qs = qtree.MakeLeafLine(last.Longitud, last.Latitud, lonlat.Longitud, lonlat.Latitud, GetNivel(poligonal.Nivel).BrushSize);
                        for (var i = 0; i < qs.Count; i++)
                        {
                            var leaf = qs[i];
                            if (!leaf.Locked && CanOverwrite(poligonal.Nivel, leaf.Valor) &&
                                qtree.IsInsideQtree(leaf.Posicion.Latitud, leaf.Posicion.Longitud))
                            {
                                var latlon = qtree.GetCenterLatLon(leaf.Posicion);
                                qs[i] = qtree.SetValue(latlon.Latitud, latlon.Longitud, GetNivel(poligonal.Nivel).NivelQtree);
                                qtree.Commit();
                            }
                        }
                    }
                    last     = lonlat;
                    drawNext = vertice > 0;
                }
            }
        }