ชั้นแผนที่ความหนาแน่น

เลือกแพลตฟอร์ม: Android iOS JavaScript
  1. ภาพรวม
  2. โหลดไลบรารีการแสดงภาพ
  3. เพิ่มจุดข้อมูลแบบถ่วงน้ำหนัก
  4. ปรับแต่งเลเยอร์แผนที่ความหนาแน่น

เลเยอร์แผนที่ความหนาแน่นจะแสดงภาพแผนที่ความหนาแน่นในฝั่งไคลเอ็นต์

ภาพรวม

แผนที่ความหนาแน่นเป็นการแสดงข้อมูลผ่านภาพที่แสดงความหนาแน่นของข้อมูลในจุดทางภูมิศาสตร์ เมื่อเปิดใช้เลเยอร์แผนที่ความหนาแน่น การวางซ้อนที่มีสีจะปรากฏขึ้นที่ด้านบนของแผนที่ โดยค่าเริ่มต้น พื้นที่ที่มีความเข้มสูงจะเป็นสีแดง และพื้นที่ที่มีความเข้มต่ำกว่าจะเป็นสีเขียว

โหลดไลบรารีการแสดงภาพ

เลเยอร์แผนที่ความหนาแน่นเป็นส่วนหนึ่งของไลบรารี google.maps.visualization และจะไม่โหลดโดยค่าเริ่มต้น คลาสการแสดงภาพเป็นไลบรารีที่มีในตัว ซึ่งแยกต่างหากจากโค้ด Maps JavaScript API หลัก หากต้องการใช้ฟังก์ชันการทำงานที่มีอยู่ภายในไลบรารีนี้ ก่อนอื่นคุณต้องโหลดโดยใช้พารามิเตอร์ libraries ใน URL เริ่มต้นระบบของ Maps JavaScript API ดังนี้

<script async
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&libraries=visualization&callback=initMap">
</script>

เพิ่มเลเยอร์แผนที่ความหนาแน่น

หากต้องการเพิ่มเลเยอร์แผนที่ความหนาแน่น ก่อนอื่นคุณต้องสร้างออบเจ็กต์ HeatmapLayer ใหม่และระบุข้อมูลทางภูมิศาสตร์ในรูปแบบอาร์เรย์หรือออบเจ็กต์ MVCArray[] ข้อมูลอาจเป็นออบเจ็กต์ LatLng หรือออบเจ็กต์ WeightedLocation หลังจากสร้างอินสแตนซ์ HeatmapLayer แล้ว ให้เพิ่มออบเจ็กต์ลงในแผนที่โดยการเรียกใช้เมธอด setMap()

ตัวอย่างต่อไปนี้ได้เพิ่มจุดข้อมูล 14 จุดลงในแผนที่ซานฟรานซิสโก

/* Data points defined as an array of LatLng objects */
var heatmapData = [
  new google.maps.LatLng(37.782, -122.447),
  new google.maps.LatLng(37.782, -122.445),
  new google.maps.LatLng(37.782, -122.443),
  new google.maps.LatLng(37.782, -122.441),
  new google.maps.LatLng(37.782, -122.439),
  new google.maps.LatLng(37.782, -122.437),
  new google.maps.LatLng(37.782, -122.435),
  new google.maps.LatLng(37.785, -122.447),
  new google.maps.LatLng(37.785, -122.445),
  new google.maps.LatLng(37.785, -122.443),
  new google.maps.LatLng(37.785, -122.441),
  new google.maps.LatLng(37.785, -122.439),
  new google.maps.LatLng(37.785, -122.437),
  new google.maps.LatLng(37.785, -122.435)
];

var sanFrancisco = new google.maps.LatLng(37.774546, -122.433523);

map = new google.maps.Map(document.getElementById('map'), {
  center: sanFrancisco,
  zoom: 13,
  mapTypeId: 'satellite'
});

var heatmap = new google.maps.visualization.HeatmapLayer({
  data: heatmapData
});
heatmap.setMap(map);

เพิ่มจุดข้อมูลแบบถ่วงน้ำหนัก

แผนที่ความหนาแน่นจะแสดงออบเจ็กต์ LatLng หรือ WeightedLocation หรือทั้ง 2 อย่างรวมกันได้ ออบเจ็กต์ทั้ง 2 รายการแสดงจุดข้อมูลเดียวบนแผนที่ แต่ออบเจ็กต์ WeightedLocation ช่วยให้คุณระบุน้ำหนักสำหรับจุดข้อมูลนั้นได้เพิ่มเติม การนำน้ำหนักไปใช้กับจุดข้อมูลจะทำให้การแสดงผล WeightedLocation มีความเข้มมากกว่าออบเจ็กต์ LatLng แบบง่าย น้ำหนักเป็นสเกลเส้นตรง ซึ่งออบเจ็กต์ LatLng แต่ละรายการมีน้ำหนักโดยนัยเป็น 1 การเพิ่ม WeightedLocation เพียงรายการเดียวของ {location: new google.maps.LatLng(37.782, -122.441), weight: 3} จะมีผลเหมือนกับการเพิ่ม google.maps.LatLng(37.782, -122.441) 3 ครั้ง คุณสามารถผสมออบเจ็กต์ weightedLocation และ LatLng ในอาร์เรย์เดียวได้

