examples-vite/layers/poi/index.ts (128 lines of code) (raw):
import { StandardLayer } from '@polaris.gl/gsi'
import { PolarisLite } from '@polaris.gl/lite'
import { generateScene } from '@gs.i/utils-random-scene'
import { IndicatorProcessor } from '@gs.i/processor-indicator'
import { HelperLayer } from '@polaris.gl/layer-std-helper'
import { LodLineStringLayer, PolygonLayer } from '@polaris.gl/layer-geojson'
import { FlyLineLayer, FlyLine } from '@polaris.gl/layer-flyline'
import { ScatterLayer } from '@polaris.gl/layer-scatter'
import { AOILayer } from '@polaris.gl/layer-xyz-aoi-tile'
import { AMapLayer } from '@polaris.gl/layer-amap'
import { MercatorProjection } from '@polaris.gl/projection'
import { POILayer } from '@polaris.gl/layer-xyz-poi-tile'
const p = new PolarisLite({
container: document.querySelector('#container') as HTMLDivElement,
background: 'transparent',
// autoplay: false,
asyncRendering: true,
projection: new MercatorProjection({
center: [104, 35.4],
}),
})
// amap
const amapLayer = new AMapLayer({
// showLogo: false,
})
p.add(amapLayer)
const h = new HelperLayer({ length: 10000 })
p.add(h)
h.setProps({ box: false })
globalThis.p = p
console.log(p)
p.setStatesCode('1|120.184301|30.265237|0.000000|0.00000|0.00000|16.70400') // closer hz
const framesBeforeRequest = 10
const viewZoomReduction = 0
// POI
let lastHovered
const poi = new POILayer({
// geojsonFilter: (geojson) => {
// console.log('poi', geojson)
// },
framesBeforeRequest,
viewZoomReduction,
dataType: 'pbf',
pointSize: 20,
pointHoverSize: 24,
pointOffset: [0.0, 0.5],
getPointColor: '#ffaf99',
pointImage:
'https://img.alicdn.com/imgextra/i2/O1CN01VcJVlk28INDH4OCXH_!!6000000007909-2-tps-500-500.png',
pointColorBlend: 'add',
clusterSize: 40,
clusterColor: '#ffaf99',
clusterImage:
'https://img.alicdn.com/imgextra/i2/O1CN016yGVRh1Tdzf8SkuLn_!!6000000002406-2-tps-60-60.png',
clusterColorBlend: 'add',
minZoom: 3,
maxZoom: 20,
getUrl: getPOIUrl,
getClusterContent: (feature) => {
if (feature.properties.number_of_point > 1) {
const count = Math.round(feature.properties.number_of_point)
if (count > 99) {
return '99+'
}
return count.toString()
}
return
},
getClusterDOMStyle: (feature) => {
// const count = Math.round(feature.properties.number_of_point)
return {
fontSize: '14px',
color: '#fff',
}
},
pickable: false,
onPicked: (data) => {
console.log('data', data)
},
onHovered: (data) => {
if (lastHovered !== undefined) {
poi.highlightByIds([lastHovered], { type: 'none' })
}
if (!data || data.data.feature === undefined) return
const feature = data.data.feature
const id = feature.properties.id
if (!id) return
poi.highlightByIds([id], { type: 'hover' })
lastHovered = id
console.log('id', id)
},
renderOrder: 100,
})
p.add(poi)
window['poi'] = poi
function getPOIUrl(x, y, z) {
const params = {
PostgreSQL: {
dbname: 'EXAMPLE',
user: 'EXAMPLE',
password: 'EXAMPLE',
host: 'EXAMPLE',
port: '1921',
},
fc_param: {
x,
y,
z,
id_column: 'id',
geometry_column: 'geometry',
clip_geometry: null,
area_code: null,
source: 'hz_house_order',
output_format: 'geojson_pbf',
layer: {
default: {
geometry_type: 'point',
visible_columns: ['count'],
filter_expression: [],
visible_zlevel: [1, 20],
clickable_zlevel: [15, 20],
aggregation: {
zlevel: [1, 15],
clustering_method: 'bin',
clustering_scalar: 1000,
fields: {
count_number: ['id', 'count'],
sum_number: ['count', 'sum'],
},
},
},
},
},
}
return 'EXAMPLE' + JSON.stringify(params)
}