通过真实项目案例,学习PostGIS在各种业务场景中的应用,从理论到实践的完美转化
覆盖多个行业的实际应用场景
城市规划、设施管理、交通优化
路径规划、仓储选址、配送优化
选址分析、市场研究、客户画像
灾害预警、救援调度、风险评估
深入了解每个案例的技术实现和业务价值
构建一个完整的外卖配送系统,包括餐厅管理、订单配送、路径优化等核心功能。 通过PostGIS实现精准的位置服务和高效的配送调度。
-- 创建餐厅表
CREATE TABLE restaurants (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
location GEOMETRY(Point, 4326),
cuisine_type VARCHAR(50),
rating DECIMAL(3,2),
delivery_radius INTEGER DEFAULT 3000,
is_active BOOLEAN DEFAULT true
);
-- 创建用户表
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
phone VARCHAR(20),
current_location GEOMETRY(Point, 4326),
address TEXT,
created_at TIMESTAMP DEFAULT NOW()
);
-- 创建配送员表
CREATE TABLE delivery_drivers (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
phone VARCHAR(20),
current_location GEOMETRY(Point, 4326),
is_available BOOLEAN DEFAULT true,
vehicle_type VARCHAR(20),
rating DECIMAL(3,2)
);
-- 创建订单表
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
restaurant_id INTEGER REFERENCES restaurants(id),
driver_id INTEGER REFERENCES delivery_drivers(id),
delivery_address TEXT,
delivery_location GEOMETRY(Point, 4326),
total_amount DECIMAL(10,2),
status VARCHAR(20) DEFAULT 'pending',
created_at TIMESTAMP DEFAULT NOW()
);
-- 查找用户3公里内的餐厅
SELECT
r.id, r.name, r.cuisine_type, r.rating,
ST_Distance(r.location, u.current_location) as distance
FROM restaurants r, users u
WHERE u.id = 1
AND ST_DWithin(r.location, u.current_location, 3000)
AND r.is_active = true
ORDER BY distance
LIMIT 10;
-- 找到距离餐厅最近的可用配送员
SELECT
d.id, d.name, d.vehicle_type, d.rating,
ST_Distance(d.current_location, r.location) as distance
FROM delivery_drivers d, restaurants r
WHERE r.id = 1
AND d.is_available = true
AND ST_DWithin(d.current_location, r.location, 5000)
ORDER BY distance, d.rating DESC
LIMIT 1;
实时体验外卖配送系统的核心功能
输入您的位置,查找附近可配送的餐厅
点击"查找附近餐厅"开始体验
老北京炸酱面 (116.4551, 39.9380)
准备中...
王师傅 (116.4500, 39.9300)
配送中 (预计15分钟)
张三 (116.4520, 39.9350)
等待配送