Rumah  >  Artikel  >  hujung hadapan web  >  Menggunakan JavaScript dan Peta Tencent untuk melaksanakan fungsi lukisan segi empat tepat peta

Menggunakan JavaScript dan Peta Tencent untuk melaksanakan fungsi lukisan segi empat tepat peta

王林
王林asal
2023-11-21 17:59:15968semak imbas

Menggunakan JavaScript dan Peta Tencent untuk melaksanakan fungsi lukisan segi empat tepat peta

Gunakan Peta JavaScript dan Tencent untuk melaksanakan fungsi lukisan segi empat tepat peta

Peta Tencent ialah salah satu aplikasi peta yang paling banyak digunakan di China Ia menyediakan pelbagai API dan alatan untuk membantu pembangun melaksanakan pelbagai fungsi peta yang biasa digunakan. . Dalam artikel ini, kami akan memperkenalkan cara menggunakan JavaScript dan Tencent Map API untuk melaksanakan fungsi lukisan segi empat tepat peta mudah.

Langkah 1: Perkenalkan Tencent Map API

Pertama, untuk menggunakan Tencent Map API, kami perlu memperkenalkan fail JavaScript yang sepadan ke dalam halaman web. Kami boleh menambah coretan kod berikut dalam fail HTML:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>地图矩形绘制</title>
    <script type="text/javascript" src="https://map.qq.com/api/js?v=2.exp&key=YOUR_KEY"></script>
  </head>
  <body>
    <div id="map" style="width:100%; height:100%;"></div>
  </body>
</html>

Kami perlu menggantikan https://map.qq.com/api/js dengan kunci API kami sendiri. Untuk mendapatkan maklumat tentang cara mendapatkan dan memohon kunci API, sila rujuk [Dokumen Rasmi Tencent Map API](https://lbs.qq.com/webApi/javascriptV2/guide-getkey.html). https://map.qq.com/api/js替换为我们自己的API密钥。关于API密钥的获取和申请方法,可以参考[腾讯地图API官方文档](https://lbs.qq.com/webApi/javascriptV2/guide-getkey.html)。

步骤二:创建地图对象

在引入腾讯地图API之后,我们需要在JavaScript代码中创建地图对象。我们可以通过如下代码来实现:

var map = new qq.maps.Map(document.getElementById("map"), {
    center: new qq.maps.LatLng(39.916527, 116.397128),
    zoom: 13
});

以上代码中创建了一个地图对象,并将其绑定到HTML页面中ID为“map”的元素上。初始地图的中心位置为北京市中心,缩放级别为13级。

步骤三:创建矩形

接下来,我们需要创建一个可以绘制矩形的工具。腾讯地图API提供了qq.maps.Rectangle类,可以用来绘制矩形。我们可以通过如下代码来创建一个矩形对象并添加到地图上:

var rectangle = new qq.maps.Rectangle({
    map: map,
    bounds: new qq.maps.LatLngBounds(
        new qq.maps.LatLng(39.922890, 116.394230),
        new qq.maps.LatLng(39.906240, 116.424124)
    ),
    strokeWeight: 3,
    fillColor: "#FF0000",
    fillOpacity: 0.35
});

以上代码中创建了一个矩形对象,并通过bounds属性设置了矩形的经纬度边界,strokeWeight属性设置矩形边框的宽度,fillColor属性设置矩形区域的颜色,fillOpacity属性设置矩形区域的透明度。

步骤四:实现矩形的拖动和调整大小

创建矩形对象之后,我们需要实现交互性功能,包括矩形的拖动和调整大小。

var isDragging = false;
var isResizing = false;
var startX, startY;
var nw, sw, ne, se;

// 矩形拖拽事件
qq.maps.event.addListener(rectangle, "mousedown", function(e) {
    isDragging = true;
    startX = e.latLng.getLng();
    startY = e.latLng.getLat();
});

