יצירת ציוני מיקום בהתאמה אישית באמצעות Places Insights

סקירה כללית

מודעת נדל"ן שמציגה ציון מותאם אישית של 9.1 לבעלי חיות מחמד, על סמך פארקים סמוכים ומקומות שמקבלים בברכה כלבים.

נתוני מיקום רגילים יכולים להראות לכם מה יש בסביבה, אבל הם לא תמיד יכולים לענות על השאלה החשובה יותר: "עד כמה האזור הזה טוב בשבילי?" הצרכים של המשתמשים שלכם מורכבים. למשפחה עם ילדים קטנים יש סדרי עדיפויות שונים בהשוואה לאיש מקצוע צעיר עם כלב. כדי לעזור להם לקבל החלטות מושכלות, אתם צריכים לספק תובנות שמשקפות את הצרכים הספציפיים האלה. ציון מיקום מותאם אישית הוא כלי יעיל להעברת הערך הזה וליצירת חוויית משתמש ייחודית ומשמעותית.

במאמר הזה נסביר איך ליצור ציוני מיקום מותאמים אישית עם היבטים רבים באמצעות מערך הנתונים Places Insights ב-BigQuery. הפיכת נתוני נקודות עניין למדדים משמעותיים מאפשרת להעשיר את האפליקציות שלכם בתחומי הנדל"ן, הקמעונאות או התיירות, ולספק למשתמשים את המידע הרלוונטי שהם צריכים. אנחנו גם מספקים אפשרות להשתמש בבינה מלאכותית גנרטיבית ב-BigQuery כדרך יעילה לחישוב ציוני המיקום.

הגדלת הערך העסקי באמצעות ציונים מותאמים

בדוגמאות הבאות אפשר לראות איך אפשר לתרגם נתוני מיקום גולמיים למדדים עוצמתיים שממוקדים במשתמשים, כדי לשפר את האפליקציה.

  • מפתחי נדל "ן יכולים ליצור 'דירוג ידידותיות למשפחות' או'דירוג מושלם לנוסעים' כדי לעזור לקונים ולשוכרים לבחור את השכונה המושלמת שתתאים לאורח החיים שלהם, וכך להגדיל את רמת המעורבות של המשתמשים, לשפר את איכות הלידים ולהגדיל את קצב ההמרות.
  • מהנדסים בתחום התיירות והאירוח יכולים ליצור 'דירוג חיי הלילה' או 'דירוג גן עדן למטיילים' כדי לעזור למטיילים לבחור מלון שמתאים לסגנון החופשה שלהם, וכך להגדיל את שיעורי ההזמנות ואת שביעות רצון הלקוחות
  • אנליסטים בתחום הקמעונאות יכולים ליצור 'ציון כושר ובריאות' כדי לזהות את המיקום האופטימלי לחדר כושר חדש או לחנות מזון בריאות, על סמך עסקים משלימים בקרבת מקום, וכך למקסם את הפוטנציאל לטרגט את הדמוגרפיה הנכונה של המשתמשים.

במדריך הזה תלמדו על מתודולוגיה גמישה בת שלושה חלקים ליצירת ניקוד מותאם אישית למיקום כלשהו באמצעות נתונים של 'מקומות' ישירות ב-BigQuery. כדי להמחיש את התבנית הזו, נבנה שתי דוגמאות שונות של ניקוד: ניקוד של מקום ידידותי למשפחות וניקוד של מקום מושלם לבעלי חיות מחמד. הגישה הזו מאפשרת לכם להשתמש במאפיינים העשירים והמפורטים של קבוצת הנתונים 'תובנות לגבי מקומות', במקום להסתמך רק על ספירת המקומות. אתם יכולים להשתמש במידע כמו שעות הפתיחה של העסק, אם המקום מתאים לילדים או אם מותר להכניס אליו כלבים, כדי ליצור מדדים מתוחכמים ומשמעותיים למשתמשים שלכם.

תהליך העבודה של הפתרון

תרשים של תהליך עבודה בן שלושה שלבים: הגדרת מיקומים, שליחת שאילתה למקומות בקרבת מקום ונרמול התוצאות כדי ליצור ציון סופי.

במדריך הזה נשתמש בשאילתת SQL אחת ועוצמתית כדי ליצור ניקוד מותאם אישית שאפשר להתאים לכל תרחיש שימוש. כדי להסביר את התהליך הזה, נשתמש בשני ציונים לדוגמה שמתייחסים לקבוצה היפותטית של מודעות להשכרת דירות.

