Abrir no Google Earth Pro

Adiciona um único botão ao menu de contexto para enviar coordenadas ao Google Earth Pro.

// ==UserScript==
// @name         Abrir no Google Earth Pro
// @namespace    http://tampermonkey.net/
// @version      Final-Simplificado
// @description  Adiciona um único botão ao menu de contexto para enviar coordenadas ao Google Earth Pro.
// @author       PJ H
// @match        *://mapear.esteio.com.br/*
// @match        http://10.72.200.50/sede/paginas/index.php*
// @match        http://192.168.2.147/sede/paginas/index.php?pagina=edificacao
// @match        http://mapear.esteio.com.br/fortal-v3/paginas/
// @grant        GM_xmlhttpRequest
// @connect      localhost
// ==/UserScript==

(function () {
    'use strict';

    const MENU_ID = '#map-context-menu';

    // Envia as coordenadas para o servidor local que abre o Google Earth Pro.
    function sendToEarthPro(lat, lng) {
        console.log(`%c[Earth Pro] Enviando coordenadas: Lat: ${lat}, Lng: ${lng}`, 'color: #00695c; font-weight: bold;');
        GM_xmlhttpRequest({
            method: "POST",
            url: "http://localhost:3000/open-in-ge",
            headers: { "Content-Type": "application/json" },
            data: JSON.stringify({ lat: lat, lng: lng }),
            onload: (response) => console.log("[Earth Pro] Resposta do servidor:", response.responseText),
            onerror: (error) => {
                console.error("[Earth Pro] Erro ao conectar com o servidor local:", error);
                alert("Não foi possível conectar ao servidor local. Verifique se ele está em execução.");
            }
        });
    }

    // Função que adiciona apenas o nosso botão
    function addEarthProButton(panel) {
        // Verifica se o botão já existe para não adicionar de novo
        if (panel.querySelector('#tm-earth-pro-btn')) return;

        // Lê o texto do painel para extrair as coordenadas
        const text = panel.innerText;
        const latMatch = text.match(/Lat:\s*([-.\d]+)/i);
        const lngMatch = text.match(/Lng:\s*([-.\d]+)/i);

        if (!latMatch || !lngMatch) return;

        const lat = parseFloat(latMatch[1]);
        const lng = parseFloat(lngMatch[1]);

        // Cria o botão para o Earth Pro
        const earthProBtn = document.createElement('button');
        earthProBtn.id = 'tm-earth-pro-btn'; // ID único para nosso botão
        earthProBtn.textContent = '🛰️ Abrir no Earth Pro';

        // Estilo do botão
        Object.assign(earthProBtn.style, {
            cursor: 'pointer',
            backgroundColor: '#00695c',
            color: 'white',
            border: 'none',
            padding: '10px',
            marginTop: '8px',
            borderRadius: '4px',
            width: '100%',
            textAlign: 'center',
            fontSize: '14px',
            fontFamily: 'inherit'
        });

        earthProBtn.addEventListener('click', () => {
            sendToEarthPro(lat, lng);
        });

        // Adiciona uma linha divisória e o botão ao menu
        panel.appendChild(document.createElement('hr'));
        panel.appendChild(earthProBtn);
    }

    // Observa quando o painel aparece ou atualiza
    const mo = new MutationObserver(() => {
        const panel = document.querySelector(MENU_ID);
        if (panel && panel.style.display !== 'none') {
            addEarthProButton(panel);
        }
    });

    mo.observe(document.documentElement, { childList: true, subtree: true });

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址