public override double GetSurfacePointAltitudeNow(double lat, double lng, bool meters, int targetLevel)
        {
            if (level < targetLevel)
            {
                int yOffset = 0;
                if (dataset.Mercator || dataset.BottomsUp)
                {
                    yOffset = 1;
                }
                int xOffset = 0;

                int xMax       = 2;
                int childIndex = 0;
                for (int y1 = 0; y1 < 2; y1++)
                {
                    for (int x1 = 0; x1 < xMax; x1++)
                    {
                        //  if (level < (demEnabled ? 12 : dataset.Levels))
                        if (level < dataset.Levels && level < (targetLevel + 1))
                        {
                            Tile child = TileCache.GetCachedTile(childrenId[childIndex]);
                            if (child == null || !child.ReadyToRender)
                            {
                                countCreatedForNow++;
                                child = TileCache.GetTileNow(level + 1, x * 2 + ((x1 + xOffset) % 2), y * 2 + ((y1 + yOffset) % 2), dataset, this);
                                childrenId[childIndex] = child.Key;
                            }
                            childIndex++;
                            if (child != null)
                            {
                                if (child.IsPointInTile(lat, lng))
                                {
                                    double retVal = child.GetSurfacePointAltitudeNow(lat, lng, meters, targetLevel);
                                    if (retVal != 0)
                                    {
                                        return(retVal);
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return(GetAltitudeFromLatLng(lat, lng, meters));
        }
        public override double GetSurfacePointAltitudeNow(double lat, double lng, bool meters, int targetLevel)
        {
            if (level < targetLevel)
            {
                int yOffset = 0;
                if (dataset.Mercator || dataset.BottomsUp)
                {
                    yOffset = 1;
                }
                int xOffset = 0;

                int xMax       = 2;
                int childIndex = 0;
                for (int y1 = 0; y1 < 2; y1++)
                {
                    for (int x1 = 0; x1 < xMax; x1++)
                    {
                        //  if (level < (demEnabled ? 12 : dataset.Levels))
                        if (level < dataset.Levels && level < (targetLevel + 1))
                        {
                            Tile child = TileCache.GetTileNow(level + 1, x * 2 + ((x1 + xOffset) % 2), y * 2 + ((y1 + yOffset) % 2), dataset, this);
                            childrenId[childIndex++] = child.Key;
                            if (child != null)
                            {
                                if (child.IsPointInTile(lat, lng))
                                {
                                    double retVal = child.GetSurfacePointAltitudeNow(lat, lng, meters, targetLevel);
                                    if (retVal != 0)
                                    {
                                        return(retVal);
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }

            double alt = GetAltitudeAtLatLng(lat, lng, meters ? 1 : DemScaleFactor);

            return(alt);
        }