Fix multiple bugs after user testing
This commit is contained in:
parent
bcdbf6a2dd
commit
9bd37d9cde
20 changed files with 1529 additions and 77 deletions
41
Helpers.ts
41
Helpers.ts
|
@ -5,22 +5,17 @@ import {UIEventSource} from "./UI/UIEventSource";
|
||||||
export class Helpers {
|
export class Helpers {
|
||||||
|
|
||||||
|
|
||||||
static SetupAutoSave(changes: Changes, millisTillChangesAreSaved : UIEventSource<number>, saveAfterXMillis : number) {
|
static DoEvery(millis: number, f: (() => void)) {
|
||||||
|
window.setTimeout(
|
||||||
|
function () {
|
||||||
|
f();
|
||||||
|
Helpers.DoEvery(millis, f);
|
||||||
|
}
|
||||||
|
, millis)
|
||||||
|
}
|
||||||
|
|
||||||
// This little function triggers the actual upload:
|
|
||||||
// Either when more then three answers are selected, or when no new answer has been added for the last 20s
|
static SetupAutoSave(changes: Changes, millisTillChangesAreSaved: UIEventSource<number>, saveAfterXMillis: number) {
|
||||||
// @ts-ignore
|
|
||||||
window.decreaseTime = function () {
|
|
||||||
var time = millisTillChangesAreSaved.data;
|
|
||||||
if (time <= 0) {
|
|
||||||
if (changes.pendingChangesES.data > 0) {
|
|
||||||
changes.uploadAll(undefined);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
millisTillChangesAreSaved.setData(time - 1000);
|
|
||||||
}
|
|
||||||
window.setTimeout('decreaseTime()', 1000);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
changes.pendingChangesES.addCallback(function () {
|
changes.pendingChangesES.addCallback(function () {
|
||||||
|
@ -38,10 +33,20 @@ export class Helpers {
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// @ts-ignore
|
millisTillChangesAreSaved.addCallback((time) => {
|
||||||
window.decreaseTime(); // The timer keeps running...
|
if (time <= 0 && changes.pendingChangesES.data > 0) {
|
||||||
|
changes.uploadAll(undefined);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
Helpers.DoEvery(
|
||||||
|
1000,
|
||||||
|
() => {
|
||||||
|
millisTillChangesAreSaved
|
||||||
|
.setData(millisTillChangesAreSaved.data - 1000)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -50,7 +55,7 @@ export class Helpers {
|
||||||
* -> Asks the user not to close. The 'not to close' dialog should profide enough time to upload
|
* -> Asks the user not to close. The 'not to close' dialog should profide enough time to upload
|
||||||
* -> WHen uploading is done, the window is closed anyway
|
* -> WHen uploading is done, the window is closed anyway
|
||||||
*/
|
*/
|
||||||
static LastEffortSave(changes : Changes){
|
static LastEffortSave(changes: Changes) {
|
||||||
|
|
||||||
window.addEventListener("beforeunload", function (e) {
|
window.addEventListener("beforeunload", function (e) {
|
||||||
// Quickly save everyting!
|
// Quickly save everyting!
|
||||||
|
|
|
@ -29,8 +29,10 @@ export class LayerDefinition {
|
||||||
|
|
||||||
style: (tags: any) => any;
|
style: (tags: any) => any;
|
||||||
|
|
||||||
removeContainedElements: boolean = false;
|
/**
|
||||||
removeTouchingElements: boolean = false;
|
* If an object of the next layer is contained for this many percent in this feature, it is eaten and not shown
|
||||||
|
*/
|
||||||
|
maxAllowedOverlapPercentage: number = undefined;
|
||||||
|
|
||||||
|
|
||||||
asLayer(basemap: Basemap, allElements: ElementStorage, changes: Changes, userDetails: UIEventSource<UserDetails>, selectedElement: UIEventSource<any>):
|
asLayer(basemap: Basemap, allElements: ElementStorage, changes: Changes, userDetails: UIEventSource<UserDetails>, selectedElement: UIEventSource<any>):
|
||||||
|
@ -40,7 +42,7 @@ export class LayerDefinition {
|
||||||
this.name,
|
this.name,
|
||||||
basemap, allElements, changes,
|
basemap, allElements, changes,
|
||||||
this.overpassFilter,
|
this.overpassFilter,
|
||||||
this.removeContainedElements, this.removeTouchingElements,
|
this.maxAllowedOverlapPercentage,
|
||||||
this.style,
|
this.style,
|
||||||
selectedElement);
|
selectedElement);
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
import {LayerDefinition} from "../LayerDefinition";
|
import {LayerDefinition} from "../LayerDefinition";
|
||||||
import {Quests} from "../Quests";
|
import {TagMappingOptions} from "../UI/TagMapping";
|
||||||
import {FixedUiElement} from "../UI/FixedUiElement";
|
|
||||||
import {TagMapping, TagMappingOptions} from "../UI/TagMapping";
|
|
||||||
import L from "leaflet";
|
import L from "leaflet";
|
||||||
import {QuestionDefinition} from "../Logic/Question";
|
import {QuestionDefinition} from "../Logic/Question";
|
||||||
import {CommonTagMappings} from "./CommonTagMappings";
|
|
||||||
import {Tag} from "../Logic/TagsFilter";
|
import {Tag} from "../Logic/TagsFilter";
|
||||||
|
|
||||||
export class Bookcases extends LayerDefinition {
|
export class Bookcases extends LayerDefinition {
|
||||||
|
|
|
@ -24,7 +24,7 @@ export class Bos extends LayerDefinition {
|
||||||
new Tag("landuse", "forest"),
|
new Tag("landuse", "forest"),
|
||||||
new Tag("fixme", "Toegevoegd met MapComplete, geometry nog uit te tekenen")
|
new Tag("fixme", "Toegevoegd met MapComplete, geometry nog uit te tekenen")
|
||||||
];
|
];
|
||||||
this.removeContainedElements = true;
|
this.maxAllowedOverlapPercentage = 10;
|
||||||
|
|
||||||
this.minzoom = 14;
|
this.minzoom = 14;
|
||||||
this.questions = [Quests.nameOf(this.name), Quests.accessNatureReserve, Quests.operator];
|
this.questions = [Quests.nameOf(this.name), Quests.accessNatureReserve, Quests.operator];
|
||||||
|
|
|
@ -13,7 +13,7 @@ export class NatureReserves extends LayerDefinition {
|
||||||
this.icon = "./assets/tree_white_background.svg";
|
this.icon = "./assets/tree_white_background.svg";
|
||||||
this.overpassFilter =
|
this.overpassFilter =
|
||||||
new Or([new Tag("leisure", "nature_reserve"), new Tag("boundary","protected_area")]);
|
new Or([new Tag("leisure", "nature_reserve"), new Tag("boundary","protected_area")]);
|
||||||
this.removeTouchingElements = true;
|
this.maxAllowedOverlapPercentage = 10;
|
||||||
|
|
||||||
this.newElementTags = [new Tag("leisure", "nature_reserve"),
|
this.newElementTags = [new Tag("leisure", "nature_reserve"),
|
||||||
new Tag("fixme", "Toegevoegd met MapComplete, geometry nog uit te tekenen")]
|
new Tag("fixme", "Toegevoegd met MapComplete, geometry nog uit te tekenen")]
|
||||||
|
|
|
@ -15,7 +15,7 @@ export class Park extends LayerDefinition {
|
||||||
new Or([new Tag("leisure","park"), new Tag("landuse","village_green")]);
|
new Or([new Tag("leisure","park"), new Tag("landuse","village_green")]);
|
||||||
this.newElementTags = [new Tag("leisure", "park"),
|
this.newElementTags = [new Tag("leisure", "park"),
|
||||||
new Tag("fixme", "Toegevoegd met MapComplete, geometry nog uit te tekenen")];
|
new Tag("fixme", "Toegevoegd met MapComplete, geometry nog uit te tekenen")];
|
||||||
this.removeTouchingElements = true;
|
this.maxAllowedOverlapPercentage = 25;
|
||||||
|
|
||||||
this.minzoom = 13;
|
this.minzoom = 13;
|
||||||
this.questions = [Quests.nameOf("park")];
|
this.questions = [Quests.nameOf("park")];
|
||||||
|
|
|
@ -13,7 +13,7 @@ export class Playground extends LayerDefinition {
|
||||||
this.icon = "./assets/tree_white_background.svg";
|
this.icon = "./assets/tree_white_background.svg";
|
||||||
this.overpassFilter = new Tag("leisure","playground");
|
this.overpassFilter = new Tag("leisure","playground");
|
||||||
this.newElementTags = [new Tag("leisure", "playground"), new Tag( "fixme", "Toegevoegd met MapComplete, geometry nog uit te tekenen")]
|
this.newElementTags = [new Tag("leisure", "playground"), new Tag( "fixme", "Toegevoegd met MapComplete, geometry nog uit te tekenen")]
|
||||||
this.removeContainedElements = true;
|
this.maxAllowedOverlapPercentage = 0;
|
||||||
|
|
||||||
this.minzoom = 13;
|
this.minzoom = 13;
|
||||||
this.questions = [Quests.nameOf(this.name)];
|
this.questions = [Quests.nameOf(this.name)];
|
||||||
|
|
|
@ -3,7 +3,6 @@ import {Quests} from "../Quests";
|
||||||
import {FixedUiElement} from "../UI/FixedUiElement";
|
import {FixedUiElement} from "../UI/FixedUiElement";
|
||||||
import {TagMappingOptions} from "../UI/TagMapping";
|
import {TagMappingOptions} from "../UI/TagMapping";
|
||||||
import L from "leaflet";
|
import L from "leaflet";
|
||||||
import {CommonTagMappings} from "./CommonTagMappings";
|
|
||||||
import {Tag} from "../Logic/TagsFilter";
|
import {Tag} from "../Logic/TagsFilter";
|
||||||
|
|
||||||
export class Toilets extends LayerDefinition{
|
export class Toilets extends LayerDefinition{
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import {Basemap} from "./Basemap";
|
import {Basemap} from "./Basemap";
|
||||||
import {TagsFilter, TagUtils} from "./TagsFilter";
|
import {TagsFilter, TagUtils} from "./TagsFilter";
|
||||||
import {UIEventSource} from "../UI/UIEventSource";
|
import {UIEventSource} from "../UI/UIEventSource";
|
||||||
import {UIElement} from "../UI/UIElement";
|
|
||||||
import {ElementStorage} from "./ElementStorage";
|
import {ElementStorage} from "./ElementStorage";
|
||||||
import {Changes} from "./Changes";
|
import {Changes} from "./Changes";
|
||||||
import L from "leaflet"
|
import L from "leaflet"
|
||||||
|
@ -22,8 +21,7 @@ export class FilteredLayer {
|
||||||
public readonly filters: TagsFilter;
|
public readonly filters: TagsFilter;
|
||||||
|
|
||||||
private readonly _map: Basemap;
|
private readonly _map: Basemap;
|
||||||
private readonly _removeContainedElements;
|
private readonly _maxAllowedOverlap: number;
|
||||||
private readonly _removeTouchingElements;
|
|
||||||
|
|
||||||
private readonly _style: (properties) => any;
|
private readonly _style: (properties) => any;
|
||||||
|
|
||||||
|
@ -46,8 +44,7 @@ export class FilteredLayer {
|
||||||
map: Basemap, storage: ElementStorage,
|
map: Basemap, storage: ElementStorage,
|
||||||
changes: Changes,
|
changes: Changes,
|
||||||
filters: TagsFilter,
|
filters: TagsFilter,
|
||||||
removeContainedElements: boolean,
|
maxAllowedOverlap: number,
|
||||||
removeTouchingElements: boolean,
|
|
||||||
style: ((properties) => any),
|
style: ((properties) => any),
|
||||||
selectedElement: UIEventSource<any>) {
|
selectedElement: UIEventSource<any>) {
|
||||||
this._selectedElement = selectedElement;
|
this._selectedElement = selectedElement;
|
||||||
|
@ -62,8 +59,7 @@ export class FilteredLayer {
|
||||||
this.filters = filters;
|
this.filters = filters;
|
||||||
this._style = style;
|
this._style = style;
|
||||||
this._storage = storage;
|
this._storage = storage;
|
||||||
this._removeContainedElements = removeContainedElements;
|
this._maxAllowedOverlap = maxAllowedOverlap;
|
||||||
this._removeTouchingElements = removeTouchingElements;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,8 +88,8 @@ export class FilteredLayer {
|
||||||
|
|
||||||
const notShadowed = [];
|
const notShadowed = [];
|
||||||
for (const feature of leftoverFeatures) {
|
for (const feature of leftoverFeatures) {
|
||||||
if (this._removeContainedElements || this._removeTouchingElements) {
|
if (this._maxAllowedOverlap !== undefined && this._maxAllowedOverlap >= 0) {
|
||||||
if (GeoOperations.featureIsContainedInAny(feature, selfFeatures, this._removeTouchingElements)) {
|
if (GeoOperations.featureIsContainedInAny(feature, selfFeatures, this._maxAllowedOverlap)) {
|
||||||
// This feature is filtered away
|
// This feature is filtered away
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ import {Basemap} from "./Basemap";
|
||||||
import {UIEventSource} from "../UI/UIEventSource";
|
import {UIEventSource} from "../UI/UIEventSource";
|
||||||
import {UIElement} from "../UI/UIElement";
|
import {UIElement} from "../UI/UIElement";
|
||||||
import L from "leaflet";
|
import L from "leaflet";
|
||||||
|
import {Helpers} from "../Helpers";
|
||||||
|
|
||||||
export class GeoLocationHandler extends UIElement {
|
export class GeoLocationHandler extends UIElement {
|
||||||
|
|
||||||
|
@ -11,7 +12,7 @@ export class GeoLocationHandler extends UIElement {
|
||||||
}> = new UIEventSource<{ latlng: number, accuracy: number }>(undefined);
|
}> = new UIEventSource<{ latlng: number, accuracy: number }>(undefined);
|
||||||
|
|
||||||
private _isActive: UIEventSource<boolean> = new UIEventSource<boolean>(false);
|
private _isActive: UIEventSource<boolean> = new UIEventSource<boolean>(false);
|
||||||
|
private _permission: UIEventSource<string> = new UIEventSource<string>("");
|
||||||
private _map: Basemap;
|
private _map: Basemap;
|
||||||
private _marker: any;
|
private _marker: any;
|
||||||
|
|
||||||
|
@ -20,6 +21,7 @@ export class GeoLocationHandler extends UIElement {
|
||||||
this._map = map;
|
this._map = map;
|
||||||
this.ListenTo(this.currentLocation);
|
this.ListenTo(this.currentLocation);
|
||||||
this.ListenTo(this._isActive);
|
this.ListenTo(this._isActive);
|
||||||
|
this.ListenTo(this._permission);
|
||||||
|
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
|
@ -27,6 +29,7 @@ export class GeoLocationHandler extends UIElement {
|
||||||
function onAccuratePositionProgress(e) {
|
function onAccuratePositionProgress(e) {
|
||||||
console.log(e.accuracy);
|
console.log(e.accuracy);
|
||||||
console.log(e.latlng);
|
console.log(e.latlng);
|
||||||
|
self.currentLocation.setData({latlng: e.latlng, accuracy: e.accuracy});
|
||||||
}
|
}
|
||||||
|
|
||||||
function onAccuratePositionFound(e) {
|
function onAccuratePositionFound(e) {
|
||||||
|
@ -62,8 +65,19 @@ export class GeoLocationHandler extends UIElement {
|
||||||
self._marker = newMarker;
|
self._marker = newMarker;
|
||||||
});
|
});
|
||||||
|
|
||||||
navigator.permissions.query({ name: 'geolocation' })
|
navigator.permissions.query({name: 'geolocation'})
|
||||||
.then(function(){self.StartGeolocating()});
|
.then(function (status) {
|
||||||
|
console.log("Geolocation is already", status)
|
||||||
|
if (status.state === "granted") {
|
||||||
|
self.StartGeolocating();
|
||||||
|
}
|
||||||
|
self._permission.setData(status.state);
|
||||||
|
status.onchange = function () {
|
||||||
|
self._permission.setData(status.state);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.HideOnEmpty(true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,20 +93,33 @@ export class GeoLocationHandler extends UIElement {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private StartGeolocating(){
|
private StartGeolocating() {
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
|
if (self._permission.data === "denied") {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
if (self.currentLocation.data !== undefined) {
|
if (self.currentLocation.data !== undefined) {
|
||||||
self._map.map.flyTo(self.currentLocation.data.latlng, 18);
|
self._map.map.flyTo(self.currentLocation.data.latlng, 18);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self._isActive.setData(true);
|
|
||||||
|
|
||||||
console.log("Searching location using GPS")
|
console.log("Searching location using GPS")
|
||||||
self._map.map.findAccuratePosition({
|
self._map.map.findAccuratePosition({
|
||||||
maxWait: 15000, // defaults to 10000
|
maxWait: 10000, // defaults to 10000
|
||||||
desiredAccuracy: 30 // defaults to 20
|
desiredAccuracy: 50 // defaults to 20
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
if (!self._isActive.data) {
|
||||||
|
self._isActive.setData(true);
|
||||||
|
Helpers.DoEvery(60000, () => {
|
||||||
|
self._map.map.findAccuratePosition({
|
||||||
|
maxWait: 10000, // defaults to 10000
|
||||||
|
desiredAccuracy: 50 // defaults to 20
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
InnerUpdate(htmlElement: HTMLElement) {
|
InnerUpdate(htmlElement: HTMLElement) {
|
||||||
|
|
|
@ -1,8 +1,15 @@
|
||||||
|
import * as turf from 'turf'
|
||||||
|
|
||||||
export class GeoOperations {
|
export class GeoOperations {
|
||||||
|
|
||||||
|
static surfaceAreaInSqMeters(feature: any) {
|
||||||
|
return turf.area(feature);
|
||||||
|
}
|
||||||
|
|
||||||
static featureIsContainedInAny(feature: any, shouldNotContain: any[], noTouching: boolean = false): boolean {
|
static featureIsContainedInAny(feature: any,
|
||||||
|
shouldNotContain: any[],
|
||||||
|
maxOverlapPercentage: number): boolean {
|
||||||
|
// Returns 'false' if no problematic intersection is found
|
||||||
if (feature.geometry.type === "Point") {
|
if (feature.geometry.type === "Point") {
|
||||||
const coor = feature.geometry.coordinates;
|
const coor = feature.geometry.coordinates;
|
||||||
for (const shouldNotContainElement of shouldNotContain) {
|
for (const shouldNotContainElement of shouldNotContain) {
|
||||||
|
@ -21,38 +28,55 @@ export class GeoOperations {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (feature.geometry.type === "Polygon") {
|
if (feature.geometry.type === "Polygon" || feature.geometry.type === "MultiPolygon") {
|
||||||
|
|
||||||
const poly = feature;
|
const poly = feature;
|
||||||
|
let featureBBox = BBox.get(feature);
|
||||||
|
const featureSurface = GeoOperations.surfaceAreaInSqMeters(poly);
|
||||||
for (const shouldNotContainElement of shouldNotContain) {
|
for (const shouldNotContainElement of shouldNotContain) {
|
||||||
|
|
||||||
let shouldNotContainBBox = BBox.get(shouldNotContainElement);
|
const shouldNotContainBBox = BBox.get(shouldNotContainElement);
|
||||||
let featureBBox = BBox.get(feature);
|
const overlaps = featureBBox.overlapsWith(shouldNotContainBBox)
|
||||||
if (!featureBBox.overlapsWith(shouldNotContainBBox)) {
|
if (!overlaps) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (noTouching) {
|
// Calculate the surface area of the intersection
|
||||||
if (GeoOperations.isPolygonTouching(poly, shouldNotContainElement)) {
|
// If it is too big, refuse
|
||||||
|
try {
|
||||||
|
|
||||||
|
const intersection = turf.intersect(poly, shouldNotContainElement);
|
||||||
|
if (intersection == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const intersectionSize = turf.area(intersection);
|
||||||
|
const ratio = intersectionSize / featureSurface;
|
||||||
|
console.log("Intersection ratio", ratio, "intersection:", intersectionSize, "featuresize:", featureSurface, "targetRatio", maxOverlapPercentage / 100);
|
||||||
|
|
||||||
|
if (ratio * 100 >= maxOverlapPercentage) {
|
||||||
|
console.log("Refused", poly.id, " due to ", shouldNotContainElement.id, "intersection ratio is ", ratio, "which is bigger then the target ratio of ", (maxOverlapPercentage / 100))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else {
|
} catch (exception) {
|
||||||
if (GeoOperations.isPolygonInside(poly, shouldNotContainElement)) {
|
console.log("EXCEPTION CAUGHT WHILE INTERSECTING: ", exception);
|
||||||
|
// We assume that this failed due to an intersection
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
return false; // No problematic intersections found
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simple check: that every point of the polygon is inside the container
|
* Simple check: that every point of the polygon is inside the container
|
||||||
* @param polygon
|
* @param polygon
|
||||||
* @param container
|
* @param container
|
||||||
*/
|
*/
|
||||||
static isPolygonInside(polygon, container) {
|
private static isPolygonInside(polygon, container) {
|
||||||
for (const coor of polygon.geometry.coordinates[0]) {
|
for (const coor of polygon.geometry.coordinates[0]) {
|
||||||
if (!GeoOperations.inside(coor, container)) {
|
if (!GeoOperations.inside(coor, container)) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -66,7 +90,7 @@ export class GeoOperations {
|
||||||
* @param polygon
|
* @param polygon
|
||||||
* @param container
|
* @param container
|
||||||
*/
|
*/
|
||||||
static isPolygonTouching(polygon, container) {
|
private static isPolygonTouching(polygon, container) {
|
||||||
for (const coor of polygon.geometry.coordinates[0]) {
|
for (const coor of polygon.geometry.coordinates[0]) {
|
||||||
if (GeoOperations.inside(coor, container)) {
|
if (GeoOperations.inside(coor, container)) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -76,7 +100,7 @@ export class GeoOperations {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inside(pointCoordinate, feature): boolean {
|
private static inside(pointCoordinate, feature): boolean {
|
||||||
// ray-casting algorithm based on
|
// ray-casting algorithm based on
|
||||||
// http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
|
// http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
|
||||||
|
|
||||||
|
@ -134,10 +158,19 @@ class BBox {
|
||||||
this.minLon = Math.min(this.minLon, coordinate[0]);
|
this.minLon = Math.min(this.minLon, coordinate[0]);
|
||||||
this.minLat = Math.min(this.minLat, coordinate[1]);
|
this.minLat = Math.min(this.minLat, coordinate[1]);
|
||||||
}
|
}
|
||||||
|
this.check();
|
||||||
|
}
|
||||||
|
|
||||||
|
private check() {
|
||||||
|
if (isNaN(this.maxLon) || isNaN(this.maxLat) || isNaN(this.minLon) || isNaN(this.minLat)) {
|
||||||
|
console.log(this);
|
||||||
|
throw "BBOX has NAN";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public overlapsWith(other: BBox) {
|
public overlapsWith(other: BBox) {
|
||||||
|
this.check();
|
||||||
|
other.check();
|
||||||
if (this.maxLon < other.minLon) {
|
if (this.maxLon < other.minLon) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -155,13 +188,22 @@ class BBox {
|
||||||
|
|
||||||
static get(feature) {
|
static get(feature) {
|
||||||
if (feature.bbox === undefined) {
|
if (feature.bbox === undefined) {
|
||||||
if (feature.geometry.type === "Polygon") {
|
|
||||||
|
if (feature.geometry.type === "MultiPolygon") {
|
||||||
|
let coordinates = [];
|
||||||
|
for (const coorlist of feature.geometry.coordinates) {
|
||||||
|
coordinates = coordinates.concat(coorlist[0]);
|
||||||
|
}
|
||||||
|
feature.bbox = new BBox(coordinates);
|
||||||
|
} else if (feature.geometry.type === "Polygon") {
|
||||||
feature.bbox = new BBox(feature.geometry.coordinates[0]);
|
feature.bbox = new BBox(feature.geometry.coordinates[0]);
|
||||||
} else if (feature.geometry.type === "LineString") {
|
} else if (feature.geometry.type === "LineString") {
|
||||||
feature.bbox = new BBox(feature.geometry.coordinates);
|
feature.bbox = new BBox(feature.geometry.coordinates);
|
||||||
} else {
|
} else if (feature.geometry.type === "Point") {
|
||||||
// Point
|
// Point
|
||||||
feature.bbox = new BBox([feature.geometry.coordinates]);
|
feature.bbox = new BBox([feature.geometry.coordinates]);
|
||||||
|
} else {
|
||||||
|
throw "Cannot calculate bbox, unknown type " + feature.geometry.type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,14 @@ export class OsmConnection {
|
||||||
console.log(userInfo);
|
console.log(userInfo);
|
||||||
data.name = userInfo.getAttribute('display_name');
|
data.name = userInfo.getAttribute('display_name');
|
||||||
data.csCount = userInfo.getElementsByTagName("changesets")[0].getAttribute("count");
|
data.csCount = userInfo.getElementsByTagName("changesets")[0].getAttribute("count");
|
||||||
data.img = userInfo.getElementsByTagName("img")[0].getAttribute("href");
|
|
||||||
|
data.img = undefined;
|
||||||
|
const imgEl = userInfo.getElementsByTagName("img");
|
||||||
|
if (imgEl !== undefined && imgEl[0] !== undefined) {
|
||||||
|
data.img = imgEl[0].getAttribute("href");
|
||||||
|
}
|
||||||
|
data.img = data.img ?? "./assets/osm-logo.svg";
|
||||||
|
|
||||||
const messages = userInfo.getElementsByTagName("messages")[0].getElementsByTagName("received")[0];
|
const messages = userInfo.getElementsByTagName("messages")[0].getElementsByTagName("received")[0];
|
||||||
data.unreadMessages = parseInt(messages.getAttribute("unread"));
|
data.unreadMessages = parseInt(messages.getAttribute("unread"));
|
||||||
data.totalMessages = parseInt(messages.getAttribute("count"));
|
data.totalMessages = parseInt(messages.getAttribute("count"));
|
||||||
|
|
|
@ -59,7 +59,13 @@ Images are uplaoded to imgur, as their API was way easier to handle. The URL is
|
||||||
The idea is that one in a while, the images are transfered to wikipedia
|
The idea is that one in a while, the images are transfered to wikipedia
|
||||||
|
|
||||||
|
|
||||||
|
# Privacy
|
||||||
|
|
||||||
|
Privacy is important, we try to leak as little information as possible.
|
||||||
|
All major personal information is handled by OSM.
|
||||||
|
Geolocation is available on mobile only throught hte device's GPS location (so no geolocation is sent of to google)
|
||||||
|
|
||||||
|
TODO: erase cookies of third party websites and API's
|
||||||
|
|
||||||
# Attributions:
|
# Attributions:
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,8 @@ export class FeatureInfoBox extends UIElement {
|
||||||
let questions = "";
|
let questions = "";
|
||||||
|
|
||||||
if (this._userDetails.data.loggedIn) {
|
if (this._userDetails.data.loggedIn) {
|
||||||
questions = this._questions.HideOnEmpty(true).Render();
|
// Questions is embedded in a span, because it'll hide the parent when the questions dissappear
|
||||||
|
questions = "<span>"+this._questions.HideOnEmpty(true).Render()+"</span>";
|
||||||
}
|
}
|
||||||
|
|
||||||
return "<div class='featureinfobox'>" +
|
return "<div class='featureinfobox'>" +
|
||||||
|
|
758
assets/osm-logo.svg
Normal file
758
assets/osm-logo.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 150 KiB |
13
index.css
13
index.css
|
@ -24,10 +24,11 @@ img {
|
||||||
z-index: 999; /*Just below leaflets zoom*/
|
z-index: 999; /*Just below leaflets zoom*/
|
||||||
background-color: white;
|
background-color: white;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
border: solid 2px rgba(0,0,0,0.2);
|
border: solid 2px rgba(0, 0, 0, 0.2);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
width: 43px;
|
width: 43px;
|
||||||
height:43px;
|
height: 43px;
|
||||||
|
display: none; /*Hidden by default, only visible on mobile*/
|
||||||
}
|
}
|
||||||
|
|
||||||
#geolocate-button img{
|
#geolocate-button img{
|
||||||
|
@ -189,10 +190,12 @@ img {
|
||||||
#messagesbox {
|
#messagesbox {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
#geolocate-button {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@media only screen and (max-width: 600px) {
|
|
||||||
#messagesboxmobilewrapper {
|
#messagesboxmobilewrapper {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
@ -349,7 +352,7 @@ img {
|
||||||
|
|
||||||
.next-button {
|
.next-button {
|
||||||
background-color: black;
|
background-color: black;
|
||||||
opacity: 30%;
|
opacity: 0.3;
|
||||||
width: 3.0em;
|
width: 3.0em;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
padding-left: 0.5em;
|
padding-left: 0.5em;
|
||||||
|
|
2
index.ts
2
index.ts
|
@ -27,7 +27,7 @@ if (location.hostname === "localhost" || location.hostname === "127.0.0.1") {
|
||||||
dryRun = true;
|
dryRun = true;
|
||||||
// If you have a testfile somewhere, enable this to spoof overpass
|
// If you have a testfile somewhere, enable this to spoof overpass
|
||||||
// This should be hosted independantly, e.g. with `cd assets; webfsd -p 8080` + a CORS plugin to disable cors rules
|
// This should be hosted independantly, e.g. with `cd assets; webfsd -p 8080` + a CORS plugin to disable cors rules
|
||||||
// Overpass.testUrl = "http://127.0.0.1:8080/test.json";
|
Overpass.testUrl = "http://127.0.0.1:8080/test.json";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
607
package-lock.json
generated
607
package-lock.json
generated
|
@ -1039,6 +1039,14 @@
|
||||||
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
|
||||||
"integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA=="
|
"integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA=="
|
||||||
},
|
},
|
||||||
|
"affine-hull": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/affine-hull/-/affine-hull-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-dj/x040GPOt+Jy8X7k17vK+QXF0=",
|
||||||
|
"requires": {
|
||||||
|
"robust-orientation": "^1.1.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"ajv": {
|
"ajv": {
|
||||||
"version": "6.12.2",
|
"version": "6.12.2",
|
||||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
|
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
|
||||||
|
@ -1355,6 +1363,11 @@
|
||||||
"file-uri-to-path": "1.0.0"
|
"file-uri-to-path": "1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"bit-twiddle": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/bit-twiddle/-/bit-twiddle-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-DGwfq+KyPRcXPZpht7cJPrnhdp4="
|
||||||
|
},
|
||||||
"bn.js": {
|
"bn.js": {
|
||||||
"version": "5.1.2",
|
"version": "5.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz",
|
||||||
|
@ -1847,6 +1860,16 @@
|
||||||
"safe-buffer": "~5.1.1"
|
"safe-buffer": "~5.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"convex-hull": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/convex-hull/-/convex-hull-1.0.3.tgz",
|
||||||
|
"integrity": "sha1-IKOqbOh/St6i/30XlxyfwcZ+H/8=",
|
||||||
|
"requires": {
|
||||||
|
"affine-hull": "^1.0.0",
|
||||||
|
"incremental-convex-hull": "^1.0.1",
|
||||||
|
"monotone-convex-hull-2d": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"copy-descriptor": {
|
"copy-descriptor": {
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
|
||||||
|
@ -2440,6 +2463,11 @@
|
||||||
"readable-stream": "^2.0.2"
|
"readable-stream": "^2.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"earcut": {
|
||||||
|
"version": "2.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.2.tgz",
|
||||||
|
"integrity": "sha512-eZoZPPJcUHnfRZ0PjLvx2qBordSiO8ofC3vt+qACLM95u+4DovnbYNpQtJh0DNsWj8RnxrQytD4WA8gj5cRIaQ=="
|
||||||
|
},
|
||||||
"ecc-jsbn": {
|
"ecc-jsbn": {
|
||||||
"version": "0.1.2",
|
"version": "0.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
||||||
|
@ -2890,6 +2918,19 @@
|
||||||
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
|
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
|
||||||
"integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg=="
|
"integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg=="
|
||||||
},
|
},
|
||||||
|
"geojson-area": {
|
||||||
|
"version": "0.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/geojson-area/-/geojson-area-0.2.1.tgz",
|
||||||
|
"integrity": "sha1-JTewmC24YwnyHSxCikJXx6YoLMY=",
|
||||||
|
"requires": {
|
||||||
|
"wgs84": "0.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"geojson-normalize": {
|
||||||
|
"version": "0.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/geojson-normalize/-/geojson-normalize-0.0.0.tgz",
|
||||||
|
"integrity": "sha1-Lbw2eM0bMbgXnodr2nDNEg3eNcA="
|
||||||
|
},
|
||||||
"geojson-numeric": {
|
"geojson-numeric": {
|
||||||
"version": "0.2.1",
|
"version": "0.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/geojson-numeric/-/geojson-numeric-0.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/geojson-numeric/-/geojson-numeric-0.2.1.tgz",
|
||||||
|
@ -2922,6 +2963,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"geojson-random": {
|
||||||
|
"version": "0.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/geojson-random/-/geojson-random-0.2.2.tgz",
|
||||||
|
"integrity": "sha1-q0g48SatxeFvj5TmVd74IPkRnbw="
|
||||||
|
},
|
||||||
"get-caller-file": {
|
"get-caller-file": {
|
||||||
"version": "2.0.5",
|
"version": "2.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
||||||
|
@ -3271,6 +3317,15 @@
|
||||||
"resolve-from": "^3.0.0"
|
"resolve-from": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"incremental-convex-hull": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/incremental-convex-hull/-/incremental-convex-hull-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-UUKMFMudmmFEv+abKFH7N3M0vh4=",
|
||||||
|
"requires": {
|
||||||
|
"robust-orientation": "^1.1.2",
|
||||||
|
"simplicial-complex": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"indexes-of": {
|
"indexes-of": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
|
||||||
|
@ -3678,6 +3733,11 @@
|
||||||
"verror": "1.10.0"
|
"verror": "1.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"jsts": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/jsts/-/jsts-1.1.2.tgz",
|
||||||
|
"integrity": "sha1-0gXSzIOTCB2eSErjYoIRBpXtwjA="
|
||||||
|
},
|
||||||
"kind-of": {
|
"kind-of": {
|
||||||
"version": "6.0.3",
|
"version": "6.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
|
||||||
|
@ -3925,6 +3985,14 @@
|
||||||
"minimist": "^1.2.5"
|
"minimist": "^1.2.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"monotone-convex-hull-2d": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/monotone-convex-hull-2d/-/monotone-convex-hull-2d-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-R/Xa6t88Sv03dkuqGqh4ekDu4Iw=",
|
||||||
|
"requires": {
|
||||||
|
"robust-orientation": "^1.1.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"ms": {
|
"ms": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
|
@ -5355,6 +5423,36 @@
|
||||||
"inherits": "^2.0.1"
|
"inherits": "^2.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"robust-orientation": {
|
||||||
|
"version": "1.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/robust-orientation/-/robust-orientation-1.1.3.tgz",
|
||||||
|
"integrity": "sha1-2v9bANO+TmByLw6cAVbvln8cIEk=",
|
||||||
|
"requires": {
|
||||||
|
"robust-scale": "^1.0.2",
|
||||||
|
"robust-subtract": "^1.0.0",
|
||||||
|
"robust-sum": "^1.0.0",
|
||||||
|
"two-product": "^1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"robust-scale": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/robust-scale/-/robust-scale-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-d1Ey7QlULQKOWLLMecBikLz3jDI=",
|
||||||
|
"requires": {
|
||||||
|
"two-product": "^1.0.2",
|
||||||
|
"two-sum": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"robust-subtract": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/robust-subtract/-/robust-subtract-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-4LFk4e2LpOOl3aRaEgODSNvtPpo="
|
||||||
|
},
|
||||||
|
"robust-sum": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/robust-sum/-/robust-sum-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-FmRuUlKStNJdgnV6KGlV4Lv6U9k="
|
||||||
|
},
|
||||||
"safe-buffer": {
|
"safe-buffer": {
|
||||||
"version": "5.1.2",
|
"version": "5.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||||
|
@ -5549,6 +5647,20 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"simplicial-complex": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/simplicial-complex/-/simplicial-complex-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-bDOk7Wn81Nkbe8rdOzC2NoPq4kE=",
|
||||||
|
"requires": {
|
||||||
|
"bit-twiddle": "^1.0.0",
|
||||||
|
"union-find": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"simplify-js": {
|
||||||
|
"version": "1.2.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/simplify-js/-/simplify-js-1.2.4.tgz",
|
||||||
|
"integrity": "sha512-vITfSlwt7h/oyrU42R83mtzFpwYk3+mkH9bOHqq/Qw6n8rtR7aE3NZQ5fbcyCUVVmuMJR6ynsAhOfK2qoah8Jg=="
|
||||||
|
},
|
||||||
"snapdragon": {
|
"snapdragon": {
|
||||||
"version": "0.8.2",
|
"version": "0.8.2",
|
||||||
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
|
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
|
||||||
|
@ -6108,11 +6220,501 @@
|
||||||
"safe-buffer": "^5.0.1"
|
"safe-buffer": "^5.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"turf": {
|
||||||
|
"version": "3.0.14",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf/-/turf-3.0.14.tgz",
|
||||||
|
"integrity": "sha1-6y9KgKLVg7jGSGvHtccZBGaGbCc=",
|
||||||
|
"requires": {
|
||||||
|
"turf-along": "^3.0.12",
|
||||||
|
"turf-area": "^3.0.12",
|
||||||
|
"turf-bbox": "^3.0.12",
|
||||||
|
"turf-bbox-polygon": "^3.0.12",
|
||||||
|
"turf-bearing": "^3.0.12",
|
||||||
|
"turf-bezier": "^3.0.12",
|
||||||
|
"turf-buffer": "^3.0.12",
|
||||||
|
"turf-center": "^3.0.12",
|
||||||
|
"turf-centroid": "^3.0.12",
|
||||||
|
"turf-circle": "^3.0.12",
|
||||||
|
"turf-collect": "^3.0.12",
|
||||||
|
"turf-combine": "^3.0.12",
|
||||||
|
"turf-concave": "^3.0.12",
|
||||||
|
"turf-convex": "^3.0.12",
|
||||||
|
"turf-destination": "^3.0.12",
|
||||||
|
"turf-difference": "^3.0.12",
|
||||||
|
"turf-distance": "^3.0.12",
|
||||||
|
"turf-envelope": "^3.0.12",
|
||||||
|
"turf-explode": "^3.0.12",
|
||||||
|
"turf-flip": "^3.0.12",
|
||||||
|
"turf-helpers": "^3.0.12",
|
||||||
|
"turf-hex-grid": "^3.0.12",
|
||||||
|
"turf-inside": "^3.0.12",
|
||||||
|
"turf-intersect": "^3.0.12",
|
||||||
|
"turf-isolines": "^3.0.12",
|
||||||
|
"turf-kinks": "^3.0.12",
|
||||||
|
"turf-line-distance": "^3.0.12",
|
||||||
|
"turf-line-slice": "^3.0.12",
|
||||||
|
"turf-meta": "^3.0.12",
|
||||||
|
"turf-midpoint": "^3.0.12",
|
||||||
|
"turf-nearest": "^3.0.12",
|
||||||
|
"turf-planepoint": "^3.0.12",
|
||||||
|
"turf-point-grid": "^3.0.12",
|
||||||
|
"turf-point-on-line": "^3.0.12",
|
||||||
|
"turf-point-on-surface": "^3.0.12",
|
||||||
|
"turf-random": "^3.0.12",
|
||||||
|
"turf-sample": "^3.0.12",
|
||||||
|
"turf-simplify": "^3.0.12",
|
||||||
|
"turf-square": "^3.0.12",
|
||||||
|
"turf-square-grid": "^3.0.12",
|
||||||
|
"turf-tag": "^3.0.12",
|
||||||
|
"turf-tesselate": "^3.0.12",
|
||||||
|
"turf-tin": "^3.0.12",
|
||||||
|
"turf-triangle-grid": "^3.0.12",
|
||||||
|
"turf-union": "^3.0.12",
|
||||||
|
"turf-within": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-along": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-along/-/turf-along-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-5iK956S9E4wJZH1LFKoOpwBIXeY=",
|
||||||
|
"requires": {
|
||||||
|
"turf-bearing": "^3.0.12",
|
||||||
|
"turf-destination": "^3.0.12",
|
||||||
|
"turf-distance": "^3.0.12",
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-area": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-area/-/turf-area-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-m35Gnvn7VY/RR7sMIUgjJjvb8Tw=",
|
||||||
|
"requires": {
|
||||||
|
"geojson-area": "^0.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-bbox": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-bbox/-/turf-bbox-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-P6BhF8hEOGDsgKxg/V0vEyC/sb4=",
|
||||||
|
"requires": {
|
||||||
|
"turf-meta": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-bbox-polygon": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-bbox-polygon/-/turf-bbox-polygon-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-Mw3AuzgyLWFUXflmzmyA9oWs9PI=",
|
||||||
|
"requires": {
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-bearing": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-bearing/-/turf-bearing-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-ZfYJ3YUOc2THdxqm3th7DhkX/SA=",
|
||||||
|
"requires": {
|
||||||
|
"turf-invariant": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-bezier": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-bezier/-/turf-bezier-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-EC791KY7Jl7pyMFydjGSCzb03QI=",
|
||||||
|
"requires": {
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-buffer": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-buffer/-/turf-buffer-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-IIQP58aqZ7JL4cq3/8xagv1r2XE=",
|
||||||
|
"requires": {
|
||||||
|
"geojson-normalize": "0.0.0",
|
||||||
|
"jsts": "1.1.2",
|
||||||
|
"turf-combine": "^3.0.12",
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-center": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-center/-/turf-center-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-Rd1sFym7hnKR4+AC6cdQb4xEAZY=",
|
||||||
|
"requires": {
|
||||||
|
"turf-bbox": "^3.0.12",
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-centroid": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-centroid/-/turf-centroid-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-6u4NaYIEtX/DOZS7G8hnuNopP48=",
|
||||||
|
"requires": {
|
||||||
|
"turf-helpers": "^3.0.12",
|
||||||
|
"turf-meta": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-circle": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-circle/-/turf-circle-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-FAshy0lQ8tPLxw0t8BKTaGf1iTA=",
|
||||||
|
"requires": {
|
||||||
|
"turf-destination": "^3.0.12",
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-collect": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-collect/-/turf-collect-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-bphtGnB9oxnMg+cjjQvN8Zqjx/I=",
|
||||||
|
"requires": {
|
||||||
|
"turf-inside": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-combine": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-combine/-/turf-combine-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-FnB0bw/c4NHqiqain/5UONRGz3M=",
|
||||||
|
"requires": {
|
||||||
|
"turf-meta": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-concave": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-concave/-/turf-concave-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-/KtgVpZbCoMZ9s2AJgEJXy/TqOs=",
|
||||||
|
"requires": {
|
||||||
|
"turf-distance": "^3.0.12",
|
||||||
|
"turf-meta": "^3.0.12",
|
||||||
|
"turf-tin": "^3.0.12",
|
||||||
|
"turf-union": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-convex": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-convex/-/turf-convex-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-qI3cPiLRy2WHlqnIXTraO9Pso1c=",
|
||||||
|
"requires": {
|
||||||
|
"convex-hull": "^1.0.3",
|
||||||
|
"turf-helpers": "^3.0.12",
|
||||||
|
"turf-meta": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-destination": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-destination/-/turf-destination-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-fdb7+X6G+DGibIPvLVovjR2KbeI=",
|
||||||
|
"requires": {
|
||||||
|
"turf-helpers": "^3.0.12",
|
||||||
|
"turf-invariant": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-difference": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-difference/-/turf-difference-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-nD0NdjBCEAW4slt/Bo7Z77S8bqc=",
|
||||||
|
"requires": {
|
||||||
|
"jsts": "1.1.2",
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-distance": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-distance/-/turf-distance-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-+5e4cF+s2ZOxReAUtBhiYQ7spEk=",
|
||||||
|
"requires": {
|
||||||
|
"turf-helpers": "^3.0.12",
|
||||||
|
"turf-invariant": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-envelope": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-envelope/-/turf-envelope-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-lpIdJ4zIxmRpLjIOJUO5FAgNeGs=",
|
||||||
|
"requires": {
|
||||||
|
"turf-bbox": "^3.0.12",
|
||||||
|
"turf-bbox-polygon": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-explode": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-explode/-/turf-explode-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-xa4owoTNAGxWUR7H1AjEilQU7P4=",
|
||||||
|
"requires": {
|
||||||
|
"turf-helpers": "^3.0.12",
|
||||||
|
"turf-meta": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-flip": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-flip/-/turf-flip-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-3rhoF3uf87sxDF1BqqxhqRVqPLs=",
|
||||||
|
"requires": {
|
||||||
|
"turf-meta": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-grid": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-grid/-/turf-grid-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-uQSrxWS5ObYnpmrBXrFuBTgpuA8=",
|
||||||
|
"requires": {
|
||||||
|
"turf-point": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-helpers": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-helpers/-/turf-helpers-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-3UJy50s618lu7LeuXFf+jspUS3s="
|
||||||
|
},
|
||||||
|
"turf-hex-grid": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-hex-grid/-/turf-hex-grid-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-BpjvZpAguzHY6cwgVtCr/K/ITo8=",
|
||||||
|
"requires": {
|
||||||
|
"turf-distance": "^3.0.12",
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-inside": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-inside/-/turf-inside-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-m6QPpu7WO+x+fYiqZCdiLE3wcGY=",
|
||||||
|
"requires": {
|
||||||
|
"turf-invariant": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-intersect": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-intersect/-/turf-intersect-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-wNf7MFhDoZJ1ZwBXo50mixeDDYM=",
|
||||||
|
"requires": {
|
||||||
|
"jsts": "1.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-invariant": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-invariant/-/turf-invariant-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-O5UlOVOZHr2WLdNdT2cEwofejr4="
|
||||||
|
},
|
||||||
|
"turf-isolines": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-isolines/-/turf-isolines-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-ALIz3+LuvU7LR6lPySPG7OyJx6s=",
|
||||||
|
"requires": {
|
||||||
|
"turf-bbox": "^3.0.12",
|
||||||
|
"turf-grid": "1.0.1",
|
||||||
|
"turf-helpers": "^3.0.12",
|
||||||
|
"turf-inside": "^3.0.12",
|
||||||
|
"turf-planepoint": "^3.0.12",
|
||||||
|
"turf-square": "^3.0.12",
|
||||||
|
"turf-tin": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-kinks": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-kinks/-/turf-kinks-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-6cmo26VyTZjyNQ/FveugaewzN1U=",
|
||||||
|
"requires": {
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-line-distance": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-line-distance/-/turf-line-distance-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-cQj1smkH97jC3Rs5l4Zt06YOj18=",
|
||||||
|
"requires": {
|
||||||
|
"turf-distance": "^3.0.12",
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-line-slice": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-line-slice/-/turf-line-slice-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-9fGszJKtrmnqGsCynwdSmijd6RY=",
|
||||||
|
"requires": {
|
||||||
|
"turf-bearing": "^3.0.12",
|
||||||
|
"turf-destination": "^3.0.12",
|
||||||
|
"turf-distance": "^3.0.12",
|
||||||
|
"turf-helpers": "^3.0.12",
|
||||||
|
"turf-point-on-line": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-meta": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-meta/-/turf-meta-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-CqmhyvgrKloI1U4IMLW1o/oOijg="
|
||||||
|
},
|
||||||
|
"turf-midpoint": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-midpoint/-/turf-midpoint-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-sSdlroms3uhVb9XibJxfoEGgLL4=",
|
||||||
|
"requires": {
|
||||||
|
"turf-bearing": "^3.0.12",
|
||||||
|
"turf-destination": "^3.0.12",
|
||||||
|
"turf-distance": "^3.0.12",
|
||||||
|
"turf-invariant": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-nearest": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-nearest/-/turf-nearest-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-cAIH9EQ/BQlvhs0kb5KfFw369G0=",
|
||||||
|
"requires": {
|
||||||
|
"turf-distance": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-planepoint": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-planepoint/-/turf-planepoint-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-LDeuDxf8sw22448NWe5sDdbKqa8="
|
||||||
|
},
|
||||||
|
"turf-point": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-point/-/turf-point-2.0.1.tgz",
|
||||||
|
"integrity": "sha1-otzDCi0g9Ez1xicd97riwOIUYGk=",
|
||||||
|
"requires": {
|
||||||
|
"minimist": "^1.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-point-grid": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-point-grid/-/turf-point-grid-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-1gSXi+ELyeUzBq4CzvcJhDHbSXE=",
|
||||||
|
"requires": {
|
||||||
|
"turf-distance": "^3.0.12",
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-point-on-line": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-point-on-line/-/turf-point-on-line-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-HYZjNU5wNy2xhj5iU+kEDEcSew8=",
|
||||||
|
"requires": {
|
||||||
|
"turf-bearing": "^3.0.12",
|
||||||
|
"turf-destination": "^3.0.12",
|
||||||
|
"turf-distance": "^3.0.12",
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-point-on-surface": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-point-on-surface/-/turf-point-on-surface-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-m+UFtrC6eOmFZQAd47OkJnEVJAo=",
|
||||||
|
"requires": {
|
||||||
|
"turf-center": "^3.0.12",
|
||||||
|
"turf-distance": "^3.0.12",
|
||||||
|
"turf-explode": "^3.0.12",
|
||||||
|
"turf-helpers": "^3.0.12",
|
||||||
|
"turf-inside": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-random": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-random/-/turf-random-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-NNuxQcPx6urhQk/Wxeq6H2+5seg=",
|
||||||
|
"requires": {
|
||||||
|
"geojson-random": "^0.2.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-sample": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-sample/-/turf-sample-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-eUn4YgYSBH4TFMHO2H6ZwUJGPNI=",
|
||||||
|
"requires": {
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-simplify": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-simplify/-/turf-simplify-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-heRDyLRqordSY4lETHOB2qKtGec=",
|
||||||
|
"requires": {
|
||||||
|
"simplify-js": "^1.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-square": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-square/-/turf-square-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-Gjix4PsF/+D8qkMYji83lCpRW2Q=",
|
||||||
|
"requires": {
|
||||||
|
"turf-distance": "^3.0.12",
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-square-grid": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-square-grid/-/turf-square-grid-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-PB2ArBRVbGgTtHi9oBJRLtS5Psg=",
|
||||||
|
"requires": {
|
||||||
|
"turf-distance": "^3.0.12",
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-tag": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-tag/-/turf-tag-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-IoT/8Oih6Son1Kx/10cbPEjd0ag=",
|
||||||
|
"requires": {
|
||||||
|
"turf-inside": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-tesselate": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-tesselate/-/turf-tesselate-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-QUdLe1s4ILzyc/tx4YlNjDzUDTU=",
|
||||||
|
"requires": {
|
||||||
|
"earcut": "^2.0.0",
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-tin": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-tin/-/turf-tin-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-tlNGRHY6zhyd8kHJWNI4SFUlc4U=",
|
||||||
|
"requires": {
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-triangle-grid": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-triangle-grid/-/turf-triangle-grid-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-gGR+V9r+CTRoeaKaGKDmKUrPEVk=",
|
||||||
|
"requires": {
|
||||||
|
"turf-distance": "^3.0.12",
|
||||||
|
"turf-helpers": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-union": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-union/-/turf-union-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-3+0OVUC4woVeSZTBRiHjpgyCnI4=",
|
||||||
|
"requires": {
|
||||||
|
"jsts": "1.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf-within": {
|
||||||
|
"version": "3.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/turf-within/-/turf-within-3.0.12.tgz",
|
||||||
|
"integrity": "sha1-937q83cjhWG3+xM4526dEph0H5Q=",
|
||||||
|
"requires": {
|
||||||
|
"turf-helpers": "^3.0.12",
|
||||||
|
"turf-inside": "^3.0.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
"tweetnacl": {
|
"tweetnacl": {
|
||||||
"version": "0.14.5",
|
"version": "0.14.5",
|
||||||
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
|
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
|
||||||
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
|
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
|
||||||
},
|
},
|
||||||
|
"two-product": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/two-product/-/two-product-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-Z9ldSyV6kh4stL16+VEfkIhSLqo="
|
||||||
|
},
|
||||||
|
"two-sum": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/two-sum/-/two-sum-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-MdPzIjnk9zHsqd+RVeKyl/AIq2Q="
|
||||||
|
},
|
||||||
"type-check": {
|
"type-check": {
|
||||||
"version": "0.3.2",
|
"version": "0.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
|
||||||
|
@ -6188,6 +6790,11 @@
|
||||||
"tiny-inflate": "^1.0.0"
|
"tiny-inflate": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"union-find": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/union-find/-/union-find-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-KSusQV5q06iVNdI3AQ20pTYoTlg="
|
||||||
|
},
|
||||||
"union-value": {
|
"union-value": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"description": "A small website to edit OSM easily",
|
"description": "A small website to edit OSM easily",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "parcel index.html land.html test.html assets/test.json assets/* UI/* Logic/*",
|
"start": "parcel index.html land.html test.html assets/test.json assets/* UI/* Logic/* vendor/*",
|
||||||
"build": "parcel build --public-url ./ index.html land.html assets/*",
|
"build": "parcel build --public-url ./ index.html land.html assets/*",
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
},
|
},
|
||||||
|
@ -21,7 +21,8 @@
|
||||||
"leaflet": "^1.6.0",
|
"leaflet": "^1.6.0",
|
||||||
"osm-auth": "^1.0.2",
|
"osm-auth": "^1.0.2",
|
||||||
"osmtogeojson": "^3.0.0-beta.4",
|
"osmtogeojson": "^3.0.0-beta.4",
|
||||||
"parcel": "^1.12.4"
|
"parcel": "^1.12.4",
|
||||||
|
"turf": "^3.0.14"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"typescript": "^3.9.3"
|
"typescript": "^3.9.3"
|
||||||
|
|
1
vendor/Leaflet.AccuratePosition.js
vendored
1
vendor/Leaflet.AccuratePosition.js
vendored
|
@ -131,3 +131,4 @@ L.Map.include({
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
console.log("Find accurate position script loaded");
|
Loading…
Reference in a new issue