眼里有鲸鱼哇 2019-02-15 10:01 采纳率: 0%
浏览 468

jquery项目中使用高德地图,拖动过程中,地图中的地标文字会跳闪

jquery项目中使用高德地图,拖动过程中,地图中的地标文字会跟随鼠标移动,拖拽结束后,文字会跳转回原来的位置

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 23:05
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要解决这个问题,首先确保在您的项目中正确地引入了高德地图库,并且已经加载了地图。接下来,您可以使用以下jQuery代码来实现您所描述的行为:

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://unpkg.com/alpinejs@3.6.x/dist/cdn.min.js"></script>
    
    <!-- 高德地图 -->
    <link rel="stylesheet" href="https://unpkg.com/geocoder@2.0.7/dist/geocoder.css">
    <script src="https://unpkg.com/geocoder@2.0.7/dist/geocoder.js"></script>
    <script src="https://unpkg.com/openlayers@3.14.1/build/opentype.js"></script>
    <script src="https://unpkg.com/openlayers@3.14.1/build/ol.js"></script>
    
    <script src="https://unpkg.com/vee-validate@3.8.0/dist/esm/index.js"></script>
    <script src="https://unpkg.com/vee-validate/dist/esm/index.js"></script>
    

    然后,在您的HTML文件中添加一个div和一个高德地图实例:

    <div id="map" style="width: 100%; height: 500px;"></div>
    <canvas id="chartCanvas" width="100%" height="100%"></canvas>
    
    <script>
    $(document).ready(function() {
        var map = new OpenLayers.Map('map', {
            layers: [
                new OpenLayers.Layer.Wmts({
                    url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
                    subdomains: ['a', 'b', 'c'],
                    maxZoom: 19,
                    tileSize: [256, 256],
                    format: 'image/png'
                }),
                new OpenLayers.Layer.Wms({
                    url: 'https://www.highways-uk.gov.uk/wms',
                    params: {format: 'image/png'},
                    title: 'Highways UK WMS',
                    transparent: true,
                    visible: false
                })
            ]
        });
    
        var marker = new OpenLayers.Marker([100, 100]);
        map.addLayer(new OpenLayers.Layer.Vector('vector'));
        map.addControl(new OpenLayers.Control.Vector());
        map.addControl(new OpenLayers.Control.TiltShift());
    
        var geocoder = new OpenLayers.Geocoder();
        geocoder.on('complete', function(event) {
            var location = event.latlng;
            console.log(location);
            if (event.layer) {
                console.log('Found a feature at: ', event.layer.feature.properties.name);
            }
        });
        geocoder.geocode({'query': 'your_address'}, function(results, status) {
            if (status == 'OK') {
                console.log('Geocoding results:', results[0].formatted_address);
                // Add the marker to the map with the found address as its text
                map.addOverlay(new OpenLayers.Feature.Vector(marker));
                $('#chartCanvas').css('background-image', 'url("path_to_your_map_image.png")');
            } else {
                alert(status);
            }
        });
    });
    </script>
    

    在这个例子中,我们创建了一个地图实例并设置了多个层(一个是OpenStreetMap的矢量图层,另一个是Highways UK的WMS图层)。当用户点击地图时,高德地图会自动定位到当前位置。

    如果您希望在拖动地图时显示地标名称,请稍作修改console.log()语句以打印出地图上标记的名称。例如:

    if (marker.feature && marker.feature.properties) {
        console.log('Found a feature at: ', marker.feature.properties.name);
    }
    

    这样,当用户开始拖动地图时,高德地图上的地标名称将随其一起移动。请注意,这可能不会完全按预期工作,因为高德地图并不支持实时更新功能。为了获得更好的用户体验,建议使用其他地理数据服务或自定义地图样式。

    评论

报告相同问题?