การใช้ออบเจ็กต์ WeightedLocation แทน LatLng มีประโยชน์ในกรณีต่อไปนี้

  • เพิ่มข้อมูลปริมาณมากในตำแหน่งที่ตั้งเดียว การแสดงออบเจ็กต์ WeightedLocation เดียวที่มีน้ำหนัก 1,000 จะเร็วกว่าการแสดงออบเจ็กต์ LatLng จำนวน 1,000 รายการ
  • การใช้การเน้นข้อมูลตามค่าที่กำหนดเอง ตัวอย่างเช่น คุณสามารถใช้วัตถุ LatLng เมื่อพล็อตข้อมูลแผ่นดินไหวได้ แต่อาจต้องการใช้ WeightedLocation เพื่อวัดขนาดของแผ่นดินไหวแต่ละครั้งโดยใช้ขนาดริกเตอร์
/* Data points defined as a mixture of WeightedLocation and LatLng objects */
var heatMapData = [
  {location: new google.maps.LatLng(37.782, -122.447), weight: 0.5},
  new google.maps.LatLng(37.782, -122.445),
  {location: new google.maps.LatLng(37.782, -122.443), weight: 2},
  {location: new google.maps.LatLng(37.782, -122.441), weight: 3},
  {location: new google.maps.LatLng(37.782, -122.439), weight: 2},
  new google.maps.LatLng(37.782, -122.437),
  {location: new google.maps.LatLng(37.782, -122.435), weight: 0.5},

  {location: new google.maps.LatLng(37.785, -122.447), weight: 3},
  {location: new google.maps.LatLng(37.785, -122.445), weight: 2},
  new google.maps.LatLng(37.785, -122.443),
  {location: new google.maps.LatLng(37.785, -122.441), weight: 0.5},
  new google.maps.LatLng(37.785, -122.439),
  {location: new google.maps.LatLng(37.785, -122.437), weight: 2},
  {location: new google.maps.LatLng(37.785, -122.435), weight: 3}
];

var sanFrancisco = new google.maps.LatLng(37.774546, -122.433523);

map = new google.maps.Map(document.getElementById('map'), {
  center: sanFrancisco,
  zoom: 13,
  mapTypeId: 'satellite'
});

var heatmap = new google.maps.visualization.HeatmapLayer({
  data: heatMapData
});
heatmap.setMap(map);

ปรับแต่งเลเยอร์แผนที่ความหนาแน่น

คุณปรับแต่งวิธีแสดงผลแผนที่ความหนาแน่นได้โดยใช้ตัวเลือกแผนที่ความหนาแน่นต่อไปนี้ ดูข้อมูลเพิ่มเติมในเอกสารประกอบของ HeatmapLayerOptions

  • dissipating: ระบุว่าแผนที่ความหนาแน่นจะจางลงเมื่อซูมหรือไม่ เมื่อการกระจายเป็นผิด รัศมีของอิทธิพลจะเพิ่มขึ้นตามระดับการซูมเพื่อให้มั่นใจได้ว่าความเข้มของสียังคงอยู่ที่ตำแหน่งทางภูมิศาสตร์ที่กำหนด ค่าเริ่มต้นคือ true
  • gradient: การไล่ระดับสีของแผนที่ความหนาแน่น ระบุเป็นอาร์เรย์ของสตริงสี CSS ระบบรองรับสี CSS3 ทั้งหมด รวมถึง RGBA ยกเว้นค่าสีที่มีชื่อเพิ่มเติมและ HSL(A)
  • maxIntensity: ความเข้มสูงสุดของแผนที่ความหนาแน่น โดยค่าเริ่มต้น สีแผนที่ความหนาแน่นจะมีการปรับขนาดแบบไดนามิกตามความเข้มข้นสูงสุดของจุดบนพิกเซลหนึ่งๆ บนแผนที่ พร็อพเพอร์ตี้นี้ช่วยให้คุณระบุจำนวนสูงสุดคงที่ได้ การตั้งค่าความเข้มสูงสุดจะมีประโยชน์เมื่อชุดข้อมูลมีค่าผิดปกติ 2-3 รายการที่มีความเข้มสูงผิดปกติ
  • radius: รัศมีของอิทธิพลที่จุดข้อมูลแต่ละจุดมีหน่วยเป็นพิกเซล
  • opacity: ความทึบแสงของแผนที่ความหนาแน่นซึ่งแสดงเป็นตัวเลขระหว่าง 0 ถึง 1

ตัวอย่างด้านล่างแสดงตัวเลือกการปรับแต่งบางส่วนที่ใช้ได้

ดูตัวอย่าง