⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mapcanvas.java

📁 j2me写的google地图
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    }

    public Float getSpeed()
    {
        if(m_lastLocation == null)
            return new Float(0L);
        else
            return m_lastLocation.speed;
    }

    public Float getDir()
    {
        if(m_lastLocation == null)
            return new Float(0L);
        else
            return m_lastLocation.m_dir;
    }

    public Float getAlt()
    {
        if(m_lastLocation == null)
            return new Float(0L);
        else
            return m_lastLocation.speed;
    }

    public static Float convLat(int fromY)
    {
        Float orig = new Float(0x1000000L);
        Float res = new Float(fromY);
        Float div = orig.Div(Float.PI).Neg();
        res = Float.exp(res.Sub(orig).Div(div));
        res = Float.toDegrees(Float.atan(res).Mul(2L).Sub(Float.PIdiv2));
        return res;
    }

    public boolean selNext(int dir)
    {
        if(listPlaces.size() != 0)
        {
            int pos = 0;
            if(currentSel != null)
                pos = listPlaces.indexOf(currentSel) + dir;
            if(pos >= listPlaces.size())
                pos = 0;
            if(pos < 0)
                pos = listPlaces.size() - 1;
            setSelectedLoc((OneLoc)listPlaces.elementAt(pos));
            if(UtilMidp.DEBUG)
                System.out.println("new pos:" + pos);
            gotoLonLat(currentSel.m_lon, currentSel.m_lat, zoom, m_modeSat);
            wayPoint = currentSel;
            if(m_autoPositionningEnabeld)
                m_autoTrack = false;
            repaint();
            return true;
        } else
        {
            return false;
        }
    }

    public void setInfoOnScreen(String inInfo)
    {
        infoOnScreen = inInfo;
        infoTimeStamp = System.currentTimeMillis();
        repaint();
    }

    int drawAnIcon(Graphics g, int id, String val, int x, int y)
    {
        int size = g.getFont().stringWidth(val) + 8;
        x -= size - 2;
        g.setColor(0);
        g.fillRoundRect(x, y, size, sizeIcon, 6, 6);
        g.setColor(0xffffff);
        g.drawRoundRect(x, y, size, sizeIcon, 6, 6);
        g.drawString(val, x + size / 2, y, 17);
        offset[id][0] = x;
        offset[id][1] = size;
        return size;
    }

    public void paintIcons(Graphics g)
    {
        g.setFont(fontm);
        int h = g.getFont().getHeight();
        sizeIcon = h;
        posPlusIcon = (offx + width) - 4;
        int x = posPlusIcon;
        int y = 4 + offy;
        x -= drawAnIcon(g, 0, "X", x, y) + 4;
        x -= drawAnIcon(g, 1, "+", x, y) + 4;
        x -= drawAnIcon(g, 2, "-", x, y) + 4;
        x -= drawAnIcon(g, 3, m_modeSat ? "Map" : "Sat", x, y) + 4;
        x -= drawAnIcon(g, 4, ">", x, y) + 4;
    }

    int getIconPressed(int x, int y)
    {
        if(y >= 4 && y <= 4 + sizeIcon)
        {
            for(int i = 0; i < offset.length; i++)
                if(x >= offset[i][0] && x <= offset[0][0] + offset[0][1])
                    return i;

        }
        return -1;
    }

    protected void pointerPressed(int x, int y)
    {
        int icoIdx = getIconPressed(x, y);
        switch(icoIdx)
        {
        case 0: // '\0'
            m_fullScreen = !m_fullScreen;
            setFullScreenMode(m_fullScreen);
            if(m_fullScreen)
                setInfoOnScreen("FullScreen");
            else
                setInfoOnScreen("Normal");
            break;

        case 1: // '\001'
            setInfoOnScreen("Zoom +");
            setZoom(zoom - 1);
            break;

        case 2: // '\002'
            setInfoOnScreen("Zoom -");
            setZoom(zoom + 1);
            break;

        case 3: // '\003'
            changeSatMode();
            break;

        case 4: // '\004'
            keyPressedImpl(48);
            break;
        }
        if(icoIdx == -1)
        {
            dgx = x;
            dgy = y;
            OneLoc oldLoc = currentSel;
            setSelectedLoc(getSelectedItem(null, px + (dgx - width / 2) * (1 << zoom), py + (dgy - height / 2) * (1 << zoom), zoom, 10, false));
            if(oldLoc == currentSel)
            {
                boolean doIt = true;
                Enumeration en = m_listTrack.elements();
                do
                {
                    if(!en.hasMoreElements())
                        break;
                    Track tr = (Track)en.nextElement();
                    if(tr.listPlaces.contains(currentSel))
                        doIt = !tr.fireOpened(currentSel);
                } while(true);
                if((currentSel != null) & doIt)
                    fireOnLocationSelected(currentSel);
            }
        }
        repaint();
    }

    protected void checkMove()
    {
        if(px == oldpx && py == oldpy && oldzoom == zoom)
        {
            if(lastMove != 0L && System.currentTimeMillis() - lastMove > 3000L)
            {
                lastMove = 0L;
                Enumeration en = m_listTrack.elements();
                do
                {
                    if(!en.hasMoreElements())
                        break;
                    Track tr = (Track)en.nextElement();
                    if(tr.m_refreshType == 1)
                        tr.refreshTrack(this);
                } while(true);
                fireOnMoveEnd();
            }
        } else
        {
            lastMove = System.currentTimeMillis();
        }
        oldpx = px;
        oldpy = py;
        oldzoom = zoom;
    }

    protected void setSelectedLoc(OneLoc loc)
    {
        if(loc != currentSel)
        {
            if(loc != null)
            {
                Enumeration en = m_listTrack.elements();
                do
                {
                    if(!en.hasMoreElements())
                        break;
                    Track tr = (Track)en.nextElement();
                    if(tr.listPlaces.contains(loc))
                        tr.fireSelected(loc);
                } while(true);
            }
            currentSel = loc;
        }
    }

    protected void pointerDragged(int x, int y)
    {
        if(UtilMidp.DEBUG)
            System.out.println("dragged:" + x + " " + y);
        int dx = x - dgx;
        int dy = y - dgy;
        px -= dx * (1 << zoom);
        py -= dy * (1 << zoom);
        dgx = x;
        dgy = y;
        repaint();
    }

    public void keyRepeated(int i)
    {
    }

    public void keyPressed(int keyCode)
    {
        if(fireMapKeyPressed(keyCode))
            keyPressedImpl(keyCode);
        super.keyPressed(keyCode);
    }

    public void keyPressedImpl(int keyCode)
    {
        lastZoomTimeStamp = System.currentTimeMillis();
        int action = getGameAction(keyCode);
        if(UtilMidp.DEBUG)
            System.out.println("code :" + keyCode + "(" + (char)keyCode + ") action:" + action);
        int div = 1 << zoom;
        boolean processed = false;
        if(m_modeShortkey)
        {
            if(extendedMenu != null)
                processed = extendedMenu.onMenuSelected(keyCode - 48);
            m_modeShortkey = false;
            repaint();
            return;
        }
        switch(keyCode)
        {
        case 48: // '0'
        case 100: // 'd'
            setCurSat(getCurSat() + 1);
            switch(getCurSat())
            {
            case 0: // '\0'
                setInfoOnScreen("Using Google data");
                break;

            case 1: // '\001'
                setInfoOnScreen("Using VirtualEarth data");
                break;

            case 2: // '\002'
                setInfoOnScreen("Using Ask.com data");
                break;

            case 3: // '\003'
                setInfoOnScreen("Using Yahoo.com data");
                break;
            }
            zoomingMode = false;
            processed = true;
            break;

        case 45: // '-'
        case 49: // '1'
        case 117: // 'u'
            if(zoom < 17)
            {
                if(zoomingMode)
                {
                    requestedZoom++;
                    if(requestedZoom == zoom)
                        zoomingMode = false;
                } else
                {
                    setZoom(zoom + 1);
                }
                setInfoOnScreen("Zoom out...");
            }
            processed = true;
            break;

        case 43: // '+'
        case 51: // '3'
        case 105: // 'i'
            if(zoom > -2)
            {
                if(!zoomingMode)
                {
                    zpx = width / 2;
                    zpy = height / 2;
                    requestedZoom = zoom;
                }
                if(requestedZoom > -2)
                    requestedZoom--;
                zoomingMode = true;
                setInfoOnScreen("Zoom in...");
            }
            processed = true;
            break;

        case 55: // '7'
        case 111: // 'o'
            if(selNext(-1))
                setInfoOnScreen("Sel previous element...");
            else
                setInfoOnScreen("No element to select.");
            processed = true;
            break;

        case 57: // '9'
        case 112: // 'p'
            if(selNext(1))
                setInfoOnScreen("Sel next element...");
            else
                setInfoOnScreen("No element to select.");
            processed = true;
            break;

        case 35: // '#'
        case 113: // 'q'
            m_displaySize = !m_displaySize;
            if(m_displaySize)
                setInfoOnScreen("Show scale bar");
            else
                setInfoOnScreen("Remove scale bar");
            BufferImage.dumpState();
            processed = true;
            break;

        case 42: // '*'
        case 97: // 'a'
        case 109: // 'm'
            m_modeShortkey = !m_modeShortkey;
            break;

        case 32: // ' '
        case 53: // '5'
            if(!zoomingMode)
                changeSatMode();
            else
                stopZooming();
            processed = true;
            break;
        }
        if(!processed)
            if(!zoomingMode)
                switch(action)
                {
                case 3: // '\003'
                case 4: // '\004'
                case 7: // '\007'
                default:
                    break;

                case 2: // '\002'
                    px -= 20 * div;
                    m_autoTrack = false;
                    break;

                case 5: // '\005'
                    px += 20 * div;
                    m_autoTrack = false;
                    break;

                case 1: // '\001'
                    py -= 20 * div;
                    m_autoTrack = false;
                    break;

                case 6: // '\006'
                    py += 20 * div;
                    m_autoTrack = false;
                    break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -