🗓️ Land Surveyor Events & Conferences - Land Surveyors United - Surveying Education Community
FSMS 70th Annual Conference
2025-07-30T14:00:00.000Z

Jul 30, 2025 at 10:00am to Jul 31, 2025 at 10:00am

Location: 5001 Coconut Rd, Bonita Springs, FL 34134

Created by: Justin Farrow

FSMS 70th Annual Conference

Join us August 14-17, 2024 at the Hyatt Regency Coconut Point Resort & Spa in Bonita Springs, FL

About the Conference

The FSMS Annual Conference is Florida's premier event for surveying and mapping professionals, featuring educational sessions, networking opportunities, and the latest industry innovations.

Conference Schedule
Wednesday, August 14

Registration & Welcome Reception

Thursday, August 15

Educational Sessions & Exhibition

Friday, August 16

Continued Sessions & Annual Banquet

Saturday, August 17

Closing Sessions & Farewell Brunch

Registration Options
Full Conference

Access to all conference sessions, exhibitions, and social events

Register Now
One Day Pass

Access to all activities for your selected day

Select Day
Exhibition Only

Access to the exhibition hall only

Get Pass
Location
Hyatt Regency Coconut Point Resort & Spa

5001 Coconut Road, Bonita Springs, FL 34134

2024 Florida Surveying and Mapping Society. All rights reserved.

