update
This commit is contained in:
@@ -6,4 +6,5 @@ pub struct MapWay {
|
||||
pub id: i64,
|
||||
pub tags: HashMap<String, String>,
|
||||
pub points: Vec<u8>, // Flat f32 array (lat, lon, lat, lon...)
|
||||
pub vertex_buffer: Vec<u8>, // Precomputed GPU-ready vertex data
|
||||
}
|
||||
|
||||
@@ -27,10 +27,10 @@ impl WayRepository {
|
||||
|
||||
let mut ways = Vec::with_capacity(rows.len());
|
||||
for row in rows {
|
||||
let (id, tags, points) = row.into_typed::<(i64, std::collections::HashMap<String, String>, Vec<u8>)>()
|
||||
let (id, tags, points, vertex_buffer) = row.into_typed::<(i64, std::collections::HashMap<String, String>, Vec<u8>, Vec<u8>)>()
|
||||
.map_err(|e| Box::<dyn Error + Send + Sync>::from(format!("Serialization error: {}", e)))?;
|
||||
|
||||
ways.push(MapWay { id, tags, points });
|
||||
ways.push(MapWay { id, tags, points, vertex_buffer });
|
||||
}
|
||||
Ok(ways)
|
||||
}
|
||||
@@ -39,29 +39,29 @@ impl WayRepository {
|
||||
#[async_trait::async_trait]
|
||||
impl WayRepositoryTrait for WayRepository {
|
||||
async fn find_ways_in_tile(&self, z: i32, x: i32, y: i32) -> Result<Vec<MapWay>, Box<dyn Error + Send + Sync>> {
|
||||
let query = "SELECT id, tags, points FROM map_data.ways WHERE zoom = ? AND tile_x = ? AND tile_y = ? LIMIT 50000";
|
||||
let query = "SELECT id, tags, points, vertex_buffer FROM map_data.ways WHERE zoom = ? AND tile_x = ? AND tile_y = ? LIMIT 50000";
|
||||
self.query_ways(query, z, x, y).await
|
||||
}
|
||||
|
||||
async fn find_buildings_in_tile(&self, z: i32, x: i32, y: i32) -> Result<Vec<MapWay>, Box<dyn Error + Send + Sync>> {
|
||||
if z < 12 { return Ok(Vec::new()); }
|
||||
let query = "SELECT id, tags, points FROM map_data.buildings WHERE zoom = ? AND tile_x = ? AND tile_y = ? LIMIT 50000";
|
||||
let query = "SELECT id, tags, points, vertex_buffer FROM map_data.buildings WHERE zoom = ? AND tile_x = ? AND tile_y = ? LIMIT 50000";
|
||||
self.query_ways(query, z, x, y).await
|
||||
}
|
||||
|
||||
async fn find_landuse_in_tile(&self, z: i32, x: i32, y: i32) -> Result<Vec<MapWay>, Box<dyn Error + Send + Sync>> {
|
||||
if z < 4 { return Ok(Vec::new()); }
|
||||
let query = "SELECT id, tags, points FROM map_data.landuse WHERE zoom = ? AND tile_x = ? AND tile_y = ? LIMIT 50000";
|
||||
let query = "SELECT id, tags, points, vertex_buffer FROM map_data.landuse WHERE zoom = ? AND tile_x = ? AND tile_y = ? LIMIT 50000";
|
||||
self.query_ways(query, z, x, y).await
|
||||
}
|
||||
|
||||
async fn find_water_in_tile(&self, z: i32, x: i32, y: i32) -> Result<Vec<MapWay>, Box<dyn Error + Send + Sync>> {
|
||||
let query = "SELECT id, tags, points FROM map_data.water WHERE zoom = ? AND tile_x = ? AND tile_y = ? LIMIT 50000";
|
||||
let query = "SELECT id, tags, points, vertex_buffer FROM map_data.water WHERE zoom = ? AND tile_x = ? AND tile_y = ? LIMIT 50000";
|
||||
self.query_ways(query, z, x, y).await
|
||||
}
|
||||
|
||||
async fn find_railways_in_tile(&self, z: i32, x: i32, y: i32) -> Result<Vec<MapWay>, Box<dyn Error + Send + Sync>> {
|
||||
let query = "SELECT id, tags, points FROM map_data.railways WHERE zoom = ? AND tile_x = ? AND tile_y = ? LIMIT 50000";
|
||||
let query = "SELECT id, tags, points, vertex_buffer FROM map_data.railways WHERE zoom = ? AND tile_x = ? AND tile_y = ? LIMIT 50000";
|
||||
self.query_ways(query, z, x, y).await
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user