我正从Google Maps API迁移到Apple MapKit JS,原​​因很简单,因为我拥有他们的开发人员帐户,并且他们提供了更多免费版本。

无论如何,MapKit JS的实际示例有些薄(或者至少Google找不到它们-绘制您将要使用的阴谋论),因此尽管我具备显示嵌入式地图的基本知识,但我似乎无法下一步是两点之间的路线(Apple的文档似乎也很扎眼,因为它们没有显示示例)。

这是我的基本地图脚本:

<script>
    mapkit.init({
        authorizationCallback: function(done) {
        done('[MY-TOKEN]');
        }
    });

    var MarkerAnnotation = mapkit.MarkerAnnotation
    var myMarker = new mapkit.Coordinate(55.9496320, -3.1866360)
    var myRegion = new mapkit.CoordinateRegion(
        new mapkit.Coordinate(55.9496320, -3.1866360),
        new mapkit.CoordinateSpan(0.003, 0.003)
    );
    var map = new mapkit.Map("map");
    var myAnnotation = new MarkerAnnotation(myMarker, { color: "#9b6bcc", title: "theSpace On The Mile"});
    map.showItems([myAnnotation]);
    map.region = myRegion;
</script>


现在我要:

•显示两点之间的步行路线

•在路线上包括航点

有人可以显示实现此目的的代码吗?一旦看到示例,我就知道了;-)

最佳答案

好的,所以我找到了解决方案,请在这里共享它以利于他人。

让我们首先说苹果的MapKit JS似乎没有Google Maps API提供的Waypoints选项-因此,解决方法是创建一个将标记存储在数组中的地图,然后从一个地图到另一个地图。该代码将最后一个航点的位置存储在一个变量中,并且如果这是数组中的第一个航点(显然),也不会费心绘制到最后一个航点的路线。

<script>
    // Initiallise MapKit - you'll need your own long-lived token for this
    mapkit.init({
        authorizationCallback: function(done) {
        done('[MY-TOKEN]');
        }
    });

    // Function to draw the route once MapKit has returned a response
    function directionHandler(error, data) {
        data["routes"].forEach(function(route, routeIdx) {
            if (routeIdx !== 0) { return; }
            overlays = [];
            route['path'].forEach(function(path) {
                // This styles the line drawn on the map
                let overlayStyle = new mapkit.Style({
                    lineWidth: 3,
                    strokeColor: "#9b6bcc"
                });
                let overlay = new mapkit.PolylineOverlay(path, {
                    style: overlayStyle
                });
                overlays.push(overlay);
            });
            map.addOverlays(overlays);
        });
    }

    // This asks MapKit for directions and when it gets a response sends it to directionHandler
    function computeDirections(origin,destination) {
        let directionsOptions = {
            origin: origin,
            destination: destination,
            transportType: mapkit.Directions.Transport.Walking
        };
        directions.route(directionsOptions, directionHandler);
    }

    // This sets the initial region, but is overridden when all points have been potted to automatically set the bounds
    var myRegion = new mapkit.CoordinateRegion(
        new mapkit.Coordinate(55.9496320, -3.1866360),
        new mapkit.CoordinateSpan(0.05, 0.05)
    );

    var map = new mapkit.Map("map");
    map.region = myRegion;


    var myAnnotations = [];
    // lastWaypoint variable is 'unset' initially so the map doesn't try and find a route to the lastWaypoint for the first point of the route
    var lastWaypoint = "unset";
    var directions = new mapkit.Directions();

    // Array of co-ordinates and label for marker
    waypoints = [
        {name:'Sofi’s Bar',lat:55.9746308,lon:-3.1722282},
        {name:'TThe Roseleaf Cafe',lat:55.975992,lon:-3.173474},
        {name:'Hemingway’s',lat:55.9763631,lon:-3.1706564},
        {name:'Teuchter’s Landing',lat:55.9774693,lon:-3.1713826},
        {name:'The King’s Wark',lat:55.9761425,lon:-3.1695419},
        {name:'Malt and Hops',lat:55.975885,lon:-3.1698957},
        {name:'The Carrier’s Quarters',lat:55.9760813,lon:-3.1685323},
        {name:'Noble’s',lat:55.974905,lon:-3.16714},
        {name:'The Fly Half',lat:55.9747906,lon:-3.1674496},
        {name:'Port O’ Leith',lat:55.974596,lon:-3.167525}
    ];

    // Loop through the array and create marker for each
    waypoints.forEach(function(data) {
        var myAnnotation = new mapkit.MarkerAnnotation(new mapkit.Coordinate(data['lat'],data['lon']), {
            color: "#9b6bcc",
            title: data['name']
        });
        myAnnotations.push(myAnnotation);
        // As long as this isn't the first point on the route, draw a route back to the last point
        if(lastWaypoint!="unset") {
            computeDirections(lastWaypoint,new mapkit.Coordinate(data['lat'],data['lon']));
        }
        lastWaypoint = new mapkit.Coordinate(data['lat'],data['lon']);
    });
    map.showItems(myAnnotations);
</script>


该地图用于在Leith周围的酒吧爬行,因此trasportType为'Walking',但如果您愿意,可以将其更改为'Automobile'。

归功于Vasile的MapKit JS演示(https://github.com/vasile/mapkit-js-demo)帮助我了解了更多有关这些选项的信息。

关于javascript - 使用起点,目的地和航路点创建MapKit JS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57513402/

10-13 03:10