document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { e.preventDefault(); document.querySelector(this.getAttribute('href')).scrollIntoView({ behavior: 'smooth' }); }); }); const GRID_SIZE = 50; const MEASUREMENT_POINTS = 15; const LASER_COLOR = 0xff0000; const ANIMATION_SPEED = 0.005; const LASER_PULSE_DURATION = 300; const MEASUREMENT_SETS = 5; const POINTS_PER_SET = 5; const TERRAIN_RESOLUTION = 64; const TERRAIN_HEIGHT_SCALE = 3; const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); const renderer = new THREE.WebGLRenderer({ alpha: true }); renderer.setSize(window.innerWidth, window.innerHeight); document.getElementById('surveying-simulation').appendChild(renderer.domElement); function createTripod() { const group = new THREE.Group(); const legGeometry = new THREE.CylinderGeometry(0.02, 0.03, 2, 16); const legMaterial = new THREE.MeshStandardMaterial({ color: 0x888888, metalness: 0.9, roughness: 0.1, envMap: null }); for (let i = 0; i < 3; i++) { const leg = new THREE.Mesh(legGeometry, legMaterial); leg.position.x = Math.cos(i * Math.PI * 2 / 3); leg.position.z = Math.sin(i * Math.PI * 2 / 3); leg.rotation.x = Math.PI / 6; leg.rotation.z = i * Math.PI * 2 / 3; const jointGeometry = new THREE.SphereGeometry(0.04, 12, 12); const joint = new THREE.Mesh(jointGeometry, legMaterial); joint.position.y = 0.8; leg.add(joint); const innerLegGeometry = new THREE.CylinderGeometry(0.015, 0.02, 0.8, 16); const innerLeg = new THREE.Mesh(innerLegGeometry, legMaterial); innerLeg.position.y = -0.4; leg.add(innerLeg); const footGeometry = new THREE.CylinderGeometry(0.08, 0.08, 0.05, 8); const foot = new THREE.Mesh(footGeometry, legMaterial); foot.position.y = -0.95; leg.add(foot); group.add(leg); } const instrumentGroup = new THREE.Group(); const baseGeometry = new THREE.CylinderGeometry(0.2, 0.2, 0.1, 16); const baseMaterial = new THREE.MeshPhongMaterial({ color: 0x444444 }); const base = new THREE.Mesh(baseGeometry, baseMaterial); instrumentGroup.add(base); const platformGeometry = new THREE.CylinderGeometry(0.15, 0.15, 0.15, 16); const platform = new THREE.Mesh(platformGeometry, baseMaterial); platform.position.y = 0.125; instrumentGroup.add(platform); const levelBubbleGeometry = new THREE.SphereGeometry(0.05, 16, 16); const glassMaterial = new THREE.MeshPhysicalMaterial({ color: 0xffffff, transmission: 0.9, transparency: 1, metalness: 0, roughness: 0 }); const levelBubble = new THREE.Mesh(levelBubbleGeometry, glassMaterial); levelBubble.position.y = 0.4; instrumentGroup.add(levelBubble); const displayGeometry = new THREE.BoxGeometry(0.2, 0.1, 0.05); const displayMaterial = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); const display = new THREE.Mesh(displayGeometry, displayMaterial); display.position.set(0.2, 0.4, 0); instrumentGroup.add(display); const telescopeGroup = new THREE.Group(); const scopeGeometry = new THREE.CylinderGeometry(0.05, 0.07, 0.4, 12); const scope = new THREE.Mesh(scopeGeometry, baseMaterial); scope.rotation.z = Math.PI / 2; telescopeGroup.add(scope); const eyepieceGeometry = new THREE.CylinderGeometry(0.03, 0.03, 0.1, 8); const eyepiece = new THREE.Mesh(eyepieceGeometry, baseMaterial); eyepiece.position.x = 0.25; eyepiece.rotation.z = Math.PI / 2; telescopeGroup.add(eyepiece); telescopeGroup.position.y = 0.3; instrumentGroup.add(telescopeGroup); instrumentGroup.position.y = 1.5; group.add(instrumentGroup); group.telescopeGroup = telescopeGroup; group.platform = platform; return group; } function createTerrain() { const geometry = new THREE.PlaneGeometry(GRID_SIZE, GRID_SIZE, TERRAIN_RESOLUTION, TERRAIN_RESOLUTION); const material = new THREE.MeshStandardMaterial({ color: 0x1a4d1a, wireframe: true, side: THREE.DoubleSide, metalness: 0.2, roughness: 0.8 }); const terrain = new THREE.Mesh(geometry, material); terrain.rotation.x = -Math.PI / 2; terrain.position.y = -2; const vertices = geometry.attributes.position.array; for (let i = 0; i < vertices.length; i += 3) { const x = vertices[i] / GRID_SIZE; const z = vertices[i + 2] / GRID_SIZE; vertices[i + 2] = (Math.sin(x * 5) * Math.cos(z * 5) + Math.sin(x * 10) * Math.cos(z * 10) * 0.5 + Math.sin(x * 20) * Math.cos(z * 20) * 0.25) * TERRAIN_HEIGHT_SCALE; } geometry.attributes.position.needsUpdate = true; return terrain; } function createMeasurementPoints() { const points = new THREE.Group(); const setRadius = GRID_SIZE * 0.3; for (let set = 0; set < MEASUREMENT_SETS; set++) { const setGroup = new THREE.Group(); const centerX = (Math.random() - 0.5) * GRID_SIZE * 0.4; const centerZ = (Math.random() - 0.5) * GRID_SIZE * 0.4; for (let i = 0; i < POINTS_PER_SET; i++) { const angle = i / POINTS_PER_SET * Math.PI * 2; const radius = setRadius * (0.5 + Math.random() * 0.5); const geometry = new THREE.SphereGeometry(0.1, 12, 12); const material = new THREE.MeshStandardMaterial({ color: 0xffff00, emissive: 0x444400 }); const point = new THREE.Mesh(geometry, material); point.position.x = centerX + Math.cos(angle) * radius; point.position.z = centerZ + Math.sin(angle) * radius; point.position.y = -1.8 + Math.random() * 0.4; const stakeGeometry = new THREE.CylinderGeometry(0.02, 0.02, 0.5, 8); const stake = new THREE.Mesh(stakeGeometry, new THREE.MeshStandardMaterial({ color: 0xcc8866 })); stake.position.y = -0.25; point.add(stake); setGroup.add(point); } points.add(setGroup); } return points; } function createLaser() { const geometry = new THREE.CylinderGeometry(0.01, 0.01, 1, 8); const material = new THREE.MeshBasicMaterial({ color: LASER_COLOR, transparent: true, opacity: 0.7 }); const laser = new THREE.Mesh(geometry, material); laser.visible = false; return laser; } const ambientLight = new THREE.AmbientLight(0x404040); scene.add(ambientLight); const directionalLight = new THREE.DirectionalLight(0xffffff, 1); directionalLight.position.set(5, 5, 5); scene.add(directionalLight); const tripod = createTripod(); const terrain = createTerrain(); const measurementPoints = createMeasurementPoints(); const laser = createLaser(); scene.add(tripod); scene.add(terrain); scene.add(measurementPoints); tripod.add(laser); camera.position.set(8, 5, 8); camera.lookAt(0, 0, 0); function animate() { requestAnimationFrame(animate); const time = Date.now() * ANIMATION_SPEED; const currentSet = Math.floor(time / 10) % MEASUREMENT_SETS; const currentPoint = Math.floor(time) % POINTS_PER_SET; const targetPoint = measurementPoints.children[currentSet].children[currentPoint]; tripod.platform.rotation.y = time * 2; tripod.telescopeGroup.rotation.z = Math.PI / 2 + Math.sin(time * 0.5) * 0.2; if (targetPoint) { laser.visible = true; laser.lookAt(targetPoint.position); const distance = tripod.position.distanceTo(targetPoint.position); laser.scale.y = distance; laser.position.y = -distance / 2; laser.material.opacity = Math.sin(time * 20) * 0.3 + 0.7; targetPoint.material.emissiveIntensity = (Math.sin(time * 20) + 1) / 2; setTimeout(() => { targetPoint.material.emissiveIntensity = 0; laser.visible = false; }, LASER_PULSE_DURATION); } terrain.geometry.attributes.position.array.forEach((val, idx) => { if (idx % 3 === 2) { terrain.geometry.attributes.position.array[idx] += Math.sin(time + idx) * 0.01; } }); terrain.geometry.attributes.position.needsUpdate = true; renderer.render(scene, camera); } animate(); function initMap() { const hotelLocation = { lat: 26.3391, lng: -81.8372 }; const map = new google.maps.Map(document.getElementById('map'), { zoom: 15, center: hotelLocation, styles: [{ elementType: "geometry", stylers: [{ color: "#242f3e" }] }, { elementType: "labels.text.stroke", stylers: [{ color: "#242f3e" }] }, { elementType: "labels.text.fill", stylers: [{ color: "#746855" }] }, { featureType: "administrative.locality", elementType: "labels.text.fill", stylers: [{ color: "#d59563" }] }, { featureType: "poi", elementType: "labels.text.fill", stylers: [{ color: "#d59563" }] }, { featureType: "poi.park", elementType: "geometry", stylers: [{ color: "#263c3f" }] }, { featureType: "poi.park", elementType: "labels.text.fill", stylers: [{ color: "#6b9a76" }] }, { featureType: "road", elementType: "geometry", stylers: [{ color: "#38414e" }] }, { featureType: "road", elementType: "geometry.stroke", stylers: [{ color: "#212a37" }] }, { featureType: "road", elementType: "labels.text.fill", stylers: [{ color: "#9ca5b3" }] }, { featureType: "water", elementType: "geometry", stylers: [{ color: "#17263c" }] }] }); const marker = new google.maps.Marker({ position: hotelLocation, map: map, title: 'Hyatt Regency Coconut Point Resort & Spa' }); const infoWindow = new google.maps.InfoWindow({ content: '<div style="color: black;">Hyatt Regency Coconut Point<br>5001 Coconut Rd, Bonita Springs, FL 34134' }); marker.addListener('click', () => { infoWindow.open(map, marker); }); } initMap(); if (navigator.geolocation) {} window.addEventListener('resize', () => { camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); });
Enclosure: https://landsurveyorsunited.com/events/fsms-70th-annual-conference
More information on this event...

+ Add a Local Surveying Event