Abrir no Google Earth Pro

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

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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 });

})();