דרישות מוקדמות

לפני שמתחילים, צריך לפעול בהתאם להוראות האלה כדי להגדיר את 'תובנות לגבי מקומות'.

1. הנחת בסיס: המיקומים שיכולים לעניין את המשתמשים

כדי ליצור ציונים, צריך קודם ליצור רשימה של המיקומים שרוצים לנתח. השלב הראשון הוא לוודא שהנתונים האלה קיימים כטבלה ב-BigQuery. העיקר הוא שיהיה מזהה ייחודי לכל מיקום וGEOGRAPHYעמודה שבה מאוחסנות הקואורדינטות שלו.

אתם יכולים ליצור טבלה של מיקומים ולמלא אותה כדי לתת להם ניקוד באמצעות שאילתה כמו זו:

CREATE OR REPLACE TABLE `your_project.your_dataset.apartment_listings`
(
  id INT64,
  name STRING,
  location GEOGRAPHY
);

INSERT INTO `your_project.your_dataset.apartment_listings` VALUES
  (1, 'The Downtowner', ST_GEOGPOINT(-74.0077, 40.7093)),
  (2, 'Suburban Oasis', ST_GEOGPOINT(-73.9825, 40.7507)),
  (3, 'Riverside Lofts', ST_GEOGPOINT(-73.9470, 40.8079))
  -- More rows can be added here
  . . . ;

הפעולה SELECT * על נתוני המיקום תיראה בערך כך.

תוצאות של שאילתת BigQuery שמציגות טבלה של רשימות דירות עם מזהה, שם וקואורדינטות של מיקום.

2. פיתוח הלוגיקה המרכזית: שאילתת הניקוד

אחרי שמגדירים את המיקומים, השלב הבא הוא למצוא, לסנן ולספור את המקומות הסמוכים שרלוונטיים לציון המותאם אישית. הכול מתבצע בהצהרת SELECT אחת.

חיפוש מקומות בסביבה באמצעות חיפוש גיאו-מרחבי

קודם צריך למצוא את כל המקומות ממערך הנתונים של תובנות לגבי מקומות שנמצאים במרחק מסוים מכל אחד מהמיקומים שלכם. הפונקציה ST_DWITHIN של BigQuery מתאימה בדיוק למטרה הזו. נבצע JOIN בין הטבלה apartment_listings לבין הטבלה places_insights כדי למצוא את כל המקומות ברדיוס של 800 מטרים. הוספת LEFT JOIN מבטיחה שכל המיקומים המקוריים שלכם ייכללו בתוצאות, גם אם לא נמצאו מקומות תואמים בקרבת מקום.

סינון לפי רלוונטיות באמצעות מאפיינים מתקדמים

כאן מתרגמים את הרעיון המופשט של ציון למסנני נתונים קונקרטיים. בדוגמאות של שני הציונים, הקריטריונים שונים:

  • בדירוג 'מתאים למשפחות', אנחנו מתייחסים לפארקים, למוזיאונים ולמסעדות שמתאימים במיוחד לילדים.
  • בחישוב הציון 'גן עדן לבעלי חיות מחמד' אנחנו מתייחסים לפארקים, למרפאות וטרינריות, לחנויות לחיות מחמד ולכל מסעדה או בית קפה שמותר להכניס אליהם כלבים.

אפשר לסנן לפי המאפיינים הספציפיים האלה ישירות בפסקה WHERE של השאילתה.

צבירת התובנות לכל מיקום

לבסוף, צריך לספור כמה מקומות רלוונטיים מצאתם לכל דירה. הפסקה GROUP BY מסכמת את התוצאות, והפונקציה COUNTIF סופרת את המקומות שתואמים לקריטריונים הספציפיים של כל אחד מהציונים.

השאילתה הבאה משלבת את שלושת השלבים האלה ומחשבת את הספירות הגולמיות של שני הציונים במעבר אחד:

-- This Common Table Expression (CTE) will hold the raw counts for each score component.
WITH insight_counts AS (
  SELECT WITH AGGREGATION_THRESHOLD -- Correctly includes the mandatory aggregation threshold
    apartments.id,
    apartments.name,
    COUNTIF(places.primary_type = 'park') AS park_count,
    COUNTIF(places.primary_type = 'museum') AS museum_count,
    COUNTIF(places.primary_type = 'restaurant' AND places.good_for_children = TRUE) AS family_restaurant_count,
    COUNTIF(places.primary_type IN ('veterinary_care', 'pet_store')) AS pet_service_count,
    COUNTIF(places.allows_dogs = TRUE) AS dog_friendly_place_count
  FROM
    `your_project.your_dataset.apartment_listings` AS apartments
  LEFT JOIN
    `your-project.places_insights___us.places` AS places -- Corrected table name for the US dataset
    ON ST_DWITHIN(apartments.location, places.point, 800) -- Find places within 800 meters
  GROUP BY
    apartments.id, apartments.name
)
SELECT * FROM insight_counts;

התוצאה של השאילתה הזו תהיה דומה לזו.

תוצאות של BigQuery שמציגות את המספרים הגולמיים של שירותים כמו פארקים, מסעדות ושירותים לחיות מחמד לכל מודעת השכרת דירה.

בקטע הבא נשתמש בתוצאות האלה.

3. יצירת הניקוד

עכשיו, אחרי שיש לכם את מספר המקומות ואת המשקל של כל סוג מקום בכל מיקום, אתם יכולים ליצור את ציון המיקום המותאם אישית. בקטע הזה נדון בשתי אפשרויות: שימוש בחישוב מותאם אישית משלכם ב-BigQuery או שימוש בפונקציות של בינה מלאכותית (AI) גנרטיבית ב-BigQuery.

אפשרות 1: שימוש בחישוב מותאם אישית משלכם ב-BigQuery

הספירות הגולמיות מהשלב הקודם מספקות תובנות, אבל המטרה היא לקבל ניקוד יחיד וידידותי למשתמש. השלב האחרון הוא לשלב את הספירות האלה באמצעות משקלים, ואז לנרמל את התוצאה לסולם של 0 עד 10.

החלת משקלים מותאמים אישית בחירת המשקלים היא גם אומנות וגם מדע. הם צריכים לשקף את העדיפויות העסקיות שלכם או את מה שלדעתכם הכי חשוב למשתמשים. לדוגמה, כדי לקבל ציון של 'מתאים למשפחות', יכול להיות שתחליטו שפארק חשוב פי שניים ממוזיאון. כדאי להתחיל עם ההנחות הכי טובות שלכם ולבצע שינויים על סמך המשוב מהמשתמשים שלנו.

נרמול הניקוד בשאילתה שלמטה נעשה שימוש בשני ביטויי טבלה נפוצים (CTE): הראשון מחשב את הספירות הגולמיות כמו קודם, והשני מחשב את הניקוד המשוקלל. ההצהרה הסופית SELECT מבצעת נורמליזציה של min-max בציונים המשוקללים. העמודה location של הטבלה בדוגמה apartment_listings מיוצאת כדי לאפשר הצגה חזותית של הנתונים במפה.

WITH
  -- CTE 1: Count nearby amenities of interest for each apartment listing.
  insight_counts AS (
    SELECT WITH AGGREGATION_THRESHOLD
      apartments.id,
      apartments.name,
      COUNTIF(places.primary_type = 'park') AS park_count,
      COUNTIF(places.primary_type = 'museum') AS museum_count,
      COUNTIF(places.primary_type = 'restaurant' AND places.good_for_children = TRUE) AS family_restaurant_count,
      COUNTIF(places.primary_type IN ('veterinary_care', 'pet_store')) AS pet_service_count,
      COUNTIF(places.allows_dogs = TRUE) AS dog_friendly_place_count
    FROM
      `your_project.your_dataset.apartment_listings` AS apartments
    LEFT JOIN
      `your-project.places_insights___us.places` AS places
      ON ST_DWITHIN(apartments.location, places.point, 800)
    GROUP BY
      apartments.id,
      apartments.name
  ),
  -- CTE 2: Apply custom weighting to the amenity counts to generate raw scores.
  raw_scores AS (
    SELECT
      id,
      name,
      (park_count * 3.0) + (museum_count * 1.5) + (family_restaurant_count * 2.5) AS family_friendliness_score,
      (park_count * 2.0) + (pet_service_count * 3.5) + (dog_friendly_place_count * 2.5) AS pet_paradise_score
    FROM
      insight_counts
  )
