mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-31 21:37:16 +00:00
174 lines
5.9 KiB
CoffeeScript
174 lines
5.9 KiB
CoffeeScript
######################################################################################################
|
|
############################################## Bing Maps ##########################################
|
|
######################################################################################################
|
|
|
|
#// http://wiki.openstreetmap.org/wiki/OpenLayers
|
|
#// http://openlayers.org/dev/examples
|
|
#//http://docs.openlayers.org/contents.html
|
|
|
|
class @Gmaps4RailsBing extends Gmaps4Rails
|
|
|
|
constructor: ->
|
|
super
|
|
@map_options =
|
|
type: "road" # aerial, auto, birdseye, collinsBart, mercator, ordnanceSurvey, road
|
|
@markers_conf =
|
|
infobox: "description" #description or htmlContent
|
|
|
|
@mergeWithDefault("map_options")
|
|
@mergeWithDefault("markers_conf")
|
|
|
|
#////////////////////////////////////////////////////
|
|
#/////////////// Basic Objects //////////////
|
|
#////////////////////////////////////////////////////
|
|
|
|
getMapType: ->
|
|
switch @map_options.type
|
|
when "road" then return Microsoft.Maps.MapTypeId.road
|
|
when "aerial" then return Microsoft.Maps.MapTypeId.aerial
|
|
when "auto" then return Microsoft.Maps.MapTypeId.auto
|
|
when "birdseye" then return Microsoft.Maps.MapTypeId.birdseye
|
|
when "collinsBart" then return Microsoft.Maps.MapTypeId.collinsBart
|
|
when "mercator" then return Microsoft.Maps.MapTypeId.mercator
|
|
when "ordnanceSurvey" then return Microsoft.Maps.MapTypeId.ordnanceSurvey
|
|
else return Microsoft.Maps.MapTypeId.auto
|
|
|
|
createPoint: (lat, lng) ->
|
|
return new Microsoft.Maps.Point(lat, lng)
|
|
|
|
createLatLng:(lat, lng) ->
|
|
return new Microsoft.Maps.Location(lat, lng)
|
|
|
|
createLatLngBounds: ->
|
|
|
|
createMap: ->
|
|
return new Microsoft.Maps.Map(document.getElementById(@map_options.id), {
|
|
credentials: @map_options.provider_key,
|
|
mapTypeId: @getMapType(),
|
|
center: @createLatLng(@map_options.center_latitude, @map_options.center_longitude),
|
|
zoom: @map_options.zoom
|
|
})
|
|
|
|
createSize: (width, height) ->
|
|
return new google.maps.Size(width, height)
|
|
|
|
#////////////////////////////////////////////////////
|
|
#////////////////////// Markers /////////////////////
|
|
#////////////////////////////////////////////////////
|
|
|
|
createMarker: (args) ->
|
|
markerLatLng = @createLatLng(args.Lat, args.Lng)
|
|
marker
|
|
#// Marker sizes are expressed as a Size of X,Y
|
|
if args.marker_picture == ""
|
|
marker = new Microsoft.Maps.Pushpin(@createLatLng(args.Lat, args.Lng), {
|
|
draggable: args.marker_draggable,
|
|
anchor: @createImageAnchorPosition(args.Lat, args.Lng),
|
|
text: args.marker_title
|
|
}
|
|
);
|
|
else
|
|
marker = new Microsoft.Maps.Pushpin(@createLatLng(args.Lat, args.Lng), {
|
|
draggable: args.marker_draggable,
|
|
anchor: @createImageAnchorPosition(args.Lat, args.Lng),
|
|
icon: args.marker_picture,
|
|
height: args.marker_height,
|
|
text: args.marker_title,
|
|
width: args.marker_width
|
|
}
|
|
);
|
|
@addToMap(marker)
|
|
return marker
|
|
|
|
#// clear markers
|
|
clearMarkers: ->
|
|
for marker in @markers
|
|
@clearMarker marker
|
|
|
|
clearMarker: (marker) ->
|
|
@removeFromMap(marker.serviceObject)
|
|
|
|
#//show and hide markers
|
|
showMarkers: ->
|
|
for marker in @markers
|
|
@showMarker marker
|
|
|
|
showMarker: (marker) ->
|
|
marker.serviceObject.setOptions({ visible: true })
|
|
|
|
hideMarkers: ->
|
|
for marker in @markers
|
|
@hideMarker marker
|
|
|
|
hideMarker: (marker) ->
|
|
marker.serviceObject.setOptions({ visible: false })
|
|
|
|
extendBoundsWithMarkers: ->
|
|
locationsArray = []
|
|
for marker in @markers
|
|
locationsArray.push(marker.serviceObject.getLocation())
|
|
@boundsObject = Microsoft.Maps.LocationRect.fromLocations(locationsArray)
|
|
|
|
#////////////////////////////////////////////////////
|
|
#/////////////////// Clusterer //////////////////////
|
|
#////////////////////////////////////////////////////
|
|
|
|
createClusterer: (markers_array) ->
|
|
|
|
clearClusterer: ->
|
|
|
|
#//creates clusters
|
|
clusterize: ->
|
|
|
|
#////////////////////////////////////////////////////
|
|
#/////////////////// INFO WINDOW ////////////////////
|
|
#////////////////////////////////////////////////////
|
|
|
|
#// creates infowindows
|
|
createInfoWindow: (marker_container) ->
|
|
if marker_container.description?
|
|
#//create the infowindow
|
|
if @markers_conf.infobox == "description"
|
|
marker_container.info_window = new Microsoft.Maps.Infobox(marker_container.serviceObject.getLocation(), { description: marker_container.description, visible: false, showCloseButton: true})
|
|
else
|
|
marker_container.info_window = new Microsoft.Maps.Infobox(marker_container.serviceObject.getLocation(), { htmlContent: marker_container.description, visible: false})
|
|
|
|
#//add the listener associated
|
|
currentMap = this
|
|
Microsoft.Maps.Events.addHandler(marker_container.serviceObject, 'click', @openInfoWindow(currentMap, marker_container.info_window))
|
|
@addToMap(marker_container.info_window)
|
|
|
|
openInfoWindow: (currentMap, infoWindow) ->
|
|
return ->
|
|
# Close the latest selected marker before opening the current one.
|
|
if currentMap.visibleInfoWindow
|
|
currentMap.visibleInfoWindow.setOptions({ visible: false })
|
|
infoWindow.setOptions({ visible:true })
|
|
currentMap.visibleInfoWindow = infoWindow
|
|
|
|
#////////////////////////////////////////////////////
|
|
#/////////////////// Other methods //////////////////
|
|
#////////////////////////////////////////////////////
|
|
|
|
fitBounds: ->
|
|
@serviceObject.setView({bounds: @boundsObject})
|
|
|
|
addToMap: (object)->
|
|
@serviceObject.entities.push(object)
|
|
|
|
removeFromMap: (object)->
|
|
@serviceObject.entities.remove(object)
|
|
|
|
centerMapOnUser: ->
|
|
@serviceObject.setView({ center: @userLocation})
|
|
|
|
updateBoundsWithPolylines: ()->
|
|
|
|
updateBoundsWithPolygons: ()->
|
|
|
|
updateBoundsWithCircles: ()->
|
|
|
|
extendMapBounds :->
|
|
|
|
adaptMapToBounds: ->
|
|
@fitBounds() |