ใช้ Region Lookup API กับ Google ชีต

คุณสามารถค้นหารหัสสถานที่สำหรับภูมิภาคแบบออฟไลน์ได้โดยเรียกใช้ Region Lookup API จาก Google ชีตโดยใช้ Apps Script แนะนำให้ใช้กับชุดข้อมูลที่พารามิเตอร์อินพุตกำกวมและอาจเปลี่ยนเป็นรหัสสถานที่หลายรหัส (เช่น "10 Main Street") ซึ่งอาจต้องมีการแก้ไขข้อบกพร่อง มีตัวอย่างสคริปต์พร้อมฟังก์ชันต่อไปนี้

  • SearchRegionByLocation ค้นหาสถานที่ที่มีขอบเขต พิกัดละติจูด/ลองจิจูดที่ระบุ
  • SearchRegionByAddress ค้นหาสถานที่ซึ่งมีขอบเขตที่อยู่ที่ระบุ
  • SearchRegionByPlaceId ค้นหาสถานที่โดยใช้รหัสสถานที่ที่ระบุ
  • LookupRegionByName ค้นหาสถานที่ที่มีชื่อที่ระบุ
  • LookupRegionByUnitCode ค้นหาสถานที่โดยใช้รหัสหน่วยที่ระบุ

ฟังก์ชันที่กำหนดเองของการค้นหาภูมิภาค

หากต้องการใช้ฟังก์ชันที่กำหนดเอง คุณต้องเพิ่มโค้ดสคริปต์ .gs ของฟังก์ชันที่กำหนดเองในเครื่องมือแก้ไขสคริปต์ Apps Script ก่อน เมื่อโหลดสคริปต์แล้ว คุณจะเรียกใช้ฟังก์ชันต่างๆ ได้เช่นเดียวกับที่เรียกฟังก์ชันสเปรดชีตอื่นๆ สคริปต์จะรับข้อมูลอินพุตจากเซลล์ เรียกใช้ฟังก์ชันที่กำหนดเองจากชีต ดังนี้ =LookupRegionByName(A2,C2,D2,E2)

ผลลัพธ์จะแสดงเอาต์พุตในเซลล์ที่มีฟังก์ชัน และเซลล์ 2 เซลล์ทางด้านขวา หากมีรหัสสถานที่ที่ใช้ได้ ผลลัพธ์สำหรับรหัสสถานที่เหล่านั้นจะแสดงในเซลล์ที่อยู่ติดกันด้วย โดยจะมีลิงก์ไปยังหน้าสถานที่ที่แสดงชื่อภูมิภาคและรูปหลายเหลี่ยมใน Google Maps เพื่อใช้ในการยืนยัน ในตัวอย่างต่อไปนี้ หากวางฟังก์ชันลงในเซลล์ A1 ผลลัพธ์จะมีลักษณะคล้ายกับด้านล่างนี้

รหัสสถานที่ URL ของหน้าสถานที่ รหัสข้อผิดพลาด
ChIJLQQwv4qBb0gRIMaY1COLDQU https://www.google.com/maps/search/?api=1&query=%20&query_place_id=ChIJLQQwv4qBb0gRIMaY1COLDQU

ในตัวอย่างก่อนหน้านี้ คำขอดำเนินการสำเร็จ เซลล์ข้อผิดพลาดจึงว่างเปล่า สำหรับข้อผิดพลาดที่ทำให้สคริปต์ทำงานได้ไม่ถูกต้อง (เช่น การละเว้นคีย์ API ที่ถูกต้อง) ข้อผิดพลาดจะแสดงเป็นความคิดเห็นในเซลล์ที่มีฟังก์ชันดังกล่าว

เพิ่มฟังก์ชันที่กำหนดเองลงใน Apps Script

  1. เปิดสเปรดชีตใน Google ชีต
  2. เลือกรายการในเมนู ส่วนขยาย > Apps Script
  3. ลบโค้ดในเครื่องมือแก้ไขสคริปต์
  4. คัดลอกและวางโค้ดจากตัวอย่างด้านล่างลงในเครื่องมือแก้ไขสคริปต์
  5. แทนที่ YOUR_API_KEY ด้วยคีย์ API แบบไม่จำกัดที่เป็นของโปรเจ็กต์ที่เปิดใช้ API การค้นหาภูมิภาค
  6. คลิกบันทึก ที่ด้านบน
/**
 * @fileoverview Provides custom Geo functions in Google Sheets for matching boundaries.
 * * SearchRegionByLocation searches for a region whose boundary contains the specified latitude/longitude coordinates.
 * * SearchRegionByAddress searches for a region whose boundary contains the specified address.
 * * SearchRegionByPlaceId searches for a region whose boundary contains the specified place ID.
 * * LookupRegionByName looks up a region with the specified name.
 * * LookupRegionByUnitCode looks up a region with the specified unit code.
 * @OnlyCurrentDoc
 */

var api_key = "YOUR_API_KEY"; // An unrestricted key is recommended for local use only (deployment is NOT recommended).

function format_url(place_id) {
  return place_id && 'https://www.google.com/maps/search/?api=1&query=%20&query_place_id=' + place_id;
}

function format_result(result) {
  let matches = result.matches || [];
  let firstMatch = result.matches[0] || {};

  let placeId = firstMatch.matchedPlaceId || '';
  let debugInfo = firstMatch.debugInfo || '';
  let candidates = firstMatch.candidatePlaceIds || [];

  return [[
    placeId || '(NULL)',
    format_url(placeId),
    debugInfo,
    candidates[0],
    format_url(candidates[0]),
    candidates[1],
    format_url(candidates[1]),
    candidates[2],
    format_url(candidates[2])
    ]];
}

/**
 * Searches for a place whose boundary contains the specified latitude/longitude coordinates.
 *
 * @param {number} latitude - The latitude where the place will be found (e.g., 37.531939).
 * @param {number} longitude - The longitude where the place will be found (e.g., -122.2994121).
 * @param {string} place_type - The place type of the place ("postal_code", "administrative_area_level_1", "administrative_area_level_2", "locality", or "country").
 *
 * @return {string} The place_id of the place, or null if none was found.
 *
 * @customfunction
 */
function SearchRegionByLocation(
  latitude, longitude, place_type) {
  var data = {
    "search_values": [ {
      "latlng": { 'latitude': latitude, 'longitude': longitude }, // { latitude: 37.531939, longitude: -122.2994121 }
      "place_type": place_type,
      "region_code": null,
      "language_code": null,
    } ]
  };

  var options = {
    'method' : 'post',
    'contentType': 'application/json',
    'headers': {
        'X-Goog-Api-Key' : api_key
      },
      // Convert the JavaScript object to a JSON string.
      'payload' : JSON.stringify(data)
    };

  var response = UrlFetchApp.fetch(
    'https://regionlookup.googleapis.com/v1alpha:searchRegion',
    options);

  var resultText = response.getContentText();
  console.log(resultText);
  var result = JSON.parse(resultText);

  return format_result(result);
}

/**
 * Searches for a place whose boundary contains the specified address.
 *
 * @param {string} address - An address within the place boundaries (e.g., "1505 Salado Dr, Mountain View, CA").
 * @param {string} place_type - The geo type id of the place (e.g., "locality").
 * @param {string} [region_code='us'] - The region code of the place (e.g., "US").
 * @param {string} [language_code='en'] - The language code of the place's name. (e.g., "en").
 *
 * @return {string} The place_id of the place, or null if none was found.
 *
 * @customfunction
 */

function SearchRegionByAddress(
  address, place_type, region_code, language_code) {

  var data = {
    "search_values": {
        "address": address,
        "place_type" : place_type,
        "region_code": region_code || 'us',
        "language_code": language_code || 'en',
      }
  };

  var options = {
    'method' : 'post',
    'contentType': 'application/json',
    'headers': {
        'X-Goog-Api-Key' : api_key
      },
      // Convert the JavaScript object to a JSON string.
      'payload' : JSON.stringify(data)
    };

  var response = UrlFetchApp.fetch(
    'https://regionlookup.googleapis.com/v1alpha:searchRegion',
    options);

  var resultText = response.getContentText();
  console.log(resultText);
  var result = JSON.parse(resultText);

  return format_result(result);
}


/**
 * Searches for a place with the specified place ID.
 *
 * @param {string} place_id - The place ID to search for.
 * @param {string} place_type - The geo type id of the place (e.g., "locality").
 * @param {string} [region_code='us'] - The region code of the place (e.g., "US").
 * @param {string} [language_code='en'] - The language code of the place's name. (e.g., "en").
 *
 * @return {string} The place_id of the place, or null if none was found.
 *
 * @customfunction
 */
function SearchRegionByPlaceId(
  place_id, place_type, region_code, language_code) {

 var data = {
   "search_values": {
       "place_id": place_id,
       "place_type" : place_type,
       "region_code": region_code || 'us',
       "language_code": language_code || 'en',
     }
 };

 var options = {
   'method' : 'post',
   'contentType': 'application/json',
   'headers': {
       'X-Goog-Api-Key' : api_key
     },
     // Convert the JavaScript object to a JSON string.
     'payload' : JSON.stringify(data)
   };

 var response = UrlFetchApp.fetch(
   'https://regionlookup.googleapis.com/v1alpha:searchRegion',
   options);
  var resultText = response.getContentText();
 console.log(resultText);
 var result = JSON.parse(resultText);

 return format_result(result);
}

/**
 * Looks up a place with the specified name.
 *
 * @param {string} place_name - The name of the place (e.g., "Palo Alto").
 * @param {string} place_type - The geo type id of the place (e.g., "locality").
 * @param {string} [region_code='us'] - The region code of the place (e.g., "US").
 * @param {string} [language_code='en'] - The language code of the place's name. (e.g., "en").
 *
 * @return {string} The place_id of the place, or null if none was found.
 *
 * @customfunction
 */
function LookupRegionByName(
  place, place_type, region_code, language_code) {
  var data = {
    "identifiers": [ {
        "place": '' + place,
        "place_type": place_type,
        "region_code": region_code || 'us',
        "language_code": language_code || 'en',
      }
    ]
  };

  var options = {
    'method' : 'post',
    'contentType': 'application/json',
    'headers': {
        'X-Goog-Api-Key' : api_key
      },
      // Convert the JavaScript object to a JSON string.
      'payload' : JSON.stringify(data),
      //'muteHttpExceptions' : true,
    };

  var response = UrlFetchApp.fetch(
    'https://regionlookup.googleapis.com/v1alpha:lookupRegion',
    options);

  var resultText = response.getContentText();

  console.log(resultText);
  var result = JSON.parse(resultText);

  return format_result(result);
}

/**
 * Looks up a place with the specified unit code.
 *
 * @param {string} place_name - The name of the place (e.g., "Palo Alto").
 * @param {string} place_type - The geo type id of the place (e.g., "locality").
 * @param {string} [region_code='us'] - The region code of the place (e.g., "US").
 * @param {string} [language_code='en'] - The language code of the place's name. (e.g., "en").
 *
 * @return {string} The place_id of the place, or null if none was found.
 *
 * @customfunction
 */
function LookupRegionByUnitCode(
  unit_code, place_type, region_code, language_code) {
  var data = {
    "identifiers": [ {
        "unit_code": '' + unit_code,
        "place_type": place_type,
        "region_code": region_code || 'us',
        "language_code": language_code || 'en',
      }
    ]
  };

  var options = {
    'method' : 'post',
    'contentType': 'application/json',
    'headers': {
        'X-Goog-Api-Key' : api_key
      },
      // Convert the JavaScript object to a JSON string.
      'payload' : JSON.stringify(data),
      //'muteHttpExceptions' : true,
    };

  var response = UrlFetchApp.fetch(
    'https://regionlookup.googleapis.com/v1alpha:lookupRegion',
    options);

  var resultText = response.getContentText();

  console.log(resultText);
  var result = JSON.parse(resultText);

  return format_result(result);
}