-- Final Step: Normalize scores to a 0-10 scale and rejoin to retrieve the location geometry.
SELECT
  raw_scores.id,
  raw_scores.name,
  apartments.location,
  raw_scores.family_friendliness_score,
  raw_scores.pet_paradise_score,
  -- Normalize Family Score using a MIN/MAX window function.
  ROUND(
    COALESCE(
      SAFE_DIVIDE(
        (raw_scores.family_friendliness_score - MIN(raw_scores.family_friendliness_score) OVER ()),
        (MAX(raw_scores.family_friendliness_score) OVER () - MIN(raw_scores.family_friendliness_score) OVER ())
      ) * 10,
      0
    ),
    2
  ) AS normalized_family_score,
  -- Normalize Pet Score using a MIN/MAX window function.
  ROUND(
    COALESCE(
      SAFE_DIVIDE(
        (raw_scores.pet_paradise_score - MIN(raw_scores.pet_paradise_score) OVER ()),
        (MAX(raw_scores.pet_paradise_score) OVER () - MIN(raw_scores.pet_paradise_score) OVER ())
      ) * 10,
      0
    ),
    2
  ) AS normalized_pet_score
FROM
  raw_scores
JOIN
  `your_project.your_dataset.apartment_listings` AS apartments
  ON raw_scores.id = apartments.id;

התוצאות של השאילתה יהיו דומות לתוצאות שמופיעות בהמשך. שתי העמודות האחרונות הן הציונים המנורמלים.

תוצאות סופיות של השאילתה שמציגות גם את הציונים הגולמיים המשוקללים וגם את הציונים המנורמלים מ-0 עד 10 לכל רשימת דירות.

הסבר על הציון הנורמלי

חשוב להבין למה שלב הנורמליזציה הסופי הזה כל כך חשוב. הציונים הגולמיים המשוקללים יכולים לנוע בין 0 למספר גדול מאוד, בהתאם לצפיפות העירונית של המיקומים שלכם. ציון של 500 לא אומר למשתמש כלום בלי הקשר.

הנרמול הופך את המספרים המופשטים האלה לדירוג יחסי. התוצאות מוצגות בסולם של 0 עד 10, כך שקל להבין את ההשוואה בין כל מיקום למיקומים האחרים במערך הנתונים הספציפי שלכם:

  • ציון של 10 מוקצה למיקום עם הציון הגולמי הכי גבוה, והוא מסומן כאפשרות הכי טובה מבין האפשרויות הנוכחיות.
  • ציון של 0 מוקצה למיקום עם הציון הגולמי הכי נמוך, והוא משמש כנקודת ההשוואה. זה לא אומר שבמיקום אין שירותים, אלא שהוא הכי פחות מתאים ביחס לאפשרויות האחרות שנבדקות.
  • כל שאר הציונים ממוקמים באופן יחסי בין שני הקצוות, וכך המשתמשים יכולים להשוות בין האפשרויות שלהם במבט חטוף בצורה ברורה ואינטואיטיבית.

אפשרות 2: שימוש בפונקציה AI.GENERATE‏ (Gemini)

במקום להשתמש בנוסחה מתמטית קבועה, אפשר להשתמש בפונקציה AI.GENERATE של BigQuery כדי לחשב ציוני מיקום מותאמים אישית ישירות בתהליך העבודה של SQL.

אפשרות 1 מצוינת לדירוג כמותי בלבד שמבוסס על מספר השירותים, אבל קשה להשתמש בה כדי לשקלל נתונים איכותיים. הפונקציה AI.GENERATE מאפשרת לשלב את המספרים מתוך השאילתה של נתוני המיקומים עם נתונים לא מובנים, כמו תיאור הטקסט של רשימת הדירות (למשל, "המיקום הזה מתאים למשפחות והאזור שקט בלילה") או העדפות ספציפיות של פרופיל המשתמש (למשל, "המשתמש הזה מזמין חדר למשפחה ומעדיף אזור שקט במיקום מרכזי"). כך אפשר ליצור ניקוד מדויק יותר שמזהה ניואנסים שספירה מדויקת עלולה לפספס, כמו מיקום עם צפיפות גבוהה של מתקנים אבל גם עם תיאור כמו 'רועש מדי לילדים'.

הרכבת ההנחיה

כדי להשתמש בפונקציה הזו, התוצאות של הצבירה (משלב 2) מעוצבות להנחיה בשפה טבעית. אפשר לעשות זאת באופן דינמי ב-SQL על ידי שרשור של עמודות נתונים עם הוראות למודל.

בשורה שלמטה, insight_counts משולבים עם תיאור הטקסט של הדירה כדי ליצור הנחיה לכל שורה. כדי להנחות את הניקוד, מוגדר גם פרופיל של משתמש היעד.

יצירת הניקוד באמצעות SQL

השאילתה הבאה מבצעת את כל הפעולה ב-BigQuery. התיוג האוטומטי:

  1. מצטבר את ספירת המקומות (כפי שמתואר בשלב 2).
  2. בונה הנחיה לכל מיקום.
  3. קוראת לפונקציה AI.GENERATE כדי לנתח את ההנחיה באמצעות מודל Gemini.
  4. מנתח את התוצאה לפורמט מובנה שמוכן לשימוש באפליקציה.
WITH
  -- CTE 1: Aggregate Place counts (Same as Step 2)
  insight_counts AS (
    SELECT WITH AGGREGATION_THRESHOLD
      apartments.id,
      apartments.name,
      apartments.description, -- Assuming your table has a description column
      COUNTIF(places.primary_type = 'park') AS park_count,
      COUNTIF(places.primary_type = 'museum') AS museum_count,
      COUNTIF(places.primary_type = 'restaurant' AND places.good_for_children = TRUE) AS family_restaurant_count
    FROM
      `your-project.your_dataset.apartment_listings` AS apartments
    LEFT JOIN
      `your-project.places_insights___us.places` AS places
      ON ST_DWITHIN(apartments.location, places.point, 800)
    GROUP BY
      apartments.id, apartments.name, apartments.description
  ),

  -- CTE 2: Construct the Prompt
  prepared_prompts AS (
    SELECT
      id,
      name,
      FORMAT("""
        You are an expert real estate analyst. Generate a 'Family-Friendliness Score' (0-10) for this location.

        Target User: Young family with a toddler, looking for a balance of activity and quiet.

        Location Data:
        - Name: %s
        - Description: %s
        - Parks nearby: %d
        - Museums nearby: %d
        - Family-friendly restaurants nearby: %d

        Scoring Rules:
        - High importance: Proximity to parks and high restaurant count.
        - Negative modifiers: Descriptions indicating excessive noise or nightlife focus.
        - Positive modifiers: Descriptions indicating quiet streets or backyards.
      """, name, description, park_count, museum_count, family_restaurant_count) AS prompt_text
    FROM insight_counts
    )

-- Final Step: Call AI.GENERATE
SELECT
  id,
  name,
  -- Access the structured fields returned by the model
  generated.family_friendliness_score,
  generated.reasoning
FROM
  prepared_prompts,
  AI.GENERATE(
    prompt_text,
    endpoint => 'gemini-flash-latest',
    output_schema => 'family_friendliness_score FLOAT64, reasoning STRING'
  ) AS generated;
הסבר על ההגדרה
  • הבנת העלויות: הפונקציה הזו מעבירה את הקלט שלכם למודל Gemini, וכל קריאה שלה מחויבת ב-Vertex AI. אם מנתחים מספר גדול של מיקומים (למשל, אלפי רשימות של דירות), מומלץ לסנן את מערך הנתונים כדי להציג קודם את המיקומים הרלוונטיים ביותר. מידע נוסף על צמצום העלויות זמין במאמר בנושא שיטות מומלצות.
  • endpoint: בדוגמה הזו מצוין gemini-flash-latest כדי לתת עדיפות למהירות וליעילות מבחינת עלות. אבל אתם יכולים לבחור את המודל שהכי מתאים לצרכים שלכם. כדי להתנסות בגרסאות שונות (למשל, ‫Gemini Pro למשימות מורכבות יותר של הסקת מסקנות) ולמצוא את המודל שהכי מתאים לתרחיש לדוגמה שלכם.
  • output_schema: במקום לנתח טקסט גולמי, מופעלת סכימה (FLOAT64 לניקוד ו-STRING לנימוק). כך אפשר להשתמש בתוצאה באופן מיידי באפליקציה או בכלי הוויזואליזציה שלכם בלי לבצע עיבוד נוסף.
פלט לדוגמה

