אפשר להשתמש ב-Geocoding API כדי לקבל קווי מתאר של בניינים וכניסות, ולשפר את הוויזואליזציה של הנתונים בהצגת המפה.
כדי לעשות זאת, צריך לכלול פרמטר נוסף בבקשה לגיאו-קידוד כדי לקבל זוגות של קואורדינטות של קו רוחב וקו אורך שמגדירים את המתאר של בניין או כניסה. אפשר להשתמש בפלט של הבקשות כדי לצייר קווי מתאר של בניינים ולציין את הכניסות לבניינים במפה.
- מתאר בניין הוא קבוצה של זוגות קואורדינטות של קווי רוחב ואורך שמגדירים מצולע דו-ממדי שמייצג את שטח הפנים של כדור הארץ שמכוסה על ידי הבניין.
- כניסה לבניין היא זוג קואורדינטות של קו רוחב וקו אורך שמגדיר את המיקום של נקודת כניסה ויציאה למקום.
שימוש וכיסוי
אפשר להשתמש בשירות כדי להחזיר מצולעים של קווי מתאר של מקום אחד בבקשה אחת. כלומר, בקשה לקוד גיאוגרפי ברמת העיר, כמו לונדון, בריטניה, לא מחזירה את כל קווי המתאר של הבניינים באזור הזה. במקרים כאלה, השירות יחזיר תגובה רגילה של קידוד גאוגרפי ללא קווי מתאר של בניינים או כניסות. באופן ספציפי, השירות יוצר מתארים ונקודות כניסה רק לסוגי המקומות הבאים:
סוגי מקומות נתמכים
מבנה |
כניסות |
---|---|
|
|
|
|
|
|
|
התכונה הזו זמינה לשימוש בכל האזורים, אבל הכיסוי משתנה מאזור לאזור. בנוסף, צפויות תשובות API שמכילות מתאר של בניין, אבל לא נתוני כניסה. במקרה כזה, השירות יחזיר תשובה של המרת כתובת לקואורדינטות (geocoding) עם מתאר של הבניין, אבל לא מערך של נתוני כניסה. השירות פועל כל הזמן כדי לשפר את הכיסוי של הכניסות.
פרטי הבקשה
אפשר לקבל קווי מתאר של בניינים וקואורדינטות של כניסות בסוגי הבקשות הבאים:
- בקשה להמרת כתובות לקואורדינטות (geocoding)
- בקשה להמרת קואורדינטות לכתובות (reverse geocoding)
- שליחת בקשה לגיאו-קידוד של מקום
לכל אחת מהבקשות האלה, צריך לציין את הפרמטר הבא:
extra_computations=BUILDING_AND_ENTRANCES
.
דוגמה לבקשה
השאילתה הבאה משתמשת בגיאו-קידוד של מקומות כדי לקבל מידע על הכניסה ועל המתאר של מסעדה במאונטיין ויו, קליפורניה, ארה"ב:
https://maps.googleapis.com/maps/api/geocode/json?place_id=ChIJl2tj2-62j4ARzKWl1WCXLJI&extra_computations=BUILDING_AND_ENTRANCES&key=YOUR_API_KEY
דוגמה לתשובה
ברוב המקרים, התשובה מחזירה בניין אחד יחד עם הכניסות הידועות לבניין. אבל במקרים מסוימים, התשובה יכולה לכלול כמה בניינים, למשל נקודות עניין שממוקמות בכמה בניינים. הבניינים והכניסות מיוצגים על ידי שתי המערכים הבאים:
buildings[]
מערך עם בניין אחד או יותר. כל בניין מכיל את השדות הבאים:
place_id
המזהה הייחודי של הבניין. פרטים נוספים זמינים בסקירה הכללית על מזהי מקומות.
building_outlines[]
מערך של קווי מתאר שמשויכים לבניין. למערך הזה יש רק רשומה אחת. כל אובייקט בשדה
building_outlines[]
מכיל את השדה הבא:display_polygon
קידוד GeoJSON של המצולע שמייצג בקירוב את שטח הפנים של כדור הארץ שמכוסה על ידי הבניין, בפורמט RFC 7946
מערך entrances[]
עם השדות הבאים:
location
קואורדינטות של קו הרוחב/קו האורך של הכניסה.
building_place_id
מזהה המקום של הבניין ב
buildings[]
שבו נמצאת הכניסה הזו. כך תוכלו לזהות באילו בניינים נמצאות כניסות מסוימות. הכניסה הזו תואמת לבניין באינדקסi
ב-buildings[]
כאשרbuildings[i].place_id
שווה ל-building_place_id
של הכניסה הזו. הערה: הערך הזה שונה ממזהה המקום של תוצאת הקידוד הגיאוגרפי, אלא אם תוצאת הקידוד הגיאוגרפי היא של הבניין עצמו. הפרמטר הזה לא תמיד יאוכלס.entrance_tags[]
מערך של תגי כניסה שמתארים את מאפייני הכניסה. הערך הנתמך הוא:
"PREFERRED"
מציין שהכניסה הזו כנראה מספקת גישה פיזית למקום שהוחזר. יכולים להיות למקום כמה כניסות מועדפות. אם אין תג כזה לכניסה, המשמעות היא שהכניסה נמצאת פיזית באותו בניין, אבל לא בהכרח מאפשרת גישה למקום.
לדוגמה, אם המקום שהוחזר הוא מסעדה במרכז קניות, הערכים של
"PREFERRED"
יהיו הכניסות שמובילות למסעדה עצמה, והכניסות האחרות שיוחזרו יהיו כניסות אחרות לבניין, כמו כניסות למסעדות אחרות במרכז הקניות.אם המקום שמוחזר הוא בניין, הכניסות
"PREFERRED"
יהיו אלה שמובילות לחלק ה "ראשי" של הבניין. לדוגמה, בקניון,"PREFERRED"
הכניסות יהיו אלה שמאפשרות גישה לאזור המבואה הראשי, אבל אם כניסה מסוימת מאפשרת גישה רק לחנות בצד הבניין, היא לא תהיה"PREFERRED"
כניסה.
בתמונה שלמטה אפשר לראות ייצוג ויזואלי של קווי המתאר של הבניין והכניסות שהוחזרו עבור בקשת הדוגמה שלמעלה.
התשובה לבקשת הדוגמה שלמעלה מציגה שתי כניסות ובניין אחד עם קו מתאר. שימו לב שbuilding_place_id
של כל כניסה זהה לplace_id
של הבניין:
{
"entrances": [
{
"building_place_id" : "ChIJU1erIO-2j4ARzlavxpYBJr8",
"location" :
{
"lat" : 37.3736684,
"lng" : -122.0540469
},
"entrance_tags": ["PREFERRED"]
},
{
"building_place_id" : "ChIJU1erIO-2j4ARzlavxpYBJr8",
"location" :
{
"lat" : 37.3738239,
"lng" : -122.0539773
},
}
],
"buildings" : [
{
"building_outlines" : [
{
"display_polygon" : {
"coordinates" : [
[
[
-122.054453349467,
37.3742345734776
],
[
-122.054665964955,
37.3737591984554
],
[
-122.054080317537,
37.3735936952922
],
[
-122.053867527481,
37.374069124071
],
[
-122.054453349467,
37.3742345734776
]
]
],
"type" : "Polygon"
}
}
],
"place_id" : "ChIJU1erIO-2j4ARzlavxpYBJr8"
}
],
}
הצגת קווי מתאר של בניינים במפה
ל-JavaScript API יש תמיכה מובנית בהצגת מצולעים וצורות מורכבות בפורמט RFC 7946. כך עושים זאת:
- יוצרים אובייקט של תכונה באמצעות נתוני הפוליגון.
- מחילים סגנון על הפוליגון.
- מצרפים את התכונה לאובייקט המפה של JavaScript.
כל אובייקט במערך buildings
מכיל אובייקט יחיד במערך building_outlines
. בדוגמה הבאה מוצג קו מתאר של בניין במפה:
//This function takes an argument of 'buildings', which is the buildings[] array returned by the API.
async function displayBuildingOutline(buildings) {
try {
//Import the Google Maps Data library.
const { Data } = await google.maps.importLibrary("maps")
//Loop though the array of building outlines.
buildings.forEach(building => {
const features = []
const buildingOutlines = building.building_outlines;
//Add each building outline to a Feature object, and push this to an array of Features.
buildingOutlines.forEach(buildingOutline => {
const feature = {
type: "Feature",
properties: {},
geometry: buildingOutline.display_polygon
}
features.push(feature);
});
//Create a new Google Maps Data object, and apply styling.
//We also assume the reference to the map on the page is named 'map'.
//This applies the Data object to the map on the page.
outlineLayer = new google.maps.Data({
map,
style: {
strokeColor: "#0085cc",
strokeOpacity: 1,
strokeWeight: 2,
fillColor: "#88d4fc",
fillOpacity: 0.5,
},
});
//Add the array of Features created earlier to the Data object, as GeoJson.
outlineLayer.addGeoJson({
type: "FeatureCollection",
features: features,
});
});
} catch (e) {
console.log('Building outlines failed. Error: ' + e)
}
}
באמצעות הקוד שלמעלה, מתאר הבניין שמוחזר על ידי Geocoding API בתשובה לדוגמה שמופיעה קודם במסמך הזה מוצג במפה באופן הבא:
טיפול בתשובות עם כמה בניינים או קווי מתאר של בניינים
יכול להיות שתיתקלו גם במצבים הבאים, אבל קוד הדוגמה שלמעלה יפעל גם במקרים האלה:
- אובייקט
building_outlines
יחיד שמייצג כמה פוליגונים. - תגובה עם כמה בניינים במערך
buildings[]
.
לדוגמה, התשובה למזהה המקום ChIJGxgH9QBVHBYRl13JmZ0BFgo
מכילה שני בניינים במערך buildings[]
:
"buildings": [
{
"building_outlines": [
{
"display_polygon": {
"coordinates": [
[
[
44.3313253363354,
13.636033631612
],
[
44.3312576355624,
13.6362094887862
],
[
44.3310854239923,
13.6361461767801
],
[
44.3311531250111,
13.6359703194634
],
[
44.3313253363354,
13.636033631612
]
]
],
"type": "Polygon"
}
}
],
"place_id": "ChIJ24NWUBhUHBYRSEmPBFa1wgc"
},
{
"building_outlines": [
{
"display_polygon": {
"coordinates": [
[
[
44.330737534504,
13.6357057440832
],
[
44.3307248314371,
13.6357390350529
],
[
44.3306985591742,
13.635729486373
],
[
44.3307114066013,
13.6356960265536
],
[
44.330737534504,
13.6357057440832
]
]
],
"type": "Polygon"
}
}
],
"place_id": "ChIJpzQOABlUHBYRxiOC9goY1fE"
}
]
בעזרת דוגמת הקוד של JavaScript שמופיעה למעלה, אנחנו יכולים להציג את קווי המתאר של שני הבניינים במפה:
משוב
זוהי תכונה ניסיונית. נשמח לקבל משוב בכתובת geocoding-feedback-channel@google.com.