ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript と Tencent Maps を使用して地図四角形描画機能を実装する

JavaScript と Tencent Maps を使用して地図四角形描画機能を実装する

王林
王林オリジナル
2023-11-21 17:59:15921ブラウズ

JavaScript と Tencent Maps を使用して地図四角形描画機能を実装する

JavaScript と Tencent Maps を使用して地図四角形描画機能を実装する

Tencent Maps は中国で最も広く使用されている地図アプリケーションの 1 つであり、豊富な機能を提供します。 API とツール : 開発者が一般的に使用されるさまざまなマップ関数を実装するのに役立ちます。この記事では、JavaScript と Tencent Map API を使用して、簡単な地図四角形描画機能を実装する方法を紹介します。

ステップ 1: Tencent Map API を導入する

まず、Tencent Map API を使用するには、対応する JavaScript ファイルを Web ページに導入する必要があります。次のコード スニペットを 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>

https://map.qq.com/api/js を独自の API キーに置き換える必要があります。 API キーの取得および申請方法については、[Tencent Map API 公式ドキュメント](https://lbs.qq.com/webApi/javascriptV2/guide-getkey.html)を参照してください。

ステップ 2: マップ オブジェクトを作成する

Tencent Map 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 です。

ステップ 3: 四角形を作成する

次に、四角形を描画できるツールを作成する必要があります。 Tencent Maps 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 を通じて長方形の緯度と経度の境界を設定します。 property,drawingWeight プロパティは長方形の境界線の幅を設定し、fillColor プロパティは長方形の領域の色を設定し、fillOpacity プロパティはその透明度を設定します。長方形の領域。

ステップ 4: 四角形のドラッグとサイズ変更を実装する

四角形オブジェクトを作成した後、四角形のドラッグやサイズ変更などの対話型機能を実装する必要があります。

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;
    });
});

上記のコードでは、四角形をドラッグし、四角形のサイズを調整する機能を実装しています。マーカー オブジェクトを使用して 4 つの矢印が作成され、ユーザーはこれらの矢印をドラッグすることで四角形のサイズを変更できます。矢印をドラッグするときは、まず新しい qq.maps.LatLngBounds オブジェクトを作成し、次にドラッグされた矢印の位置に基づいて四角形の緯度と経度の境界を変更します。

結論

この記事を通じて、Tencent Map API を HTML ページに導入し、マップ オブジェクトと四角形オブジェクトを作成し、四角形のインタラクティブ機能を実装する方法を学びました。この小さな例では、Tencent Map API の使用法の一部を示し、いくつかの基本的な JavaScript プログラミング スキルも提供します。完全なコードは[ここ](https://codepen.io/halfoceans/pen/LYejvmG)でご覧いただけます。

以上がJavaScript と Tencent Maps を使用して地図四角形描画機能を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。