geojson#Geometry TypeScript Examples
The following examples show how to use
geojson#Geometry.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: geojson.ts From covid_dashboard with MIT License | 6 votes |
export function geocentroid(geometry: Geometry): Position {
if (geometry.type === 'Polygon') {
return polylabel(geometry.coordinates)
} else if (geometry.type === 'MultiPolygon') {
let largestIdx = 0, largestArea = 0
geometry.coordinates.forEach((coordinates, idx) => {
const area = turf.area(turf.polygon(coordinates))
if (area > largestArea) {
largestIdx = idx
largestArea = area
}
})
return polylabel(geometry.coordinates[largestIdx])
}
else {
throw new Error('unexpected geometry type ' + geometry.type)
}
}
Example #2
Source File: geojson.ts From covid_dashboard with MIT License | 6 votes |
export function genpaths(geometry: Geometry): string[] {
if (geometry.type === 'Polygon') {
return [poly2path(geometry.coordinates)]
} else if (geometry.type === 'MultiPolygon') {
return geometry.coordinates.map(poly2path)
} else {
return []
}
}
Example #3
Source File: WorldMapAtlas.tsx From react-tutorials with MIT License | 6 votes |
WorldMapAtlas = () => {
const [geographies, setGeographies] = useState<[] | Array<Feature<Geometry | null>>>([])
useEffect(() => {
fetch('/data/world-110m.json').then((response) => {
if (response.status !== 200) {
// eslint-disable-next-line no-console
console.log(`Houston we have a problem: ${response.status}`)
return
}
response.json().then((worldData) => {
const mapFeatures: Array<Feature<Geometry | null>> = ((feature(worldData, worldData.objects.countries) as unknown) as FeatureCollection).features
setGeographies(mapFeatures)
})
})
}, [])
const projection = geoEqualEarth().scale(scale).translate([cx, cy]).rotate([0, 0])
return (
<>
<svg width={scale * 3} height={scale * 3} viewBox="0 0 800 450">
<g>
{(geographies as []).map((d, i) => (
<path
key={`path-${uuid()}`}
d={geoPath().projection(projection)(d) as string}
fill={`rgba(38,50,56,${(1 / (geographies ? geographies.length : 0)) * i})`}
stroke="aliceblue"
strokeWidth={0.5}
/>
))}
</g>
</svg>
</>
)
}
Example #4
Source File: mapSelectors.ts From react-tutorials with MIT License | 6 votes |
getMapDataFromFile = () =>
new Promise((resolve) =>
fetch('/data/world-110m.json').then((response) => {
if (response.status !== 200) {
// eslint-disable-next-line no-console
console.log(`Houston, we have a problem! ${response.status}`)
return
}
response.json().then((worldData) => {
const mapFeatures: Array<Feature<Geometry | null>> = ((feature(worldData, worldData.objects.countries) as unknown) as FeatureCollection).features
resolve(setMapObject(mapFeatures))
})
})
)
Example #5
Source File: RotatingRoundWorldMap.tsx From react-tutorials with MIT License | 5 votes |
WorldMap = () => {
const [geographies, setGeographies] = useState<[] | Array<Feature<Geometry | null>>>([])
const [rotation, setRotation] = useState<number>(initRotation)
const [isRotate, setIsRotate] = useState<Boolean>(false)
useEffect(() => {
fetch('/data/world-110m.json').then((response) => {
if (response.status !== 200) {
// eslint-disable-next-line no-console
console.log(`Houston we have a problem: ${response.status}`)
return
}
response.json().then((worldData) => {
const mapFeatures: Array<Feature<Geometry | null>> = ((feature(worldData, worldData.objects.countries) as unknown) as FeatureCollection).features
setGeographies(mapFeatures)
})
})
}, [])
// geoEqualEarth
// geoOrthographic
const projection = geoOrthographic().scale(scale).translate([cx, cy]).rotate([rotation, 0])
AnimationFrame(() => {
if (isRotate) {
let newRotation = rotation
if (rotation >= 360) {
newRotation = rotation - 360
}
setRotation(newRotation + 0.2)
// console.log(`rotation: ${ rotation}`)
}
})
return (
<>
<Button
size="medium"
color="primary"
startIcon={<PlayCircleFilledWhiteIcon />}
onClick={() => {
setIsRotate(true)
}}
/>
<svg width={scale * 3} height={scale * 3} viewBox="0 0 800 450">
<g>
<circle fill="#f2f2f2" cx={cx} cy={cy} r={scale} />
</g>
<g>
{(geographies as []).map((d, i) => (
<path
key={`path-${uuid()}`}
d={geoPath().projection(projection)(d) as string}
fill={`rgba(38,50,56,${(1 / (geographies ? geographies.length : 0)) * i})`}
stroke="aliceblue"
strokeWidth={0.5}
/>
))}
</g>
</svg>
</>
)
}
Example #6
Source File: RoundWorldMap.tsx From react-tutorials with MIT License | 5 votes |
RoundWorldMap = () => {
const [geographies, setGeographies] = useState<[] | Array<Feature<Geometry | null>>>([])
// eslint-disable-next-line no-unused-vars,@typescript-eslint/no-unused-vars
const [rotation, setRotation] = useState<number>(initRotation)
useEffect(() => {
fetch('/data/world-110m.json').then((response) => {
if (response.status !== 200) {
// eslint-disable-next-line no-console
console.log(`Houston we have a problem: ${response.status}`)
return
}
response.json().then((worldData) => {
const mapFeatures: Array<Feature<Geometry | null>> = ((feature(worldData, worldData.objects.countries) as unknown) as FeatureCollection).features
setGeographies(mapFeatures)
})
})
}, [])
const projection = geoOrthographic().scale(scale).translate([cx, cy]).rotate([rotation, 0])
return (
<svg width={scale * 3} height={scale * 3} viewBox="0 0 800 450">
<g>
<circle fill="#f2f2f2" cx={cx} cy={cy} r={scale} />
</g>
<g>
{(geographies as []).map((d, i) => (
<path
key={`path-${uuid()}`}
d={geoPath().projection(projection)(d) as string}
fill={`rgba(38,50,56,${(1 / (geographies ? geographies.length : 0)) * i})`}
stroke="aliceblue"
strokeWidth={0.5}
/>
))}
</g>
</svg>
)
}
Example #7
Source File: mapObject.ts From react-tutorials with MIT License | 5 votes |
setMapObject = (data: Array<Feature<Geometry | null>>): mapObject => ({
mapFeatures: data,
})
Example #8
Source File: RotatingRoundWorldMapWithCoordinates.tsx From react-tutorials with MIT License | 4 votes |
RotatingRoundWorldMapWithCoordinates = () => {
const [geographies, setGeographies] = useState<[] | Array<Feature<Geometry | null>>>([])
const [rotation, setRotation] = useState<number>(initRotation)
const [isRotate, setIsRotate] = useState<Boolean>(false)
useEffect(() => {
fetch('/data/world-110m.json').then((response) => {
if (response.status !== 200) {
// eslint-disable-next-line no-console
console.log(`Houston we have a problem: ${response.status}`)
return
}
response.json().then((worldData) => {
const mapFeatures: Array<Feature<Geometry | null>> = ((feature(worldData, worldData.objects.countries) as unknown) as FeatureCollection).features
setGeographies(mapFeatures)
})
})
}, [])
// geoEqualEarth
// geoOrthographic
const projection = geoOrthographic().scale(scale).translate([cx, cy]).rotate([rotation, 0])
AnimationFrame(() => {
if (isRotate) {
let newRotation = rotation
if (rotation >= 360) {
newRotation = rotation - 360
}
setRotation(newRotation + 0.2)
// console.log(`rotation: ${ rotation}`)
}
})
function returnProjectionValueWhenValid(point: [number, number], index: number) {
const retVal: [number, number] | null = projection(point)
if (retVal?.length) {
return retVal[index]
}
return 0
}
const handleMarkerClick = (i: number) => {
// eslint-disable-next-line no-alert
alert(`Marker: ${JSON.stringify(data[i])}`)
}
return (
<>
<Button
size="medium"
color="primary"
startIcon={<PlayCircleFilledWhiteIcon />}
onClick={() => {
setIsRotate(true)
}}
/>
<svg width={scale * 3} height={scale * 3} viewBox="0 0 800 450">
<g>
<circle fill="#f2f2f2" cx={cx} cy={cy} r={scale} />
</g>
<g>
{(geographies as []).map((d, i) => (
<path
key={`path-${uuid()}`}
d={geoPath().projection(projection)(d) as string}
fill={`rgba(38,50,56,${(1 / (geographies ? geographies.length : 0)) * i})`}
stroke="aliceblue"
strokeWidth={0.5}
/>
))}
</g>
<g>
{data.map((d, i) => (
<circle
key={`marker-${uuid()}`}
cx={returnProjectionValueWhenValid(d.coordinates, 0)}
cy={returnProjectionValueWhenValid(d.coordinates, 1)}
r={5}
fill="#E91E63"
stroke="#FFFFFF"
onClick={() => handleMarkerClick(i)}
onMouseEnter={() => setIsRotate(false)}
/>
))}
</g>
</svg>
</>
)
}