Files
deighton-ar/mobile/src/util.js
2018-04-26 18:00:16 -07:00

103 lines
2.4 KiB
JavaScript

export const geoDistance = (lat1, lng1, lat2, lng2, unit) => {
var radlat1 = Math.PI * lat1 / 180
var radlat2 = Math.PI * lat2 / 180
var theta = lng1 - lng2
var radtheta = Math.PI * theta / 180
var dist =
Math.sin(radlat1) * Math.sin(radlat2) +
Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta)
dist = Math.acos(dist)
dist = dist * 180 / Math.PI
dist = dist * 60 * 1.1515
if (unit == "K") {
dist = dist * 1.609344
} else if (unit == "N") {
dist = dist * 0.8684
}
return dist
}
export const formatLatLng = (lat, lng) =>
`${Math.abs(lat).toFixed(4)}°${lat >= 0 ? "N" : "S"}, ${Math.abs(lng).toFixed(
4
)}°${lng >= 0 ? "E" : "W"}`
export const parseLatLng = (str) => {
const [lat, lng] = str.split(", ")
return {
type: "Point",
coordinates: [
parseFloat(
(lng[lng.length - 1] === "W" ? "-" : "") +
lng.substring(0, lng.length - 2)
),
parseFloat(
(lat[lat.length - 1] === "S" ? "-" : "") +
lat.substring(0, lat.length - 2)
),
],
}
}
export const workItemTypeEnum = [
{ value: "order", text: "Work Order" },
{ value: "inspection", text: "Inspection" },
{ value: "complaint", text: "Complaint" },
]
export const workItemTypeText = workItemTypeEnum.reduce((result, item) => {
result[item.value] = item.text
return result
}, {})
export const pad = (num, size) => {
var s = num + ""
while (s.length < size) s = "0" + s
return s
}
export const dotify = (s) => {
if (!s) {
return "..."
} else if (s.length < 30) {
return s
} else {
return s.substring(0, 26) + "..."
}
}
export const regionContainingPoints = (points, inset) => {
let minX, maxX, minY, maxY
if (!points || points.length === 0) {
return null
}
;((point) => {
minX = point.latitude
maxX = point.latitude
minY = point.longitude
maxY = point.longitude
})(points[0])
points.map((point) => {
minX = Math.min(minX, point.latitude)
maxX = Math.max(maxX, point.latitude)
minY = Math.min(minY, point.longitude)
maxY = Math.max(maxY, point.longitude)
})
const midX = (minX + maxX) / 2
const midY = (minY + maxY) / 2
const midPoint = [midX, midY]
const deltaX = maxX - minX + inset
const deltaY = maxY - minY + inset
return {
latitude: midX,
longitude: midY,
latitudeDelta: deltaX,
longitudeDelta: deltaY,
}
}