שילוב 1C-Bitrix עם 2GIS
Yandex.Maps ו-Google Maps מוכרות יותר, אבל 2GIS מנצחת בכמה נישות: מפות קניונים מפורטות, מסלולי הליכה בגלריות קניות, מפות לא מקוונות באפליקציות מובייל. לקמעונאות עם רשת סניפים, סוכנויות רכב, מרפאות עם מספר סניפים—2GIS עדיפה פעמים רבות על פני מתחרים בזכות דיוק הנתונים במדינות חבר העמים. השלמנו למעלה מ-50 שילובים עם 2GIS לאתרים על 1C-Bitrix, ולכן אנו מכירים את כל המלכודות. השילוב מאפשר קידוד גיאוגרפי אוטומטי של כתובות בעת הזנתן, וחוסך עד 40% מזמנם של מנהלים.
מה מספק שילוב 2GIS עם Bitrix?
מבקרי האתר מקבלים מפה עם סניפים, סמנים מקובצים ומידע מפורט. כאשר מנהלים מוסיפים כתובת בלוח הניהול, הקואורדינטות נשלפות אוטומטית—ללא העתקה ידנית. ואם יש לכם רישום ארגון ב-2GIS, פרטי הקשר ושעות הפעילות מסונכרנים אוטומטית עם האתר. זה מפחית את עלויות הסנכרון הידני בכ-50%.
איך מוסיפים מפת 2GIS לדף Bitrix?
- קבלו מפתח API מחשבון אישי ב-2GIS (
mapgl.2gis.com). - כללו את סקריפט MapGL בתבנית הרכיב:
\Bitrix\Main\Page\Asset::getInstance()->addJs( 'https://mapgl.2gis.com/api/js/v1' );
$arResult['MAP_LAT'] = (float)$arResult['PROPERTIES']['LAT']['VALUE'];
$arResult['MAP_LNG'] = (float)$arResult['PROPERTIES']['LNG']['VALUE']; - אתחלו את המפה עם סמן:
const map = new mapgl.Map('map-container', {
center: [<?= $arResult['MAP_LNG'] ?>, <?= $arResult['MAP_LAT'] ?>],
zoom: 15,
key: '<?= DGIS_API_KEY ?>',
});
new mapgl.Marker(map, {
coordinates: [<?= $arResult['MAP_LNG'] ?>, <?= $arResult['MAP_LAT'] ?>],
});
מפתח ה-API מאוחסן בקבוע המוגדר ב-\Bitrix\Main\Page\Asset::getInstance()->addJs( 'https://mapgl.2gis.com/api/js/v1' ); $arResult['MAP_LAT'] = (float)$arResult['PROPERTIES']['LAT']['VALUE']; $arResult['MAP_LNG'] = (float)$arResult['PROPERTIES']['LNG']['VALUE']; או דרך const map = new mapgl.Map('map-container', { center: [<?= $arResult['MAP_LNG'] ?>, <?= $arResult['MAP_LAT'] ?>], zoom: 15, key: '<?= DGIS_API_KEY ?>', }); new mapgl.Marker(map, { coordinates: [<?= $arResult['MAP_LNG'] ?>, <?= $arResult['MAP_LAT'] ?>], }); .
קידוד גיאוגרפי בעת שמירת כתובת
משימה טיפוסית: מנהל מזין כתובת סניף באזור הניהול, והקואורדינטות צריכות להיקבע אוטומטית. זה מיושם באמצעות מטפל האירועים /local/php_interface/dbconn.php / \Bitrix\Main\Config\Option. בהשוואה למתחרים: ה-API של 2GIS Geocoder עובד פי 2–3 מהר יותר ובדיוק רב יותר עבור כתובות במדינות חבר העמים מאשר Yandex.Geocoder, לפי משוב לקוחות.
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'iblock',
'OnAfterIBlockElementUpdate',
'geocodeAddressOn2GIS'
);
function geocodeAddressOn2GIS(array &$arFields): void
{
if ($arFields['IBLOCK_ID'] != BRANCHES_IBLOCK_ID) return;
$address = $arFields['PROPERTY_VALUES'][BRANCH_ADDRESS_PROP_ID][0]['VALUE'] ?? '';
if (!$address) return;
$coords = Dgis\GeocoderClient::geocode($address);
if (!$coords) return;
\CIBlockElement::SetPropertyValuesEx(
$arFields['ID'],
BRANCHES_IBLOCK_ID,
[
'LAT' => $coords['lat'],
'LNG' => $coords['lng'],
]
);
} מחלקת GeocoderClient
namespace Dgis;
class GeocoderClient
{
private const API_URL = 'https://catalog.api.2gis.com/3.0/items/geocode';
public static function geocode(string $address): ?array
{
$response = \Bitrix\Main\Web\HttpClient::query(
'GET',
self::API_URL . '?' . http_build_query([
'q' => $address,
'fields' => 'items.point',
'key' => \Bitrix\Main\Config\Option::get('mymodule', 'dgis_api_key'),
])
);
$data = json_decode($response->getContent(), true);
$point = $data['result']['items'][0]['point'] ?? null;
if (!$point) {
return null;
}
return ['lat' => $point['lat'], 'lng' => $point['lon']];
}
} איך להאיץ טעינת מפה עם שמירה במטמון?
השתמשו בשמירה במטמון מתויג של Bitrix. עבור בלוק מפת סניפים, הגדירו שהמטמון יפוג מדי יום ויינתק באמצעות תג בלוק המידע (OnAfterIBlockElementAdd). זה מפחית את עומס השרת פי עשרה, במיוחד עם תנועה של למעלה מ-10,000 מבקרים ייחודיים ביום.
מפת סניפים ברשת: קיבוץ סמנים
עבור רשתות עם מספר רב של נקודות (50+), סמנים בודדים הופכים לבלאגן בלתי קריא. MapGL תומך בקיבוץ באמצעות OnAfterIBlockElementUpdate:
const response = await fetch('/local/ajax/branches.php');
const branches = await response.json();
const source = new mapgl.GeoJsonSource(map, {
data: {
type: 'FeatureCollection',
features: branches.map(b => ({
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [b.lng, b.lat]
},
properties: {
name: b.name,
address: b.address,
id: b.id
},
})),
},
attributes: {
cluster: true
},
});\Bitrix\Main\EventManager::getInstance()->addEventHandler( 'iblock', 'OnAfterIBlockElementUpdate', 'geocodeAddressOn2GIS' ); function geocodeAddressOn2GIS(array &$arFields): void { if ($arFields['IBLOCK_ID'] != BRANCHES_IBLOCK_ID) return; $address = $arFields['PROPERTY_VALUES'][BRANCH_ADDRESS_PROP_ID][0]['VALUE'] ?? ''; if (!$address) return; $coords = Dgis\GeocoderClient::geocode($address); if (!$coords) return; \CIBlockElement::SetPropertyValuesEx($arFields['ID'], BRANCHES_IBLOCK_ID, [ 'LAT' => $coords['lat'], 'LNG' => $coords['lng'], ]); } מחזיר JSON משאילתה שמורה במטמון לבלוק המידע. המטמון מנוטרל באמצעות תג namespace Dgis; class GeocoderClient { private const API_URL = 'https://catalog.api.2gis.com/3.0/items/geocode'; public static function geocode(string $address): ?array { $response = \Bitrix\Main\Web\HttpClient::query( 'GET', self::API_URL . '?' . http_build_query([ 'q' => $address, 'fields' => 'items.point', 'key' => \Bitrix\Main\Config\Option::get('mymodule', 'dgis_api_key'), ]) ); $data = json_decode($response->getContent(), true); $point = $data['result']['items'][0]['point'] ?? null; if (!$point) return null; return ['lat' => $point['lat'], 'lng' => $point['lon']]; } } כאשר רכיבי בלוק המידע מתעדכנים.
סנכרון נתונים: Bitrix ↔ 2GIS Business API
2GIS מספקת את Business API לניהול רישומי הארגון שלכם—עדכון פרטי קשר, תמונות, שעות פעילות ישירות דרך ה-API ללא כניסה ידנית לחשבון האישי.
תוכנית סנכרון:
Битрикс (инфоблок «Филиалы») → Агент → 2ГИС Business API → карточки организаций סוכן Bitrix בודק שינויים בבלוק המידע (לפי שדה iblock_id_N) פעם ביום ושולח עדכונים דרך ה-API. משתמש במודול mapgl.ClusterLayer; הסוכנים מאוחסנים בטבלת const response = await fetch('/local/ajax/branches.php'); const branches = await response.json(); const source = new mapgl.GeoJsonSource(map, { data: { type: 'FeatureCollection', features: branches.map(b => ({ type: 'Feature', geometry: { type: 'Point', coordinates: [b.lng, b.lat] }, properties: { name: b.name, address: b.address, id: b.id }, })), }, attributes: { cluster: true }, }); .
\CAgent::AddAgent( 'DgisSyncAgent::run();', 'mymodule', 'N', 86400, ); מה כוללת עבודת השילוב?
| שלב | תיאור |
|---|---|
| ניתוח | הגדרת תרחישים (מפה, קידוד גיאוגרפי, סנכרון), איסוף דרישות |
| עיצוב | אב-טיפוס מפה, ארכיטקטורת סוכנים, סכמת נתונים |
| פיתוח | שילוב MapGL, מטפלי אירועים, מחלקת GeocoderClient, קיבוץ |
| בדיקות | בדיקות על מכשירים ניידים, בדיקות עומס מטמון |
| פריסה | מעבר לשרת ייצור, הגדרת סוכנים, מסירת תיעוד |
לוחות זמנים
| משימה | לוח זמנים |
|---|---|
| הכנסת מפה עם סמן בדף סניף | 4–8 שעות |
| מפת רשת עם קיבוץ + טעינת AJAX | 1–2 ימים |
| קידוד גיאוגרפי בעת שמירת כתובת בלוח הניהול | יום אחד |
| סנכרון נתונים עם 2GIS Business API | 2–4 ימים |
אנו עובדים עם Bitrix למעלה מ-10 שנים והשלמנו למעלה מ-50 פרויקטי שילוב מפות. אנו משתמשים בגישות מוסמכות ומספקים אחריות על כל העבודות. צרו קשר כדי להעריך את הפרויקט שלכם ולהציע פתרון סוהר. קבלו ייעוץ כבר עכשיו.
הגישה שלנו
כל משימה דורשת ניתוח אישי ותכנון קפדני. איננו משתמשים בפתרונות תבניתיים—כל פרויקט מותאם לדרישות ספציפיות ולתשתית קיימת. לצוות שלנו ניסיון עם פרויקטים בקנה מידה מגוון: מחנויות קטנות ועד פלטפורמות בעומס גבוה עם מיליוני פעולות ביום.
אחריות ותמיכה
אנו מספקים אחריות ל-12 חודשים על העבודות שהושלמו. בתקופה זו, אנו מתקנים כל תקלה ללא עלות. לאחר סיום הפרויקט, אנו מספקים תיעוד מלא והדרכה לצוות שלכם. תמיכה טכנית זמינה למשך 30 יום לאחר ההשקה—נעזור לפתור כל שאלה ולהבטיח השקה מוצלחת.

