aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <cbaines8@gmail.com>2013-03-02 22:13:01 +0000
committerChristopher Baines <cbaines8@gmail.com>2013-03-02 22:13:01 +0000
commit679086b8d0bc393f698b289454d698a0f0c6b33c (patch)
tree829844226dac8cc3c8691db9262d2f4a0fb101aa
parentdb408996fa441654c6aaa5688706b2b10fd3b04a (diff)
downloadhealth-map-master.tar
health-map-master.tar.gz
Update some libs, and improve display on different zoom levelsHEADmaster
m---------resources/leaflet0
m---------resources/leaflet-hash0
m---------resources/leaflet-minimap0
-rw-r--r--resources/map.js48
-rw-r--r--resources/op2geojson.js77
m---------resources/openlayers0
6 files changed, 88 insertions, 37 deletions
diff --git a/resources/leaflet b/resources/leaflet
-Subproject 7e029d21cc48557133d70ceb852fb327f8462b6
+Subproject 333899ca518b6ad7080e7e9ddb0492d4ba4c5d5
diff --git a/resources/leaflet-hash b/resources/leaflet-hash
-Subproject 07f9178d8fd84b3fb030f34f361f63e5a19dbcd
+Subproject 03d9033897b275646948366ae355b6e60866dd5
diff --git a/resources/leaflet-minimap b/resources/leaflet-minimap
-Subproject e1cc0a5978e6fd68642e5e276a77c7563b7df77
+Subproject 50e3d6e64eecb0d1dd796aab6edcf8714605748
diff --git a/resources/map.js b/resources/map.js
index 8a006bc..8a7bac4 100644
--- a/resources/map.js
+++ b/resources/map.js
@@ -184,7 +184,7 @@ function initMap(self) {
}
});
- map.addLayer(self.populationHeatMap);
+ //map.addLayer(self.populationHeatMap);
self.layersControl.addOverlay(self.populationHeatMap, "Population Heat Map");
var emptyFeatureCollection = { type: "FeatureCollection", features: [] };
@@ -253,7 +253,9 @@ function initMap(self) {
layer.options.icon = hospitalIcon;
center = feature.geometry.coordinates;
} else {
- center = feature.geometry.coordinates[0];
+ var format = new OpenLayers.Format.GeoJSON;
+ var geom = format.parseGeometry(feature.geometry);
+ center = geom.getCentroid();
}
var catchmentArea = self.catchmentAreas[feature.id];
@@ -332,8 +334,6 @@ function displayMap(self, map) {
var ne = bounds.getNorthEast();
bbox = [sw.lat, sw.lng, ne.lat, ne.lng].join(',');
- self.converter = new op2geojson();
-
function addSettlementsForArea(catchmentArea) {
// Create the bounding polygon for the query
var poly = "";
@@ -357,11 +357,10 @@ function displayMap(self, map) {
} else {
self.catchmentAreaSettlementsLayers[catchmentArea.id] = L.geoJson(data, {
style: function(feature) {
- return {fillColor: 'green',
- weight: 2,
+ return {fillColor: 'grey',
+ weight: 1,
opacity: 1,
color: 'black',
- dashArray: '3',
fillOpacity: 0.1};
},
onEachFeature: function(feature, layer) {
@@ -369,7 +368,9 @@ function displayMap(self, map) {
if (feature.geometry.type === "Point") {
center = feature.geometry.coordinates;
} else {
- center = feature.geometry.coordinates[0];
+ var format = new OpenLayers.Format.GeoJSON;
+ var geom = format.parseGeometry(feature.geometry);
+ center = geom.getCentroid();
}
var displayProperties = { name: feature.properties["name"], population: feature.properties["population"] };
@@ -391,21 +392,28 @@ function displayMap(self, map) {
var healthPost = self.healthPosts[catchmentArea.properties.subject];
- var center;
- if (healthPost.geometry.type === "Point") {
- center = healthPost.geometry.coordinates;
+ if (_.isUndefined(healthPost)) {
+ console.log("No health post found for catchment area");
} else {
- center = healthPost.geometry.coordinates[0];
- }
+ var center;
+ if (healthPost.geometry.type === "Point") {
+ center = healthPost.geometry.coordinates;
+ } else {
+ var format = new OpenLayers.Format.GeoJSON;
+ var geom = format.parseGeometry(healthPost.geometry);
+ center = geom.getCentroid();
+ }
+
+ self.markers[catchmentArea.properties.subject].bindPopup(self.editorTemplate({coordinate: center}) +
+ self.healthPostTemplate(healthPost.properties) +
+ self.catchmentAreaTemplate(catchmentAreaProperties(catchmentArea, healthPost)));
- self.markers[catchmentArea.properties.subject].bindPopup(self.editorTemplate({coordinate: center}) +
- self.healthPostTemplate(healthPost.properties) +
- self.catchmentAreaTemplate(catchmentAreaProperties(catchmentArea, healthPost)));
+ }
}
}
// Fetch settlement data
- self.converter.fetch("http://overpass-api.de/api/interpreter", query, zoom,
+ self.converter.fetch("http://overpass-api.de/api/interpreter", query, zoom, map.getCenter().lat,
(function(catchmentArea) { return function (data) { processSettlements(data, catchmentArea); }; })(catchmentArea));
}
@@ -417,7 +425,7 @@ function displayMap(self, map) {
self.populationHeatMapData = [];
// Convert the data to GeoJSON
- self.converter.fetch("http://overpass-api.de/api/interpreter", query, zoom, function(data) {
+ self.converter.fetch("http://overpass-api.de/api/interpreter", query, zoom, map.getCenter().lat, function(data) {
self.catchmentAreaLayer.clearLayers();
var oldCatchmentAreas = self.catchmentAreas;
@@ -514,12 +522,12 @@ $(document).ready(function() {
}
function onLocationError(e) {
- alert(e.message);
+ //alert(e.message);
}
map.on('locationfound', onLocationFound);
map.on('locationerror', onLocationError);
map.locate({setView: true, maxZoom: 12});
- displayMap(self, map);
+ //displayMap(self, map);
});
diff --git a/resources/op2geojson.js b/resources/op2geojson.js
index a4233fd..d928310 100644
--- a/resources/op2geojson.js
+++ b/resources/op2geojson.js
@@ -5,7 +5,7 @@ op2geojson = function() {
var instance = {},
geojson;
- instance.fetch = function(url, data, zoom, callback) {
+ instance.fetch = function(url, data, zoom, latitude, callback) {
var postCallback = function(data) {
// Add nodes and ways to the layer
var features = [];
@@ -31,23 +31,43 @@ op2geojson = function() {
}
});
+ var format = new OpenLayers.Format.GeoJSON;
+ // circumference of the Earth * cos(latitude)/2^(zoom level +8)
+ var latitudeInRadians = latitude * Math.PI/180;
+ var metersPerPixel = (40075000 * Math.cos(latitudeInRadians))/(Math.pow(2, (zoom + 8)));
+
$.each(ways, function(i, way) {
- if (zoom < 16) {
- var node = nodes[way.nodes[0]];
- var point = {
- type : "Feature",
- id : way.id,
- geometry : {
- type : "Point",
- coordinates : [node.lon,node.lat]
- },
- properties : {}
- };
- _.extend(point.properties, way.tags);
- features.push(point);
- } else {
- features.push(instance.lineString(way, nodes));
- }
+ if (!_.isUndefined(way.tags) && (
+ way.tags.amenity == "hospital" ||
+ !_.isUndefined(way.tags.place) ||
+ way.tags.landuse == "residential")) {
+
+ var area = instance.wayToPolygon(way, nodes);
+
+ var areaGeo = format.parseGeometry(area.geometry);
+
+ var geodesicArea = areaGeo.getGeodesicArea();
+ var averageWidth = Math.sqrt(geodesicArea);
+ var pixelsOfAverageWidth = averageWidth / metersPerPixel;
+
+ if (pixelsOfAverageWidth < 10) {
+ var node = nodes[way.nodes[0]];
+ var centroid = areaGeo.getCentroid();
+ var point = {
+ type : "Feature",
+ id : way.id,
+ geometry : {
+ type : "Point",
+ coordinates : [centroid.x, centroid.y]
+ },
+ properties : {}
+ };
+ _.extend(point.properties, way.tags);
+ features.push(point);
+ } else {
+ features.push(area);
+ }
+ }
});
$.each(relations, function(i, relation) {
@@ -167,6 +187,29 @@ op2geojson = function() {
return poly;
}
+ instance.wayToPolygon = function(way, nodeArray) {
+ // Get the node coordinates from nodeArray
+ var coordinates = [];
+ for (id in way.nodes) {
+ var node = nodeArray[way.nodes[id]];
+ coordinates.push([node.lon,node.lat]);
+ }
+
+ // Create the LineString
+ var poly = {
+ type : "Feature",
+ geometry : {
+ type : "Polygon",
+ coordinates : [coordinates]
+ },
+ properties : {}
+ };
+
+ // Add the tags
+ _.extend(poly.properties, way.tags);
+ return poly;
+ }
+
return instance;
};
diff --git a/resources/openlayers b/resources/openlayers
-Subproject 47e7c300a81011257d4e34739ce14f02f71c5d0
+Subproject 5b98769234dc20172a3cb6eeb77e60b297766e4