השאילתה מחזירה טבלת BigQuery רגילה עם הניקוד המותאם אישית וההסבר של המודל.

id [מזהה] שם family_friendliness_score חשיבה רציונלית
1 The Downtowner 5.5 מספר גבוה של מתקנים (פארקים, מסעדות), בהתאם למדדים הכמותיים. עם זאת, הנתונים האיכותיים מצביעים על רעש מוגזם בסופי שבוע ועל התמקדות חזקה בחיי לילה, וזה סותר ישירות את הצורך של משתמש היעד בשקט.
2 Suburban Oasis 9.8 נתונים כמותיים מצוינים בשילוב עם תיאור ("רחוב שקט עם עצים") שתואם באופן מושלם לפרופיל המשפחתי של קהל היעד. משתני הצעות מחיר חיוביים גבוהים מובילים לציון כמעט מושלם.

התהליך הזה מאפשר לכם לספק ניקוד מותאם אישית מאוד, שנראה מובן ומותאם לכל משתמש בנפרד, והכול במסגרת שאילתת SQL אחת.

4. הצגה ויזואלית של הציונים במפה

‫BigQuery Studio כולל הדמיה משולבת של מפה לכל תוצאה של שאילתה שמכילה עמודה GEOGRAPHY. מכיוון שהשאילתה שלנו מוציאה את העמודה location, אפשר לראות את התוצאות באופן מיידי.

כשלוחצים על הכרטיסייה Visualization, המפה מוצגת, והתפריט הנפתח Data Column מאפשר לבחור את ציון המיקום שרוצים להציג. בדוגמה הזו, התרשים normalized_pet_score מוצג מתוך הדוגמה של אפשרות 1. שימו לב שבמקרה הזה נוספו עוד מיקומים לטבלה apartment_listings.

מפה שבה מוצג באופן חזותי הציון הנורמלי של חיות מחמד במיקומים שונים. נקודות ירוקות כהות יותר מייצגות ציונים גבוהים יותר וטובים יותר.

הדמיה של הנתונים מאפשרת לראות במבט חטוף את המיקומים המתאימים ביותר לציון שנוצר, כאשר עיגולים ירוקים כהים יותר מייצגים מיקומים עם normalized_pet_score גבוה יותר, במקרה הזה. אפשרויות נוספות להצגת נתונים של תובנות לגבי מקומות מפורטות במאמר בנושא הצגה חזותית של תוצאות שאילתות.

סיכום

עכשיו יש לכם מתודולוגיה חזקה וניתנת לשחזור ליצירת ציוני מיקום מדויקים. התחלתם עם המיקומים שלכם, ויצרתם שאילתת SQL אחת ב-BigQuery שמאתרת מקומות קרובים עם ST_DWITHIN, מסננת אותם לפי מאפיינים מתקדמים כמו good_for_children ו-allows_dogs, ומצטברת את התוצאות עם COUNTIF. החלת משקלים מותאמים אישית ונרמול התוצאה מאפשרים ליצור ציון יחיד וידידותי למשתמש, שמספק תובנות מעמיקות ופרקטיות. אתם יכולים להשתמש בדפוס הזה ישירות כדי להפוך נתוני מיקום גולמיים ליתרון תחרותי משמעותי.

הפעולות הבאות

עכשיו תורך לבנות. במדריך הזה יש תבנית. אתם יכולים להשתמש בנתונים העשירים שזמינים בסכימת Places Insights כדי ליצור את הציונים שהכי נחוצים לתרחיש השימוש שלכם. אפשר גם ליצור מדדים אחרים:

  • "דירוג חיי הלילה": אפשר לשלב בין מסננים של primary_type (bar,‏ night_club),‏ price_level ושעות פתיחה מאוחרות כדי למצוא את האזורים התוססים ביותר אחרי רדת החשכה.
  • 'ציון כושר ובריאות': ספירת gyms,‏ parks ו-health_food_stores בקרבת מקום, וסינון מסעדות לפי אלה עם serves_vegetarian_food כדי לתת ציון למיקומים עבור משתמשים שמודעים לבריאות.
  • הדירוג 'חלום של נוסע': כדי לעזור למשתמשים שחשוב להם שתהיה גישה לתחבורה, אפשר למצוא מיקומים עם צפיפות גבוהה של מקומות transit_station וparking בקרבת מקום.

תורמים

Henrik Valve | DevX Engineer