Move the :initialLatitude and :initialLongitude methods from the OpenStreetMap service to the MapCenterCalculator service.

This commit is contained in:
Cillian O'Ruanaidh
2020-07-24 16:00:30 +01:00
parent 1199a356c4
commit cc317bc8c9
6 changed files with 52 additions and 38 deletions

View File

@@ -36,10 +36,10 @@ Darkswarm.directive 'ofnOpenStreetMap', ($window, MapCentreCalculator, Enterpris
zoomLevel = 6
map = L.map('open-street-map')
L.tileLayer.provider(openStreetMapProviderName, openStreetMapProviderOptions).addTo(map)
map.setView([initialLatitude(), initialLongitude()], zoomLevel)
map.setView([MapCentreCalculator.initialLatitude(), MapCentreCalculator.initialLongitude()], zoomLevel)
displayEnterprises = ->
for enterprise in geocodedEnterprises()
for enterprise in Enterprises.geocodedEnterprises()
marker = buildMarker(enterprise, { lat: enterprise.latitude, lng: enterprise.longitude }, enterprise.name).addTo(map)
enterpriseNames.push(enterpriseName(enterprise))
markers.push(marker)
@@ -53,25 +53,9 @@ Darkswarm.directive 'ofnOpenStreetMap', ($window, MapCentreCalculator, Enterpris
search: searchEnterprises
)
overwriteInlinePositionRelativeToAbsoluteOnSearchField()
if geocodedEnterprises().length == 0
if Enterprises.geocodedEnterprises().length == 0
disableSearchField()
geocodedEnterprises = () ->
Enterprises.enterprises.filter (enterprise) ->
enterprise.latitude? && enterprise.longitude?
initialLatitude = () ->
if geocodedEnterprises().length > 0
MapCentreCalculator.calculate_latitude(geocodedEnterprises())
else
openStreetMapConfig.open_street_map_default_latitude
initialLongitude = () ->
if geocodedEnterprises().length > 0
MapCentreCalculator.calculate_longitude(geocodedEnterprises())
else
openStreetMapConfig.open_street_map_default_longitude
overwriteInlinePositionRelativeToAbsoluteOnSearchField = ->
$('#open-street-map--search').css("position", "absolute")

View File

@@ -84,3 +84,8 @@ Darkswarm.factory 'Enterprises', (enterprises, ShopsResource, CurrentHub, Taxons
resetDistance: ->
enterprise.distance = null for enterprise in @enterprises
geocodedEnterprises: =>
@enterprises.filter (enterprise) ->
enterprise.latitude? && enterprise.longitude?

View File

@@ -2,9 +2,7 @@ Darkswarm.factory "OfnMap", (Enterprises, EnterpriseListModal, MapConfiguration)
new class OfnMap
constructor: ->
@coordinates = {}
@enterprises = Enterprises.enterprises.filter (enterprise) ->
# Remove enterprises w/o lat or long
enterprise.latitude != null || enterprise.longitude != null
@enterprises = Enterprises.geocodedEnterprises()
@enterprises = @enterprise_markers(@enterprises)
enterprise_markers: (enterprises) ->

View File

@@ -1,10 +1,17 @@
Darkswarm.factory 'MapCentreCalculator', ->
Darkswarm.factory 'MapCentreCalculator', (Enterprises, openStreetMapConfig) ->
new class MapCentreCalculator
calculate_latitude: (coordinates) =>
@_calculate("latitude", coordinates)
calculate_longitude: (coordinates) =>
@_calculate("longitude", coordinates)
initialLatitude: =>
if Enterprises.geocodedEnterprises().length > 0
@_calculate("latitude", Enterprises.geocodedEnterprises())
else
openStreetMapConfig.open_street_map_default_latitude
initialLongitude: =>
if Enterprises.geocodedEnterprises().length > 0
@_calculate("longitude", Enterprises.geocodedEnterprises())
else
openStreetMapConfig.open_street_map_default_longitude
_calculate: (angleName, coordinates) =>
positiveAngles = []

View File

@@ -24,7 +24,7 @@ describe "Enterprises service", ->
{id: 5, visible: true, name: 'e', category: "producer_hub", hubs: [{id: 1}]},
{id: 6, visible: true, name: 'f', category: "producer_shop", hubs: [{id: 2}]},
{id: 7, visible: true, name: 'g', category: "producer", hubs: [{id: 2}]}
{id: 8, visible: true, name: 'h', category: "producer", hubs: [{id: 2}]}
{id: 8, visible: true, name: 'h', category: "producer", hubs: [{id: 2}], latitude: 76.26, longitude: -42.66 }
]
H1: 0
beforeEach ->
@@ -142,4 +142,8 @@ describe "Enterprises service", ->
it "resets the distance", ->
Enterprises.resetDistance()
for e in Enterprises.enterprises
expect(e.distance).toBeNull()
expect(e.distance).toBeNull()
describe "geocodedEnterprises", ->
it "only returns enterprises which have a latitude and longitude", ->
expect(Enterprises.geocodedEnterprises()).toEqual [Enterprises.enterprises[7]]

View File

@@ -1,5 +1,6 @@
describe 'MapCentreCalculator service', ->
MapCentreCalculator = null
Enterprises = null
defaultLongitude = null
defaultLatitude = null
@@ -7,27 +8,42 @@ describe 'MapCentreCalculator service', ->
module 'Darkswarm'
defaultLongitude = -6
defaultLatitude = 53
angular.module('Darkswarm').value 'openStreetMapConfig', {
open_street_map_default_latitude: 76.26,
open_street_map_default_longitude: -42.66
}
inject (_MapCentreCalculator_)->
inject (_MapCentreCalculator_, _Enterprises_)->
MapCentreCalculator = _MapCentreCalculator_
Enterprises = _Enterprises_
describe "calculate_latitude", ->
it "calculates the center latitude", ->
coordinates = [
describe "initialLatitude", ->
it "calculates the center latitude of any present geocoded enterprises", ->
Enterprises.geocodedEnterprises = -> [
{ latitude: 53, longitude: defaultLongitude },
{ latitude: 54, longitude: defaultLongitude }
]
expect(MapCentreCalculator.calculate_latitude(coordinates)).toEqual 53.5
expect(MapCentreCalculator.initialLatitude()).toEqual 53.5
describe "calculate_longitude", ->
it "calculates the center longitude", ->
coordinates = [
it "returns the default configured latitude when there are no geocoded enterprises present", ->
Enterprises.geocodedEnterprises = -> []
expect(MapCentreCalculator.initialLatitude()).toEqual 76.26
describe "initialLongitude", ->
it "calculates the center longitude of any present geocoded enterprises", ->
Enterprises.geocodedEnterprises = -> [
{ latitude: defaultLatitude, longitude: -6 },
{ latitude: defaultLatitude, longitude: -7 }
]
expect(MapCentreCalculator.calculate_longitude(coordinates)).toEqual -6.5
expect(MapCentreCalculator.initialLongitude()).toEqual -6.5
it "returns the default configured longitude when there are no geocoded enterprises present", ->
Enterprises.geocodedEnterprises = -> []
expect(MapCentreCalculator.initialLongitude()).toEqual -42.66
describe "_calculate", ->
it "calculates the average angle correctly when given a single angle", ->