谷歌地图标记位置

时间:2016-02-05 21:17:50

标签: javascript jquery google-maps google-maps-api-3

好的......下面是网页模板中的js - 无法找到使用lat和long更新地图标记位置的位置。

/*!
 * jQuery FN Google Map 3.0-rc
 * http://code.google.com/p/jquery-ui-map/
 * Copyright (c) 2010 - 2012 Johan Säll Larsson
 * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
 */
( function($) {

/**
 * @param name:string
 * @param prototype:object
 */
$.a = function(name, prototype) {

    var namespace = name.split('.')[0];
    name = name.split('.')[1];

    $[namespace] = $[namespace] || {};
    $[namespace][name] = function(options, element) {
        if ( arguments.length ) {
            this._setup(options, element);
        }
    };

    $[namespace][name].prototype = $.extend({
        'namespace': namespace,
        'pluginName': name
    }, prototype);

    $.fn[name] = function(options) {

        var isMethodCall = typeof options === "string",
            args = Array.prototype.slice.call(arguments, 1),
            returnValue = this;

        if ( isMethodCall && options.substring(0, 1) === '_' ) { 
            return returnValue; 
        }

        this.each(function() {
            var instance = $.data(this, name);
            if (!instance) {
                instance = $.data(this, name, new $[namespace][name](options, this));
            }
            if (isMethodCall) {
                returnValue = instance[options].apply(instance, args);
            }
        });

        return returnValue; 

    };

};

$.a('ui.gmap', {

    /**
     * Map options
     * @see http://code.google.com/intl/sv-SE/apis/maps/documentation/javascript/reference.html#MapOptions
     */
    options: {
        mapTypeId: 'roadmap',
        zoom: 5 
    },

    /**
     * Get or set options
     * @param key:string
     * @param options:object
     * @return object
     */
    option: function(key, options) {
        if (options) {
            this.options[key] = options;
            this.get('map').set(key, options);
            return this;
        }
        return this.options[key];
    },

    /**
     * Setup plugin basics, 
     * @param options:object
     * @param element:node
     */
    _setup: function(options, element) {
        this.el = element;
        options = options || {};
        jQuery.extend(this.options, options, { 'center': this._latLng(options.center) });
        this._create();
        if ( this._init ) { this._init(); }
    },

    /**
     * Instanciate the Google Maps object
     */
    _create: function() {
        var self = this;
        this.instance = { 'map': new google.maps.Map(self.el, self.options), 'markers': [], 'overlays': [], 'services': [] };
        google.maps.event.addListenerOnce(self.instance.map, 'bounds_changed', function() { $(self.el).trigger('init', self.instance.map); });
        self._call(self.options.callback, self.instance.map);
    },

    /**
     * Adds a latitude longitude pair to the bounds.
     * @param position:google.maps.LatLng/string
     */
    addBounds: function(position) {
        var bounds = this.get('bounds', new google.maps.LatLngBounds());
        bounds.extend(this._latLng(position));
        this.get('map').fitBounds(bounds);
        return this;
    },

    /**
     * Helper function to check if a LatLng is within the viewport
     * @param marker:google.maps.Marker
     */
    inViewport: function(marker) {
        var bounds = this.get('map').getBounds();
        return (bounds) ? bounds.contains(marker.getPosition()) : false;
    },

    /**
     * Adds a custom control to the map
     * @param panel:jquery/node/string  
     * @param position:google.maps.ControlPosition   
     * @see http://code.google.com/intl/sv-SE/apis/maps/documentation/javascript/reference.html#ControlPosition
     */
    addControl: function(panel, position) {
        this.get('map').controls[position].push(this._unwrap(panel));
        return this;
    },

    /**
     * Adds a Marker to the map
     * @param markerOptions:google.maps.MarkerOptions
     * @param callback:function(map:google.maps.Map, marker:google.maps.Marker) (optional)
     * @return $(google.maps.Marker)
     * @see http://code.google.com/intl/sv-SE/apis/maps/documentation/javascript/reference.html#MarkerOptions
     */
    addMarker: function(markerOptions, callback) {
        markerOptions.map = this.get('map');
        markerOptions.position = this._latLng(markerOptions.position);
        var marker = new (markerOptions.marker || google.maps.Marker)(markerOptions);
        var markers = this.get('markers');
        if ( marker.id ) {
            markers[marker.id] = marker;
        } else {
            markers.push(marker);
        }
        if ( marker.bounds ) {
            this.addBounds(marker.getPosition());
        }
        this._call(callback, markerOptions.map, marker);
        return $(marker);
    },

    /**
     * Clears by type
     * @param ctx:string    e.g. 'markers', 'overlays', 'services'
     */
    clear: function(ctx) {
        this._c(this.get(ctx));
        this.set(ctx, []);
        return this;
    },

    _c: function(obj) {
        for ( var property in obj ) {
            if ( obj.hasOwnProperty(property) ) {
                if ( obj[property] instanceof google.maps.MVCObject ) {
                    google.maps.event.clearInstanceListeners(obj[property]);
                    if ( obj[property].setMap ) {
                        obj[property].setMap(null);
                    }
                } else if ( obj[property] instanceof Array ) {
                    this._c(obj[property]);
                }
                obj[property] = null;
            }
        }
    },

    /**
     * Returns the objects with a specific property and value, e.g. 'category', 'tags'
     * @param ctx:string    in what context, e.g. 'markers' 
     * @param options:object    property:string the property to search within, value:string, operator:string (optional) (AND/OR)
     * @param callback:function(marker:google.maps.Marker, isFound:boolean)
     */
    find: function(ctx, options, callback) {
        var obj = this.get(ctx);
        options.value = $.isArray(options.value) ? options.value : [options.value];
        for ( var property in obj ) {
            if ( obj.hasOwnProperty(property) ) {
                var isFound = false;
                for ( var value in options.value ) {
                    if ( $.inArray(options.value[value], obj[property][options.property]) > -1 ) {
                        isFound = true;
                    } else {
                        if ( options.operator && options.operator === 'AND' ) {
                            isFound = false;
                            break;
                        }
                    }
                }
                callback(obj[property], isFound);
            }
        }
        return this;
    },

    /**
     * Returns an instance property by key. Has the ability to set an object if the property does not exist
     * @param key:string
     * @param value:object(optional)
     */
    get: function(key, value) {
        var instance = this.instance;
        if ( !instance[key] ) {
            if ( key.indexOf('>') > -1 ) {
                var e = key.replace(/ /g, '').split('>');
                for ( var i = 0; i < e.length; i++ ) {
                    if ( !instance[e[i]] ) {
                        if (value) {
                            instance[e[i]] = ( (i + 1) < e.length ) ? [] : value;
                        } else {
                            return null;
                        }
                    }
                    instance = instance[e[i]];
                }
                return instance;
            } else if ( value && !instance[key] ) {
                this.set(key, value);
            }
        }
        return instance[key];
    },

    /**
     * Triggers an InfoWindow to open
     * @param infoWindowOptions:google.maps.InfoWindowOptions
     * @param marker:google.maps.Marker (optional)
     * @param callback:function (optional)
     * @see http://code.google.com/intl/sv-SE/apis/maps/documentation/javascript/reference.html#InfoWindowOptions
     */
    openInfoWindow: function(infoWindowOptions, marker, callback) {
        var iw = this.get('iw', infoWindowOptions.infoWindow || new google.maps.InfoWindow);
        iw.setOptions(infoWindowOptions);
        iw.open(this.get('map'), this._unwrap(marker)); 
        this._call(callback, iw);
        return this;
    },

    /**
     * Triggers an InfoWindow to close
     */
    closeInfoWindow: function() {
        if ( this.get('iw') != null ) {
            this.get('iw').close();
        }
        return this;
    },

    /**
     * Sets an instance property
     * @param key:string
     * @param value:object
     */
    set: function(key, value) {
        this.instance[key] = value;
        return this;
    },

    /**
     * Refreshes the map
     */
    refresh: function() {
        var map = this.get('map');
        var latLng = map.getCenter();
        $(map).triggerEvent('resize');
        map.setCenter(latLng);
        return this;
    },

    /**
     * Destroys the plugin.
     */
    destroy: function() {
        this.clear('markers').clear('services').clear('overlays')._c(this.instance);
        jQuery.removeData(this.el, this.name);
    },

    /**
     * Helper method for calling a function
     * @param callback
     */
    _call: function(callback) {
        if ( callback && $.isFunction(callback) ) {
            callback.apply(this, Array.prototype.slice.call(arguments, 1));
        }
    },

    /**
     * Helper method for google.maps.Latlng
     * @param latLng:string/google.maps.LatLng
     */
    _latLng: function(latLng) {
        if ( !latLng ) {
            return new google.maps.LatLng(0.0, 0.0);
        }
        if ( latLng instanceof google.maps.LatLng ) {
            return latLng;
        } else {
            latLng = latLng.replace(/ /g,'').split(',');
            return new google.maps.LatLng(latLng[0], latLng[1]);
        }
    },

    /**
     * Helper method for unwrapping jQuery/DOM/string elements
     * @param obj:string/node/jQuery
     */
    _unwrap: function(obj) {
        return (!obj) ? null : ( (obj instanceof jQuery) ? obj[0] : ((obj instanceof Object) ? obj : $('#'+obj)[0]) )
    }

});

jQuery.fn.extend( {

    triggerEvent: function(eventType) {
        google.maps.event.trigger(this[0], eventType);
        return this;
    },

    addEventListener: function(eventType, eventDataOrCallback, eventCallback) {
        if ( google.maps && this[0] instanceof google.maps.MVCObject ) {
            google.maps.event.addListener(this[0], eventType, eventDataOrCallback);
        } else {
            if (eventCallback) {
                this.bind(eventType, eventDataOrCallback, eventCallback);
            } else {
                this.bind(eventType, eventDataOrCallback);
            } 
        }
        return this;
    }

    /*removeEventListener: function(eventType) {
        if ( google.maps && this[0] instanceof google.maps.MVCObject ) {
            if (eventType) {
                google.maps.event.clearListeners(this[0], eventType);
            } else {
                google.maps.event.clearInstanceListeners(this[0]);
            }
        } else {
            this.unbind(eventType);
        }
        return this;
    }*/

});


jQuery.each(('click rightclick dblclick mouseover mouseout drag dragend').split(' '), function(i, name) {
    jQuery.fn[name] = function(a, b) {
        return this.addEventListener(name, a, b);
    }
});

} (jQuery) );

0 个答案:

没有答案