Home > Article > Web Front-end > Using JavaScript and Tencent Maps to implement map rectangle drawing function
Using JavaScript and Tencent Maps to implement the map rectangle drawing function
Tencent Maps is one of the most widely used map applications in China, and it provides a wealth of APIs and tools , which can help developers implement various commonly used map functions. In this article, we will introduce how to use JavaScript and Tencent Map API to implement a simple map rectangle drawing function.
Step 1: Introduce Tencent Map API
First, to use Tencent Map API, we need to introduce the corresponding JavaScript file into the web page. We can add the following code snippet in the HTML file:
<!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>
We need to replace https://map.qq.com/api/js
with our own API key. For information on how to obtain and apply for API keys, please refer to [Tencent Map API official documentation](https://lbs.qq.com/webApi/javascriptV2/guide-getkey.html).
Step 2: Create a map object
After introducing the Tencent Map API, we need to create a map object in the JavaScript code. We can achieve this through the following code:
var map = new qq.maps.Map(document.getElementById("map"), { center: new qq.maps.LatLng(39.916527, 116.397128), zoom: 13 });
The above code creates a map object and binds it to the element with the ID "map" in the HTML page. The center of the initial map is the center of Beijing, and the zoom level is level 13.
Step 3: Create a rectangle
Next, we need to create a tool that can draw a rectangle. Tencent Maps API provides the qq.maps.Rectangle
class, which can be used to draw rectangles. We can create a rectangular object and add it to the map through the following code:
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 });
The above code creates a rectangular object and sets the latitude and longitude boundaries of the rectangle through the bounds
property,# The ##strokeWeight property sets the width of the rectangular border, the
fillColor property sets the color of the rectangular area, and the
fillOpacity property sets the transparency of the rectangular area.
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; }); });In the above code, we implement the functions of dragging the rectangle and adjusting the size of the rectangle. Four arrows are created using the marker object, and the user can resize the rectangle by dragging these arrows. When dragging the arrow, we first create a new
qq.maps.LatLngBounds object, and then modify the latitude and longitude boundaries of the rectangle based on the position of the dragged arrow.
The above is the detailed content of Using JavaScript and Tencent Maps to implement map rectangle drawing function. For more information, please follow other related articles on the PHP Chinese website!