qq.maps.event.addListener(rectangle, "mousemove", function(e) {
    if (isDragging) {
        var dx = e.latLng.getLng() - startX;
        var dy = e.latLng.getLat() - startY;
        var bounds = rectangle.getBounds();
        var newBounds = new qq.maps.LatLngBounds(
            new qq.maps.LatLng(bounds.getSouthWest().getLat() + dy, bounds.getSouthWest().getLng() + dx),
            new qq.maps.LatLng(bounds.getNorthEast().getLat() + dy, bounds.getNorthEast().getLng() + dx)
        );
        rectangle.setBounds(newBounds);
        startX = e.latLng.getLng();
        startY = e.latLng.getLat();
    }
});

qq.maps.event.addListener(rectangle, "mouseup", function(e) {
    isDragging = false;
});

// 矩形大小调整事件
qq.maps.event.addListener(rectangle, "bounds_changed", function() {
    if (isResizing) {
        return;
    }
    nw = new qq.maps.Marker({
        icon: {
            path: "M -8,0 L -4,-12 L 8,-12 L 8,-16 L -16,-16 L -16,4 L -12,4 L -12,0 z",
            fillColor: "#FF0000",
            fillOpacity: 1,
            scale: 0.5,
            strokeColor: "#FFF",
            strokeWeight: 2
        },
        map: map,
        position: rectangle.getBounds().getNorthWest(),
        draggable: true,
        zIndex: 99999
    });
    sw = new qq.maps.Marker({
        icon: {
            path: "M -8,0 L -4,12 L 8,12 L 8,16 L -16,16 L -16,-4 L -12,-4 L -12,0 z",
            fillColor: "#FF0000",
            fillOpacity: 1,
            scale: 0.5,
            strokeColor: "#FFF",
            strokeWeight: 2
        },
        map: map,
        position: rectangle.getBounds().getSouthWest(),
        draggable: true,
        zIndex: 99999
    });
    ne = new qq.maps.Marker({
        icon: {
            path: "M -8,0 L -4,-12 L 8,-12 L 8,4 L -12,4 L -12,8 L -8,8 L -8,0 z",
            fillColor: "#FF0000",
            fillOpacity: 1,
            scale: 0.5,
            strokeColor: "#FFF",
            strokeWeight: 2
        },
        map: map,
        position: rectangle.getBounds().getNorthEast(),
        draggable: true,
        zIndex: 99999 
    });
    se = new qq.maps.Marker({
        icon: {
            path: "M -8,0 L -4,12 L 8,12 L 8,-4 L -12,-4 L -12,-8 L -8,-8 L -8,0 z",
            fillColor: "#FF0000",
            fillOpacity: 1,
            scale: 0.5,
            strokeColor: "#FFF",
            strokeWeight: 2
        },
        map: map,
        position: rectangle.getBounds().getSouthEast(),
        draggable: true,
        zIndex: 99999
    });

    // 区域大小调整事件
    qq.maps.event.addListener(nw, "drag", function() {
        isResizing = true;
        var bounds = rectangle.getBounds();
        var newBounds = new qq.maps.LatLngBounds(
            new qq.maps.LatLng(nw.getPosition().getLat(), nw.getPosition().getLng()),
            new qq.maps.LatLng(bounds.getSouthEast().getLat(), bounds.getSouthEast().getLng())
        );
        rectangle.setBounds(newBounds);
        isResizing = false;
    });
    
    qq.maps.event.addListener(sw, "drag", function() {
        isResizing = true;
        var bounds = rectangle.getBounds();
        var newBounds = new qq.maps.LatLngBounds(
            new qq.maps.LatLng(bounds.getNorthWest().getLat(), sw.getPosition().getLng()),
            new qq.maps.LatLng(sw.getPosition().getLat(), bounds.getNorthEast().getLng())
        );
        rectangle.setBounds(newBounds);
        isResizing = false;
    });
    
    qq.maps.event.addListener(ne, "drag", function() {
        isResizing = true;
        var bounds = rectangle.getBounds();
        var newBounds = new qq.maps.LatLngBounds(
            new qq.maps.LatLng(ne.getPosition().getLat(), bounds.getSouthWest().getLng()),
            new qq.maps.LatLng(bounds.getSouthEast().getLat(), ne.getPosition().getLng())
        );
        rectangle.setBounds(newBounds);
        isResizing = false;
    });
    
    qq.maps.event.addListener(se, "drag", function() {
        isResizing = true;
        var bounds = rectangle.getBounds();
        var newBounds = new qq.maps.LatLngBounds(
            new qq.maps.LatLng(bounds.getNorthWest().getLat(), bounds.getNorthWest().getLng()),
            new qq.maps.LatLng(se.getPosition().getLat(), se.getPosition().getLng())
        );
        rectangle.setBounds(newBounds);
        isResizing = false;
    });
});

