Manually build America/Chicago and America/Mexico_City
Also includes some changes to America/Denver to make it line up with
America/Chicago
Refs #8
diff --git a/index.js b/index.js
index 6a24b7c..3c4f184 100644
--- a/index.js
+++ b/index.js
@@ -2,7 +2,7 @@
var fs = require('fs')
var helpers = require('@turf/helpers')
-var multiPolygon = helpers.multipolygon
+var multiPolygon = helpers.multiPolygon
var polygon = helpers.polygon
var asynclib = require('async')
var jsts = require('jsts')
@@ -38,6 +38,9 @@
case 'intersection':
result = a.intersection(b)
break
+ case 'intersects':
+ result = a.intersects(b)
+ break
case 'diff':
try {
result = a.difference(b)
@@ -72,10 +75,23 @@
return result
}
-var fetchIfNeeded = function (file, superCallback, fetchFn) {
+var fetchIfNeeded = function (file, superCallback, downloadCallback, fetchFn) {
+ // check for file that got downloaded
fs.stat(file, function (err) {
- if (!err) { return superCallback() }
- fetchFn()
+ if (!err) {
+ // file found, skip download steps
+ return superCallback()
+ }
+ // check for manual file that got fixed and needs validation
+ var fixedFile = file.replace('.json', '_fixed.json')
+ fs.stat(fixedFile, function (err) {
+ if (!err) {
+ // file found, return fixed file
+ return downloadCallback(null, require(fixedFile))
+ }
+ // no manual fixed file found, download from overpass
+ fetchFn()
+ })
})
}
@@ -118,7 +134,7 @@
asynclib.auto({
downloadFromOverpass: function (cb) {
console.log('downloading from overpass')
- fetchIfNeeded(boundaryFilename, boundaryCallback, function () {
+ fetchIfNeeded(boundaryFilename, boundaryCallback, cb, function () {
var overpassResponseHandler = function (err, data) {
if (err) {
console.log(err)
@@ -157,7 +173,13 @@
var curOsmGeom = data.features[i].geometry
if (curOsmGeom.type === 'Polygon' || curOsmGeom.type === 'MultiPolygon') {
console.log('combining border')
- var curGeom = geoJsonToGeom(curOsmGeom)
+ try {
+ var curGeom = geoJsonToGeom(curOsmGeom)
+ } catch (e) {
+ console.error('error converting overpass result to geojson')
+ fs.writeFileSync(boundaryId + '_fixed.json', JSON.stringify(data))
+ throw e
+ }
if (!combined) {
combined = curGeom
} else {
@@ -262,7 +284,14 @@
compareTzid = zones[j]
var compareZoneGeom = getDistZoneGeom(compareTzid)
- if (zoneGeom.intersects(compareZoneGeom)) {
+
+ var intersects = false
+ try {
+ intersects = debugGeo('intersects', zoneGeom, compareZoneGeom)
+ } catch (e) {
+ console.warn('warning, encountered intersection error with zone ' + tzid + ' and ' + compareTzid)
+ }
+ if (intersects) {
var intersectedGeom = debugGeo('intersection', zoneGeom, compareZoneGeom)
var intersectedArea = intersectedGeom.getArea()