{"id":9947,"date":"2026-09-16T09:23:25","date_gmt":"2026-09-16T12:23:25","guid":{"rendered":"https:\/\/lageevo.crp.ufv.br\/?page_id=9947"},"modified":"2026-09-16T10:38:02","modified_gmt":"2026-09-16T13:38:02","slug":"ansistrus","status":"publish","type":"page","link":"https:\/\/lageevo.crp.ufv.br\/?page_id=9947","title":{"rendered":"AnSIStrus"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">AnSIStrus \u00e9 o sistema do LaGEEvo de cataloga\u00e7\u00e3o da cole\u00e7\u00e3o cient\u00edfica. Confira a abrang\u00eancia no mapa e pesquise as informa\u00e7\u00f5es dispon\u00edveis.<\/p>\n\n\n    <style>\n        .ansistrus-stats-container {\n            font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n            margin: 15px 0;\n        }\n        .ansistrus-stats-grid {\n            display: flex;\n            gap: 15px;\n            flex-wrap: wrap;\n        }\n        .ansistrus-stat-card {\n            flex: 1;\n            min-width: 140px;\n            background: #ffffff;\n            border: 1px solid #e2e4e7;\n            border-left: 4px solid #2271b1;\n            border-radius: 6px;\n            padding: 14px 16px;\n            box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n        }\n        .ansistrus-stat-number {\n            font-size: 24px;\n            font-weight: bold;\n            color: #2271b1;\n            line-height: 1.2;\n        }\n        .ansistrus-stat-label {\n            font-size: 12px;\n            color: #50575e;\n            text-transform: uppercase;\n            letter-spacing: 0.5px;\n            margin-top: 4px;\n        }\n        .ansistrus-stats-container.layout-widget .ansistrus-stats-grid {\n            flex-direction: column;\n            gap: 10px;\n        }\n        .ansistrus-stats-title {\n            font-size: 16px;\n            font-weight: bold;\n            margin-bottom: 12px;\n            color: #1d2327;\n        }\n    <\/style>\n\n    <div class=\"ansistrus-stats-container layout-grid\">\n                    <div class=\"ansistrus-stats-title\">Collection Metrics<\/div>\n        \n        <div class=\"ansistrus-stats-grid\">\n            <div class=\"ansistrus-stat-card\">\n                <div class=\"ansistrus-stat-number\">127<\/div>\n                <div class=\"ansistrus-stat-label\">\ud83d\udccd Collection Points<\/div>\n            <\/div>\n            <div class=\"ansistrus-stat-card\">\n                <div class=\"ansistrus-stat-number\">0<\/div>\n                <div class=\"ansistrus-stat-label\">\ud83e\uddec Registered Species<\/div>\n            <\/div>\n            <div class=\"ansistrus-stat-card\">\n                <div class=\"ansistrus-stat-number\">0<\/div>\n                <div class=\"ansistrus-stat-label\">\ud83d\udccb Total Records<\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n    \n\n\n    <!-- Leaflet CSS & JS + MarkerCluster Plugin -->\n    <link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\" \/>\n    <link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet.markercluster@1.5.3\/dist\/MarkerCluster.css\" \/>\n    <link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet.markercluster@1.5.3\/dist\/MarkerCluster.Default.css\" \/>\n    \n    <script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\"><\/script>\n    <script src=\"https:\/\/unpkg.com\/leaflet.markercluster@1.5.3\/dist\/leaflet.markercluster.js\"><\/script>\n\n    <style>\n        .ansistrus-search-container {\n            font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n            margin: 20px 0;\n        }\n        #ansistrus-main-map {\n            width: 100%;\n            height: 480px;\n            border-radius: 8px;\n            border: 1px solid #ccd0d4;\n            margin-bottom: 20px;\n            z-index: 1;\n        }\n        .ansistrus-popup-content h4 {\n            margin: 0 0 5px 0;\n            color: #2271b1;\n            font-size: 15px;\n        }\n        .ansistrus-popup-content p {\n            margin: 3px 0;\n            font-size: 13px;\n            color: #3c434a;\n        }\n        .ansistrus-popup-btn {\n            display: inline-block;\n            margin-top: 8px;\n            padding: 4px 10px;\n            background: #2271b1;\n            color: #fff !important;\n            text-decoration: none;\n            border-radius: 4px;\n            font-size: 12px;\n            font-weight: bold;\n        }\n        .ansistrus-popup-btn:hover { background: #135e96; }\n        .ansistrus-search-form {\n            background: #f8f9fa;\n            padding: 18px;\n            border: 1px solid #e2e4e7;\n            border-radius: 6px;\n            margin-bottom: 20px;\n        }\n        .ansistrus-form-row {\n            display: flex;\n            gap: 12px;\n            flex-wrap: wrap;\n        }\n        .ansistrus-form-group {\n            flex: 1;\n            min-width: 200px;\n        }\n        .ansistrus-form-group label {\n            display: block;\n            font-size: 12px;\n            font-weight: bold;\n            margin-bottom: 4px;\n        }\n        .ansistrus-form-group input {\n            width: 100%;\n            padding: 8px;\n            border: 1px solid #ccc;\n            border-radius: 4px;\n            box-sizing: border-box;\n        }\n        .ansistrus-search-btn {\n            background: #2271b1;\n            color: #fff;\n            border: none;\n            padding: 9px 20px;\n            border-radius: 4px;\n            cursor: pointer;\n            font-weight: bold;\n            margin-top: 18px;\n        }\n        .ansistrus-search-btn:hover { background: #135e96; }\n        .ansistrus-status-msg {\n            padding: 10px 15px;\n            background: #e7f5ff;\n            border-left: 4px solid #2271b1;\n            color: #0c5460;\n            margin-bottom: 15px;\n            border-radius: 4px;\n            font-size: 14px;\n        }\n    <\/style>\n\n    <div class=\"ansistrus-search-container\">\n                    <div id=\"ansistrus-main-map\"><\/div>\n        \n        <form class=\"ansistrus-search-form\" id=\"ansistrus-filter-form\">\n            <div class=\"ansistrus-form-row\">\n                <div class=\"ansistrus-form-group\">\n                    <label>Locality Name \/ Description<\/label>\n                    <input type=\"text\" id=\"ansistrus-filter-locality\" placeholder=\"e.g. A\u00e7ude BR 354\">\n                <\/div>\n                <div class=\"ansistrus-form-group\">\n                    <label>Municipality \/ Region<\/label>\n                    <input type=\"text\" id=\"ansistrus-filter-municipality\" placeholder=\"e.g. Vi\u00e7osa\">\n                <\/div>\n                <div class=\"ansistrus-form-group\">\n                    <label>Water Body \/ Basin<\/label>\n                    <input type=\"text\" id=\"ansistrus-filter-waterbody\" placeholder=\"e.g. Alto Paran\u00e1\">\n                <\/div>\n                <div style=\"align-self: flex-end;\">\n                    <button type=\"submit\" class=\"ansistrus-search-btn\">\ud83d\udd0d Filter<\/button>\n                <\/div>\n            <\/div>\n        <\/form>\n\n        <div id=\"ansistrus-status\" class=\"ansistrus-status-msg\">\n            \u23f3 Loading collection localities on the map...\n        <\/div>\n    <\/div>\n\n    <script>\n    document.addEventListener('DOMContentLoaded', function() {\n        var map = L.map('ansistrus-main-map').setView([-14.2350, -51.9253], 4);\n\n        L.tileLayer('https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png', {\n            maxZoom: 18,\n            attribution: '\u00a9 OpenStreetMap | Ansistrus BioCollection'\n        }).addTo(map);\n\n        var markersGroup = L.markerClusterGroup({\n            chunkedLoading: true,\n            maxClusterRadius: 50\n        });\n\n        var isUserLogged = false;\n        var ajaxUrl = \"https:\/\/lageevo.crp.ufv.br\/wp-admin\/admin-ajax.php\";\n        var statusBox = document.getElementById('ansistrus-status');\n\n        fetch(ajaxUrl + '?action=ansistrus_get_map_points')\n            .then(function(response) {\n                if (!response.ok) {\n                    throw new Error('HTTP Status ' + response.status);\n                }\n                return response.text();\n            })\n            .then(function(text) {\n                var res;\n                try {\n                    res = JSON.parse(text);\n                } catch (e) {\n                    console.error('Raw Server Response:', text);\n                    throw new Error('Invalid JSON received from server.');\n                }\n\n                if (!res.success) {\n                    var msg = (res.data && res.data.message) ? res.data.message : 'Server returned an error.';\n                    throw new Error(msg);\n                }\n\n                var points = res.data;\n                if (!points || points.length === 0) {\n                    statusBox.innerHTML = '\u26a0\ufe0f No georeferenced localities found in the database.';\n                    return;\n                }\n\n                var markerList = [];\n                points.forEach(function(item) {\n                    var popupHtml = `\n                        <div class=\"ansistrus-popup-content\">\n                            <h4>\ud83d\udccd ${item.locality}<\/h4>\n                            <p><strong>Municipality:<\/strong> ${item.municipality} (${item.stateProvince})<\/p>\n                            <p><strong>Water Body:<\/strong> ${item.waterBody}<\/p>\n                            <p><strong>Basin \/ Region:<\/strong> ${item.higherGeography}<\/p>\n                            ${isUserLogged ? `<a href=\"?page=ansistrus&tab=localidades&id=${item.id}\" class=\"ansistrus-popup-btn\">\ud83d\udcc4 View Locality Details<\/a>` : ''}\n                        <\/div>\n                    `;\n\n                    var marker = L.marker([item.lat, item.lng]).bindPopup(popupHtml);\n                    markerList.push(marker);\n                });\n\n                markersGroup.addLayers(markerList);\n                map.addLayer(markersGroup);\n\n                if (markerList.length > 0) {\n                    map.fitBounds(markersGroup.getBounds(), { padding: [30, 30] });\n                }\n\n                statusBox.innerHTML = '\u2705 <strong>' + points.length + '<\/strong> localities successfully loaded on the map.';\n            })\n            .catch(function(err) {\n                console.error(err);\n                statusBox.innerHTML = '\u274c Error: ' + err.message;\n            });\n    });\n    <\/script>\n    \n","protected":false},"excerpt":{"rendered":"<p>AnSIStrus \u00e9 o sistema do LaGEEvo de cataloga\u00e7\u00e3o da cole\u00e7\u00e3o cient\u00edfica. Confira a abrang\u00eancia no mapa e pesquise as informa\u00e7\u00f5es dispon\u00edveis.<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-9947","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/lageevo.crp.ufv.br\/index.php?rest_route=\/wp\/v2\/pages\/9947","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lageevo.crp.ufv.br\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lageevo.crp.ufv.br\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lageevo.crp.ufv.br\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/lageevo.crp.ufv.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9947"}],"version-history":[{"count":5,"href":"https:\/\/lageevo.crp.ufv.br\/index.php?rest_route=\/wp\/v2\/pages\/9947\/revisions"}],"predecessor-version":[{"id":9956,"href":"https:\/\/lageevo.crp.ufv.br\/index.php?rest_route=\/wp\/v2\/pages\/9947\/revisions\/9956"}],"wp:attachment":[{"href":"https:\/\/lageevo.crp.ufv.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9947"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}