以上代码中,我们实现了拖动矩形和调整矩形大小的功能。使用标记对象创建了四个箭头,用户可以通过拖动这些箭头来调整矩形的大小。拖动箭头时,我们先创建一个新的qq.maps.LatLngBounds

Langkah 2: Buat objek peta

Selepas memperkenalkan Tencent Map API, kita perlu mencipta objek peta dalam kod JavaScript. Kita boleh mencapai ini melalui kod berikut:

rrreee

Kod di atas mencipta objek peta dan mengikatnya pada elemen dengan ID "peta" dalam halaman HTML. Pusat peta awal ialah pusat Beijing, dan tahap zum ialah tahap 13. 🎜🎜Langkah 3: Buat segi empat tepat🎜🎜Seterusnya, kita perlu mencipta alat yang boleh melukis segi empat tepat. Tencent Maps API menyediakan kelas qq.maps.Rectangle, yang boleh digunakan untuk melukis segi empat tepat. Kita boleh mencipta objek segi empat tepat dan menambahnya pada peta melalui kod berikut: 🎜rrreee🎜Kod di atas mencipta objek segi empat tepat dan menetapkan sempadan latitud dan longitud bagi segi empat tepat melalui atribut bounds, strokeWeight Sifat menetapkan lebar sempadan segi empat tepat, sifat fillColor menetapkan warna kawasan segi empat tepat dan sifat fillOpacity menetapkan ketelusan bagi kawasan segi empat tepat. 🎜🎜Langkah 4: Laksanakan penyeretan dan saiz semula segi empat tepat🎜🎜Selepas mencipta objek segi empat tepat, kita perlu melaksanakan fungsi interaktif, termasuk menyeret dan mengubah saiz segi empat tepat. 🎜rrreee🎜Dalam kod di atas, kami melaksanakan fungsi menyeret dan mengubah saiz segi empat tepat. Empat anak panah dicipta menggunakan objek penanda, dan pengguna boleh mengubah saiz segi empat tepat dengan menyeret anak panah ini. Apabila menyeret anak panah, kami mula-mula mencipta objek qq.maps.LatLngBounds baharu, dan kemudian mengubah suai sempadan latitud dan longitud segi empat tepat mengikut kedudukan anak panah yang diseret. 🎜🎜Kesimpulan🎜🎜Melalui artikel ini, kami mempelajari cara memperkenalkan Tencent Map API ke dalam halaman HTML, mencipta objek peta dan objek segi empat tepat serta melaksanakan fungsi interaktif segi empat tepat. Contoh kecil ini menunjukkan sebahagian daripada penggunaan Tencent Map API, dan juga menyediakan beberapa kemahiran pengaturcaraan JavaScript asas. Kod lengkap boleh dilihat [di sini](https://codepen.io/halfoceans/pen/LYejvmG). 🎜

Atas ialah kandungan terperinci Menggunakan JavaScript dan Peta Tencent untuk melaksanakan fungsi lukisan segi empat tepat peta. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn