OpenStreetMaps Osclass Plugin

OpenStreetMap Osclass 插件 1.6.2

没有下载权限
已加入
2021/09/11
消息
9,889
回应得分
3,041
Credits
$14,361
感谢亲爱的会员 @theresa提交了一个新的资源:OpenStreetMaps Osclass Plugin-允许将列表放在地图上并提供更好的视觉来展示和搜索您的列表
查看附件 41940
OpenStreetMap Osclass插件可以让列表显示在地图上,并提供更好的视觉来展示和搜索您的分类广告。

你不希望为使用Google Maps付费吗?我们也不希望,因为最近Google推出了使用Google地图服务的收费计划,结束了免费服务。现在要使用Google API,你必须首先在这里输入你的信用卡信息!OpenStreetMap是完全免费的!

免费的谷歌地图 for osclass​

......
Read more about this resource...
 
Карту OpenStreetMaps также можно встроить в другие плагины например в яндекс карту
заменить в плагине яндекс карт map.php
代码:
<?php
// Собираем адрес из полей объявления (для отображения в метке)
$addr_parts = array();
if (!empty($item['s_zip'])) $addr_parts[] = $item['s_zip'];
if (!empty($item['s_country'])) $addr_parts[] = $item['s_country'];
if (!empty($item['s_region'])) $addr_parts[] = $item['s_region'];
if (!empty($item['s_city'])) $addr_parts[] = $item['s_city'];
if (!empty($item['s_address'])) $addr_parts[] = $item['s_address']; // может содержать координаты
$display_address = implode(", ", $addr_parts);
?>
<!-- Подключаем Leaflet -->
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
<!-- Контейнер для карты -->
<div id="map" style="width: 100%; height: 240px;"></div>
<script>
// Функция инициализации карты
function initMap(lat, lon) {
    var map = L.map('map').setView([lat, lon], 16);
    L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
        attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
    }).addTo(map);
    L.marker([lat, lon]).addTo(map)
        .bindPopup('<?php echo addslashes($display_address); ?>')
        .openPopup();
}
// Получаем значение поля s_address (может быть либо текстовым адресом, либо координатами)
var rawAddress = '<?php echo addslashes($item['s_address']); ?>';
// Проверяем, является ли s_address координатами (формат: "широта, долгота")
var coordsMatch = rawAddress.match(/^([-+]?\d{1,2}\.\d+),\s*([-+]?\d{1,3}\.\d+)$/);
if (coordsMatch) {
    // Это координаты – используем их напрямую
    var lat = parseFloat(coordsMatch[1]);
    var lon = parseFloat(coordsMatch[2]);
    initMap(lat, lon);
} else {
    // Если нет координат, пробуем геокодировать текстовый адрес
    var country = '<?php echo addslashes($item['s_country']); ?>';
    var region  = '<?php echo addslashes($item['s_region']); ?>';
    var city    = '<?php echo addslashes($item['s_city']); ?>';
    var street  = rawAddress; // здесь может быть старый текстовый адрес
    var zip     = '<?php echo addslashes($item['s_zip']); ?>';
    // Выполняем геокодирование, если есть хотя бы улица, город или регион
    if (street.trim() !== '' || city.trim() !== '' || region.trim() !== '') {
        // Структурированный запрос
        var params = new URLSearchParams({
            format: 'json',
            limit: 1,
            countrycodes: 'ru' // ограничиваем Россией (можно убрать или параметризовать)
        });
        if (street)  params.append('street', street);
        if (city)    params.append('city', city);
        if (region)  params.append('state', region);
        if (country) params.append('country', country);
        if (zip)     params.append('postalcode', zip);
        var url = 'https://nominatim.openstreetmap.org/search?' + params.toString();
        fetch(url, {
            headers: { 'User-Agent': 'OsclassPlugin/1.0' }
        })
        .then(response => response.json())
        .then(data => {
            if (data && data.length > 0) {
                var lat = parseFloat(data[0].lat);
                var lon = parseFloat(data[0].lon);
                initMap(lat, lon);
            } else {
                // Если структурированный не сработал, пробуем свободный запрос
                console.log('Структурированный запрос не дал результатов, пробуем свободный');
                var freeUrl = 'https://nominatim.openstreetmap.org/search?format=json&q='
                            + encodeURIComponent('<?php echo addslashes($display_address); ?>')
                            + '&countrycodes=ru&limit=1';
                return fetch(freeUrl, {
                    headers: { 'User-Agent': 'OsclassPlugin/1.0' }
                })
                .then(response => response.json())
                .then(data => {
                    if (data && data.length > 0) {
                        var lat = parseFloat(data[0].lat);
                        var lon = parseFloat(data[0].lon);
                        initMap(lat, lon);
                    } else {
                        console.log('Адрес не найден');
                        // Можно скрыть карту или показать сообщение
                        document.getElementById('map').style.display = 'none';
                    }
                });
            }
        })
        .catch(error => console.error('Ошибка геокодирования:', error));
    } else {
        console.log('Нет данных для геокодирования');
        // Скрываем карту, если нет адреса
        document.getElementById('map').style.display = 'none';
    }
}
</script>
 
Карту OpenStreetMaps также можно встроить в другие плагины например в яндекс карту
заменить в плагине яндекс карт map.php
代码:
<?php
// Собираем адрес из полей объявления (для отображения в метке)
$addr_parts = array();
if (!empty($item['s_zip'])) $addr_parts[] = $item['s_zip'];
if (!empty($item['s_country'])) $addr_parts[] = $item['s_country'];
if (!empty($item['s_region'])) $addr_parts[] = $item['s_region'];
if (!empty($item['s_city'])) $addr_parts[] = $item['s_city'];
if (!empty($item['s_address'])) $addr_parts[] = $item['s_address']; // может содержать координаты
$display_address = implode(", ", $addr_parts);
?>
<!-- Подключаем Leaflet -->
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
<!-- Контейнер для карты -->
<div id="map" style="width: 100%; height: 240px;"></div>
<script>
// Функция инициализации карты
function initMap(lat, lon) {
    var map = L.map('map').setView([lat, lon], 16);
    L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
        attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
    }).addTo(map);
    L.marker([lat, lon]).addTo(map)
        .bindPopup('<?php echo addslashes($display_address); ?>')
        .openPopup();
}
// Получаем значение поля s_address (может быть либо текстовым адресом, либо координатами)
var rawAddress = '<?php echo addslashes($item['s_address']); ?>';
// Проверяем, является ли s_address координатами (формат: "широта, долгота")
var coordsMatch = rawAddress.match(/^([-+]?\d{1,2}\.\d+),\s*([-+]?\d{1,3}\.\d+)$/);
if (coordsMatch) {
    // Это координаты – используем их напрямую
    var lat = parseFloat(coordsMatch[1]);
    var lon = parseFloat(coordsMatch[2]);
    initMap(lat, lon);
} else {
    // Если нет координат, пробуем геокодировать текстовый адрес
    var country = '<?php echo addslashes($item['s_country']); ?>';
    var region  = '<?php echo addslashes($item['s_region']); ?>';
    var city    = '<?php echo addslashes($item['s_city']); ?>';
    var street  = rawAddress; // здесь может быть старый текстовый адрес
    var zip     = '<?php echo addslashes($item['s_zip']); ?>';
    // Выполняем геокодирование, если есть хотя бы улица, город или регион
    if (street.trim() !== '' || city.trim() !== '' || region.trim() !== '') {
        // Структурированный запрос
        var params = new URLSearchParams({
            format: 'json',
            limit: 1,
            countrycodes: 'ru' // ограничиваем Россией (можно убрать или параметризовать)
        });
        if (street)  params.append('street', street);
        if (city)    params.append('city', city);
        if (region)  params.append('state', region);
        if (country) params.append('country', country);
        if (zip)     params.append('postalcode', zip);
        var url = 'https://nominatim.openstreetmap.org/search?' + params.toString();
        fetch(url, {
            headers: { 'User-Agent': 'OsclassPlugin/1.0' }
        })
        .then(response => response.json())
        .then(data => {
            if (data && data.length > 0) {
                var lat = parseFloat(data[0].lat);
                var lon = parseFloat(data[0].lon);
                initMap(lat, lon);
            } else {
                // Если структурированный не сработал, пробуем свободный запрос
                console.log('Структурированный запрос не дал результатов, пробуем свободный');
                var freeUrl = 'https://nominatim.openstreetmap.org/search?format=json&q='
                            + encodeURIComponent('<?php echo addslashes($display_address); ?>')
                            + '&countrycodes=ru&limit=1';
                return fetch(freeUrl, {
                    headers: { 'User-Agent': 'OsclassPlugin/1.0' }
                })
                .then(response => response.json())
                .then(data => {
                    if (data && data.length > 0) {
                        var lat = parseFloat(data[0].lat);
                        var lon = parseFloat(data[0].lon);
                        initMap(lat, lon);
                    } else {
                        console.log('Адрес не найден');
                        // Можно скрыть карту или показать сообщение
                        document.getElementById('map').style.display = 'none';
                    }
                });
            }
        })
        .catch(error => console.error('Ошибка геокодирования:', error));
    } else {
        console.log('Нет данных для геокодирования');
        // Скрываем карту, если нет адреса
        document.getElementById('map').style.display = 'none';
    }
}
</script>
Thank you!!!
 
返回
顶部