103 lines
2.4 KiB
JavaScript
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,
|
|
}
|
|
}
|