OneGui adlı üyeden alıntı: mesajı görüntüle
Hocam json çıktı gönderirmisiniz
Hocam ben size pm'den direk ilgili klasörün ftpsini göndereyim dosyalara bakın isterseniz.



Sanırım rota oluşturan js kodları bunlar bu kodlarda ne gibi bir değişiklik yapsam sıralamayı km ye göre yaparım.
var Shape = function(options) {
        var self = this;

        this.name = ko.observable(options.name);
        this.description = ko.observable(options.description);
        this.type = ko.observable(options.type);
        this.icon = ko.observable(options.icon);
        this.isVisible = ko.observable(options.isVisible);
        this.data = options.data || {};
        this.layer = options.layer || null;
        this.map = options.map;

        if (this.type() == "directions") {
            this.destinations = ko.observableArray([]);
            this.editing = ko.observable(options.editing);
            this.preserveViewport = options.preserveViewport;
            this.totalDistance = ko.observable(0);
            this.totalDuration = ko.observable(0);
            this.avoidHighways = ko.observable(options.avoidHighways);
            this.avoidTolls = ko.observable(options.avoidTolls);

            this.toggleAvoidHighways = function() {
                self.avoidHighways(!self.avoidHighways());
            }
            this.toggleAvoidTolls = function() {
                self.avoidTolls(!self.avoidTolls());
            }
            this.totalDistancePrint = ko.computed(function() {
                var v = self.totalDistance();
                var vKm = Math.floor(v/1000);
                if (vKm > 9) return vKm + " km";
                if (vKm > 0) return Math.floor(v/100)/10 + " km";
                return v + " m";
            });
            this.totalDurationPrint = ko.computed(function() {
                var v = self.totalDuration();
                var vHours = Math.floor(v/3600);
                if (vHours > 0) return vHours + " saat " + Math.floor(v%3600/60) + " dakika";
                return Math.floor(v/60) + " saniye";
            });
            this.paramsPrint = ko.computed(function() {
                var ar = [];
                ar.push(self.totalDistancePrint());
                ar.push(self.totalDurationPrint());
                ar.push(self.avoidHighways()?"no hways":"");
                ar.push(self.avoidTolls()?"no tolls":"");
                return ar.filter(function(str) { return str.length>0}).join(", ");
            });
            this.generateShapeName = function() {
                var l = self.destinations().length;
                if (l>=2) {
                    var firstName = self.destinations()[0].name();
                    var lastName = self.destinations()[l-1].name();
                    self.name(firstName && lastName ? firstName + " - " + lastName:"");
                }
                else
                    self.name("");
            }
            this.addDestination = function(destinationName) {
                var d = new Destination(destinationName);
                d.on("change",self.generateShapeName);
                self.destinations.push(d);
            }
            this.removeDestination = function(destination) {
                var i = self.destinations().indexOf(destination);
                if (i>=0) self.destinations.splice(i,1);
            }
            this.editDirections = function() {
                self.editing(true);
            }
            this.buildDirections = function(callback) {
                var ar = self.destinations();
                var ar1 = [];
                for (var i = 1; i < ar.length-1; i++)
                    ar1.push({location:ar[i].name()});
                console.log("buildDirections, destinations.length=",self.destinations().length);
                var directionsService = new gmaps.DirectionsService();
                directionsService.route({
                    origin: ar[0].name(),
                    destination: ar[ar.length-1].name(),
                    waypoints: ar1,
                    travelMode: gmaps.TravelMode.DRIVING,
                    avoidHighways: self.avoidHighways(),
                    avoidTolls: self.avoidTolls()
                },function(response,status) {
                    if (status == gmaps.DirectionsStatus.OK) {
                        self.data = response;
                        var totalDistance = 0;
                        var totalDuration = 0;
                        response.routes.forEach(function(route) {
                            route.legs.forEach(function(leg) {
                                totalDistance+=leg.distance.value;
                                totalDuration+=leg.duration.value;
                            });
                        });
                        self.totalDistance(totalDistance);
                        self.totalDuration(totalDuration);
                    }
                    else {
                        console.error("gmaps.DirectionsService error",response,status);
                    }
                    self.directionsDataIsReady = true;
                    callback && callback();
                });
            }
            this.done = function() {
                if (self.isVisible()) {
                    self.buildDirections(function() {
                        self.redraw();
                    });
                }
                self.editing(false);
            }
            options.destinations.forEach(function(destinationName) {
                self.addDestination(destinationName);
            });
            this.generateShapeName();
        }
    }

    Shape.prototype.redraw = function() {
        this.clear();
        if (!this.isVisible()) return;
        this.draw();
    }

    Shape.prototype.clear = function() {
        if (this.model) {
            this.model.setMap(null);
            delete this.model;
        }
        if (this.directionsModel) {
            this.directionsModel.setMap(null);
            delete this.directionsModel;
        }
        if (this.modelDragendListener) {
            gmaps.event.removeListener(this.modelDragendListener);
            delete this.modelDragendListener;
        }
        if (this.modelClickListener) {
            gmaps.event.removeListener(this.modelClickListener);
            delete this.modelClickListener;
        }
    }

    Shape.prototype.draw = function() {
        var self = this;
        if (this.type() == "marker" && this.map() && this.data.lat && this.data.lng) {
            this.model = new gmaps.Marker({
                position: new gmaps.LatLng(this.data.lat,this.data.lng),
                map: this.map(),
                draggable: true
            });
            this.modelDragendListener = gmaps.event.addListener(this.model,"dragend",function() {
                var position = self.model.getPosition();
                self.data.lat = position.lat();
                self.data.lng = position.lng();
            });
            this.modelClickListener = gmaps.event.addListener(this.model,"mousedown",function() {
                self.emit("showShape");
            });
        }
        if (this.type() == "directions" && this.map()) {
            var callback = function() {
                self.directionsModel = new gmaps.DirectionsRenderer();
                if (self.preserveViewport) self.directionsModel.setOptions({preserveViewport:self.preserveViewport});
                self.directionsModel.setMap(self.map());
                self.directionsModel.setDirections(self.data);                
            }
            if (this.directionsDataIsReady) callback();
            else this.buildDirections(callback);
        }
    }

    Shape.prototype.hide = function() {
        if (this.type() == "marker" && this.model) {
            this.model.setMap(null);
        }
        if (this.type() == "directions" && this.directionsModel) {
            this.directionsModel.setMap(null);
        }
    }

    Shape.prototype.show = function() {
        if (!this.map()) return;
        if (this.type() == "marker") {
            this.model ? this.model.setMap(this.map()) : this.redraw();
        }
        if (this.type() == "directions") {
            if (this.directionsModel) {
                this.directionsModel.setOptions({
                    preserveViewport: true
                });
                this.directionsModel.setMap(this.map());                
            }
            else {
                this.preserveViewport = true;
                this.redraw();
            }
        }
    }

    Shape.prototype.deleteShape = function() {
        this.emit("deleteShape");
    }

    Shape.prototype.exportShape = function() {
        var exportData = {
            name: this.name(),
            description: this.description(),
            type: this.type()
        }
        if (this.type() == "marker") {
            exportData.data = {lat:this.data.lat,lng:this.data.lng};
        }
        if (this.type() == "directions") {
            exportData.destinations = [];
            this.destinations().forEach(function(destination) {
                exportData.destinations.push(destination.name());
            });
            exportData.avoidHighways = this.avoidHighways();
            exportData.avoidTolls = this.avoidTolls();
        }
        console.log("exportData",exportData);
        return exportData;
    }

    $.extend(Shape.prototype,EventEmitter.prototype);

    return Shape;
});