forked from MapComplete/MapComplete
chore: automated housekeeping...
This commit is contained in:
parent
8ef7af613f
commit
00151afdea
114 changed files with 2857 additions and 2135 deletions
|
@ -1,5 +1,10 @@
|
|||
import { ImmutableStore, Store, UIEventSource } from "../../Logic/UIEventSource"
|
||||
import maplibregl, { Map as MLMap, Map as MlMap, ScaleControl, SourceSpecification } from "maplibre-gl"
|
||||
import maplibregl, {
|
||||
Map as MLMap,
|
||||
Map as MlMap,
|
||||
ScaleControl,
|
||||
SourceSpecification,
|
||||
} from "maplibre-gl"
|
||||
import { RasterLayerPolygon } from "../../Models/RasterLayers"
|
||||
import { Utils } from "../../Utils"
|
||||
import { BBox } from "../../Logic/BBox"
|
||||
|
@ -43,10 +48,16 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
|
|||
readonly allowRotating: UIEventSource<true | boolean | undefined>
|
||||
readonly allowZooming: UIEventSource<true | boolean | undefined>
|
||||
readonly lastClickLocation: Store<
|
||||
undefined | { lon: number; lat: number; mode: "left" | "right" | "middle" , /**
|
||||
* The nearest feature from a MapComplete layer
|
||||
*/
|
||||
nearestFeature?: Feature }
|
||||
| undefined
|
||||
| {
|
||||
lon: number
|
||||
lat: number
|
||||
mode: "left" | "right" | "middle"
|
||||
/**
|
||||
* The nearest feature from a MapComplete layer
|
||||
*/
|
||||
nearestFeature?: Feature
|
||||
}
|
||||
>
|
||||
readonly minzoom: UIEventSource<number>
|
||||
readonly maxzoom: UIEventSource<number>
|
||||
|
@ -64,9 +75,13 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
|
|||
|
||||
private readonly _maplibreMap: Store<MLMap>
|
||||
|
||||
constructor(maplibreMap: Store<MLMap>, state?: Partial<MapProperties>, options?:{
|
||||
correctClick?: number
|
||||
}) {
|
||||
constructor(
|
||||
maplibreMap: Store<MLMap>,
|
||||
state?: Partial<MapProperties>,
|
||||
options?: {
|
||||
correctClick?: number
|
||||
}
|
||||
) {
|
||||
if (!MapLibreAdaptor.pmtilesInited) {
|
||||
maplibregl.addProtocol("pmtiles", new Protocol().tile)
|
||||
MapLibreAdaptor.pmtilesInited = true
|
||||
|
@ -106,7 +121,7 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
|
|||
const lastClickLocation = new UIEventSource<{
|
||||
lat: number
|
||||
lon: number
|
||||
mode: "left" | "right" | "middle",
|
||||
mode: "left" | "right" | "middle"
|
||||
nearestFeature?: Feature
|
||||
}>(undefined)
|
||||
this.lastClickLocation = lastClickLocation
|
||||
|
@ -126,30 +141,32 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
|
|||
const mouseEvent: MouseEvent = e.originalEvent
|
||||
mode = mode ?? clickmodes[mouseEvent.button]
|
||||
let nearestFeature: Feature = undefined
|
||||
if(options?.correctClick && maplibreMap.data){
|
||||
if (options?.correctClick && maplibreMap.data) {
|
||||
const map = maplibreMap.data
|
||||
const point = e.point
|
||||
const buffer = options?.correctClick
|
||||
const features = map.queryRenderedFeatures([
|
||||
[point.x - buffer, point.y - buffer],
|
||||
[point.x + buffer, point.y + buffer]
|
||||
]).filter(f => f.source.startsWith("mapcomplete_"))
|
||||
if(features.length === 1){
|
||||
const features = map
|
||||
.queryRenderedFeatures([
|
||||
[point.x - buffer, point.y - buffer],
|
||||
[point.x + buffer, point.y + buffer],
|
||||
])
|
||||
.filter((f) => f.source.startsWith("mapcomplete_"))
|
||||
if (features.length === 1) {
|
||||
nearestFeature = features[0]
|
||||
}else{
|
||||
} else {
|
||||
let nearestD: number = undefined
|
||||
for (const feature of features) {
|
||||
let d: number // in meter
|
||||
if(feature.geometry.type === "LineString"){
|
||||
const way = <Feature<LineString>> feature
|
||||
const lngLat:[number,number] = [e.lngLat.lng, e.lngLat.lat]
|
||||
if (feature.geometry.type === "LineString") {
|
||||
const way = <Feature<LineString>>feature
|
||||
const lngLat: [number, number] = [e.lngLat.lng, e.lngLat.lat]
|
||||
const p = GeoOperations.nearestPoint(way, lngLat)
|
||||
console.log(">>>",p, way, lngLat)
|
||||
if(!p){
|
||||
console.log(">>>", p, way, lngLat)
|
||||
if (!p) {
|
||||
continue
|
||||
}
|
||||
d = p.properties.dist * 1000
|
||||
if(nearestFeature === undefined || d < nearestD){
|
||||
if (nearestFeature === undefined || d < nearestD) {
|
||||
nearestFeature = way
|
||||
nearestD = d
|
||||
}
|
||||
|
@ -158,7 +175,6 @@ export class MapLibreAdaptor implements MapProperties, ExportableMap {
|
|||
}
|
||||
}
|
||||
lastClickLocation.setData({ lon, lat, mode, nearestFeature })
|
||||
|
||||
}
|
||||
|
||||
maplibreMap.addCallbackAndRunD((map) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue