Add comprehensive documentation for the nigig-map crate: README.md: - Overview and features - Architecture overview - Basic usage examples - API reference summary - Performance information - Testing instructions API.md: - Complete API reference - All types, methods, and functions documented - Code examples for each API - Constants and error types documented USER_GUIDE.md: - Getting started guide - Basic usage instructions - Offline maps (MBTiles) guide - Online maps (Overpass API) guide - Style customization guide - Programmatic control examples - Performance tuning tips - Troubleshooting guide - Complete examples This completes Phase 5: Documentation
19 KiB
Nigig Map API Reference
Complete API reference for the Nigig Map crate.
Modules
nigig_map
Main module containing the map widget and related types.
Re-exports
pub use makepad_fast_inflate;
pub use makepad_mbtile_reader;
Submodules
geometry- Geometry types and transformationslabel- Label extraction and placementlabel_state- Label placement staterenderer- Rendering logicrender_graph- Render graph executionscheduler- Tile loading schedulersprite- Sprite renderingstyle- Style compilationtile- Tile typestile_decode- Tile decodingtile_disk- Disk cacheviewport- Viewport statemvt_parser- MVT tile parsingoverpass_parser- Overpass API parsingasset_loader- Asset loading
Types
MapView
Main map widget for rendering maps.
#[derive(Script, Widget)]
pub struct MapView {
// ... fields ...
}
Properties
| Property | Type | Default | Description |
|---|---|---|---|
center_lon |
f64 |
4.9041 | Center longitude |
center_lat |
f64 |
52.3676 | Center latitude |
zoom |
f64 |
14.0 | Zoom level |
min_zoom |
f64 |
11.0 | Minimum zoom level |
max_zoom |
f64 |
17.0 | Maximum zoom level |
dark_theme |
bool |
false | Use dark theme |
use_network |
bool |
true | Enable network requests |
use_local_mbtiles |
bool |
true | Use local MBTiles |
local_mbtiles_path |
String |
"local/mbtiles/kenya-shortbread-1.0.mbtiles" | Path to MBTiles file |
local_tile_cache_dir |
String |
"local/tilecache_v5" | Path to tile cache directory |
style_light |
MapThemeStyle |
(default) | Light theme style |
style_dark |
MapThemeStyle |
(default) | Dark theme style |
Methods
load_style_json
Load style from JSON string.
pub fn load_style_json(&mut self, json_str: &str) -> Result<(), String>
Parameters:
json_str- JSON string containing Mapbox GL style
Returns:
Ok(())on successErr(String)on error
Example:
let style_json = r#"{"version": 8, "sources": {...}, "layers": [...]}"#;
map_view.load_style_json(style_json)?;
recompile_style_for_zoom
Recompile style for specific zoom level.
pub fn recompile_style_for_zoom(&mut self, zoom: f64)
Parameters:
zoom- Zoom level to compile for
Example:
map_view.recompile_style_for_zoom(14.0);
render_graph
Get reference to render graph.
pub fn render_graph(&self) -> &RenderGraph
Returns:
- Reference to
RenderGraph
Example:
let graph = map_view.render_graph();
println!("Number of passes: {}", graph.passes().len());
enable_pass
Enable a render pass.
pub fn enable_pass(&mut self, pass_type: PassType)
Parameters:
pass_type- Pass type to enable
Example:
map_view.enable_pass(PassType::Label);
disable_pass
Disable a render pass.
pub fn disable_pass(&mut self, pass_type: PassType)
Parameters:
pass_type- Pass type to disable
Example:
map_view.disable_pass(PassType::POI);
set_pass_zoom_range
Set zoom range for a render pass.
pub fn set_pass_zoom_range(&mut self, pass_type: PassType, min_zoom: f64, max_zoom: f64)
Parameters:
pass_type- Pass type to configuremin_zoom- Minimum zoom level (inclusive)max_zoom- Maximum zoom level (inclusive)
Example:
map_view.set_pass_zoom_range(PassType::Label, 14.0, 20.0);
MapThemeStyle
Style configuration for map rendering.
#[derive(Script, ScriptHook, Clone, Default)]
pub struct MapThemeStyle {
pub background: Vec4f,
pub label: Vec4f,
pub status_text: Vec4f,
pub fill_rules: Vec<MapFillRule>,
pub road_rules: Vec<MapRoadRule>,
pub waterway_rules: Vec<MapWaterwayRule>,
pub rail_rules: Vec<MapRailRule>,
}
Properties
| Property | Type | Default | Description |
|---|---|---|---|
background |
Vec4f |
#xddd7cc | Background color |
label |
Vec4f |
#x000000 | Label color |
status_text |
Vec4f |
#xdee9f4 | Status text color |
fill_rules |
Vec<MapFillRule> |
[] | Fill rules |
road_rules |
Vec<MapRoadRule> |
[] | Road rules |
waterway_rules |
Vec<MapWaterwayRule> |
[] | Waterway rules |
rail_rules |
Vec<MapRailRule> |
[] | Rail rules |
MapFillRule
Fill rule for polygon features.
#[derive(Script, ScriptHook, Clone, Default)]
pub struct MapFillRule {
pub group: String,
pub value: String,
pub color: Vec4f,
}
Properties
| Property | Type | Default | Description |
|---|---|---|---|
group |
String |
"" | Feature group (e.g., "building", "water") |
value |
String |
"" | Feature value (e.g., "residential", "yes") |
color |
Vec4f |
#x000000 | Fill color |
Example:
MapFillRule {
group: "building",
value: "yes",
color: #xd7dee7,
}
MapRoadRule
Road rendering rule.
#[derive(Script, ScriptHook, Clone, Default)]
pub struct MapRoadRule {
pub kind: String,
pub sort_rank: i32,
pub casing_color: Vec4f,
pub casing_width: f32,
pub casing_shape_id: f32,
pub center_color: Vec4f,
pub center_width: f32,
pub center_shape_id: f32,
}
Properties
| Property | Type | Default | Description |
|---|---|---|---|
kind |
String |
"" | Road kind (e.g., "motorway", "primary") |
sort_rank |
i32 |
0 | Sort rank (higher = drawn on top) |
casing_color |
Vec4f |
#x000000 | Casing color |
casing_width |
f32 |
0.0 | Casing width |
casing_shape_id |
f32 |
0.0 | Casing shape ID |
center_color |
Vec4f |
#x000000 | Center color |
center_width |
f32 |
0.0 | Center width |
center_shape_id |
f32 |
0.0 | Center shape ID |
Example:
MapRoadRule {
kind: "motorway",
sort_rank: 700,
casing_color: #xc1782f,
casing_width: 6.2,
casing_shape_id: 0.0,
center_color: #xffc266,
center_width: 4.2,
center_shape_id: 0.0,
}
MapWaterwayRule
Waterway rendering rule.
#[derive(Script, ScriptHook, Clone, Default)]
pub struct MapWaterwayRule {
pub kind: String,
pub sort_rank: i32,
pub casing_color: Vec4f,
pub casing_width: f32,
pub casing_shape_id: f32,
pub center_color: Vec4f,
pub center_width: f32,
pub center_shape_id: f32,
}
Properties
| Property | Type | Default | Description |
|---|---|---|---|
kind |
String |
"" | Waterway kind (e.g., "river", "stream") |
sort_rank |
i32 |
0 | Sort rank (higher = drawn on top) |
casing_color |
Vec4f |
#x000000 | Casing color |
casing_width |
f32 |
0.0 | Casing width |
casing_shape_id |
f32 |
0.0 | Casing shape ID |
center_color |
Vec4f |
#x000000 | Center color |
center_width |
f32 |
0.0 | Center width |
center_shape_id |
f32 |
0.0 | Center shape ID |
MapRailRule
Rail rendering rule.
#[derive(Script, ScriptHook, Clone, Default)]
pub struct MapRailRule {
pub sort_rank: i32,
pub casing_color: Vec4f,
pub casing_width: f32,
pub casing_shape_id: f32,
pub center_color: Vec4f,
pub center_width: f32,
pub center_shape_id: f32,
}
Properties
| Property | Type | Default | Description |
|---|---|---|---|
sort_rank |
i32 |
0 | Sort rank (higher = drawn on top) |
casing_color |
Vec4f |
#x000000 | Casing color |
casing_width |
f32 |
0.0 | Casing width |
casing_shape_id |
f32 |
0.0 | Casing shape ID |
center_color |
Vec4f |
#x000000 | Center color |
center_width |
f32 |
0.0 | Center width |
center_shape_id |
f32 |
0.0 | Center shape ID |
PassType
Render pass types.
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum PassType {
Fill,
Stroke,
Label,
POI,
}
Variants
Fill- Fill pass (polygons)Stroke- Stroke pass (lines)Label- Label pass (text)POI- POI pass (points of interest)
TileKey
Tile key for identifying tiles.
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct TileKey {
pub z: u32,
pub x: u32,
pub y: u32,
}
Properties
| Property | Type | Description |
|---|---|---|
z |
u32 |
Zoom level |
x |
u32 |
X coordinate |
y |
u32 |
Y coordinate |
TileLoadState
Tile loading state.
#[derive(Debug)]
pub enum TileLoadState {
Loading,
Ready {
fill_geometry: Option<Geometry>,
stroke_geometry: Option<Geometry>,
feature_count: usize,
labels: Vec<TileLabel>,
pois: Vec<PoiFeature>,
},
Failed {
error: String,
},
}
Variants
Loading- Tile is being loadedReady- Tile is ready with geometry and labelsFailed- Tile failed to load
TileEntry
Tile entry in cache.
pub struct TileEntry {
pub state: TileLoadState,
pub last_used: u64,
pub attempts: u8,
}
Properties
| Property | Type | Description |
|---|---|---|
state |
TileLoadState |
Tile loading state |
last_used |
u64 |
Last used timestamp |
attempts |
u8 |
Number of load attempts |
RenderGraph
Render graph for managing render passes.
pub struct RenderGraph {
passes: Vec<RenderPass>,
}
Methods
passes
Get list of render passes.
pub fn passes(&self) -> &[RenderPass]
Returns:
- Slice of render passes
ViewportState
Viewport state for managing view transformations.
pub struct ViewportState {
pub center: Vec2d,
pub zoom: f64,
pub min_zoom: f64,
pub max_zoom: f64,
pub rotation: f64,
}
Properties
| Property | Type | Description |
|---|---|---|
center |
Vec2d |
Center coordinates |
zoom |
f64 |
Zoom level |
min_zoom |
f64 |
Minimum zoom level |
max_zoom |
f64 |
Maximum zoom level |
rotation |
f64 |
Rotation angle |
Methods
view_zoom
Get clamped zoom level.
pub fn view_zoom(&self) -> f64
Returns:
- Clamped zoom level
world_size
Get world size at current zoom.
pub fn world_size(&self) -> f64
Returns:
- World size in pixels
center_world
Get center in world coordinates.
pub fn center_world(&self) -> Vec2d
Returns:
- Center in world coordinates
map_offset
Get map offset for rendering.
pub fn map_offset(&self) -> Vec2f
Returns:
- Map offset in pixels
apply_pinch
Apply pinch gesture.
pub fn apply_pinch(
&mut self,
initial_zoom: f64,
initial_center: Vec2d,
initial_distance: f64,
current_distance: f64,
midpoint: Vec2d,
)
Parameters:
initial_zoom- Initial zoom levelinitial_center- Initial centerinitial_distance- Initial pinch distancecurrent_distance- Current pinch distancemidpoint- Pinch midpoint
apply_scroll
Apply scroll gesture.
pub fn apply_scroll(&mut self, scroll: f64, anchor: Vec2d)
Parameters:
scroll- Scroll amountanchor- Scroll anchor point
visible_tile_keys
Get visible tile keys.
pub fn visible_tile_keys(&self) -> Vec<TileKey>
Returns:
- List of visible tile keys
TileCache
Tile cache for storing loaded tiles.
pub struct TileCache {
tiles: HashMap<TileKey, TileEntry>,
max_tiles: usize,
frame_counter: u64,
}
Methods
get
Get tile from cache.
pub fn get(&self, key: TileKey) -> Option<&TileEntry>
Parameters:
key- Tile key
Returns:
- Tile entry if found
insert_loading
Insert tile as loading.
pub fn insert_loading(&mut self, key: TileKey, state: TileLoadState)
Parameters:
key- Tile keystate- Tile load state
insert_ready
Insert tile as ready.
pub fn insert_ready(&mut self, cx: &mut Cx, key: TileKey, buffers: TileBuffers)
Parameters:
cx- Makepad contextkey- Tile keybuffers- Tile buffers
mark_failed
Mark tile as failed.
pub fn mark_failed(&mut self, key: TileKey, error: String)
Parameters:
key- Tile keyerror- Error message
evict
Evict tiles from cache.
pub fn evict(&mut self, cx: &mut Cx, visible: &HashSet<TileKey>, target_zoom: u32)
Parameters:
cx- Makepad contextvisible- Visible tile keystarget_zoom- Target zoom level
TileScheduler
Tile loading scheduler.
pub struct TileScheduler {
visible_tiles: Vec<TileKey>,
pending_tiles: HashSet<TileKey>,
current_generation: u64,
}
Methods
schedule
Schedule tile loading.
pub fn schedule(
&mut self,
cache: &TileCache,
config: &SchedulerConfig,
style_epoch: u64,
) -> Vec<TileAction>
Parameters:
cache- Tile cacheconfig- Scheduler configurationstyle_epoch- Style epoch
Returns:
- List of tile actions
update_visible
Update visible tiles.
pub fn update_visible(&mut self, viewport: &mut ViewportState) -> bool
Parameters:
viewport- Viewport state
Returns:
- True if visible tiles changed
SchedulerConfig
Scheduler configuration.
pub struct SchedulerConfig {
pub use_network: bool,
pub use_local_mbtiles: bool,
pub max_pending_requests: usize,
pub max_local_tile_batch: usize,
pub max_tile_retries: u8,
pub local_mbtiles_path: String,
pub local_tile_cache_dir: String,
}
Properties
| Property | Type | Default | Description |
|---|---|---|---|
use_network |
bool |
true | Enable network requests |
use_local_mbtiles |
bool |
true | Use local MBTiles |
max_pending_requests |
usize |
6 | Maximum pending requests |
max_local_tile_batch |
usize |
10 | Maximum local tile batch size |
max_tile_retries |
u8 |
3 | Maximum tile retries |
local_mbtiles_path |
String |
"local/mbtiles/kenya-shortbread-1.0.mbtiles" | Path to MBTiles file |
local_tile_cache_dir |
String |
"local/tilecache_v5" | Path to tile cache directory |
TileAction
Tile loading action.
pub enum TileAction {
LoadLocalBatch {
mbtiles_path: PathBuf,
cache_dir: String,
requested: Vec<TileKey>,
style_epoch: u64,
generation: u64,
},
LoadFromDiskCache {
tile_key: TileKey,
cache_path: PathBuf,
style_epoch: u64,
generation: u64,
},
LoadFromNetwork {
request_id: LiveId,
http_request: HttpRequest,
tile_key: TileKey,
generation: u64,
},
Nothing,
}
Variants
LoadLocalBatch- Load batch of tiles from local MBTilesLoadFromDiskCache- Load tile from disk cacheLoadFromNetwork- Load tile from networkNothing- No action
Functions
Geometry Functions
lon_lat_to_normalized
Convert lon/lat to normalized coordinates.
pub fn lon_lat_to_normalized(lon: f64, lat: f64) -> Vec2d
Parameters:
lon- Longitudelat- Latitude
Returns:
- Normalized coordinates (0-1)
normalized_to_lon_lat
Convert normalized coordinates to lon/lat.
pub fn normalized_to_lon_lat(normalized: Vec2d) -> (f64, f64)
Parameters:
normalized- Normalized coordinates (0-1)
Returns:
- (longitude, latitude)
tile_world_size_zoom
Get tile world size at zoom level.
pub fn tile_world_size_zoom(zoom: f64) -> f64
Parameters:
zoom- Zoom level
Returns:
- Tile world size in pixels
Style Functions
fill_color_for_tags
Get fill color for tags.
pub fn fill_color_for_tags(
tags: &HashMap<String, String>,
theme: &CompiledMapTheme,
) -> Option<u32>
Parameters:
tags- Feature tagstheme- Compiled theme
Returns:
- Fill color if found
stroke_style_for_tags
Get stroke style for tags.
pub fn stroke_style_for_tags(
tags: &HashMap<String, String>,
theme: &CompiledMapTheme,
zoom: u32,
) -> Option<StrokeStyle>
Parameters:
tags- Feature tagstheme- Compiled themezoom- Zoom level
Returns:
- Stroke style if found
Label Functions
extract_way_label
Extract label from way.
pub fn extract_way_label(
tags: &HashMap<String, String>,
points: &[(f32, f32)],
) -> Option<TileLabel>
Parameters:
tags- Way tagspoints- Way points
Returns:
- Tile label if found
get_label_priority
Get label priority.
pub fn get_label_priority(tags: &HashMap<String, String>) -> i32
Parameters:
tags- Feature tags
Returns:
- Label priority
MVT Parser Functions
decode_vector_tile_payload
Decode vector tile payload.
pub fn decode_vector_tile_payload(raw: &[u8]) -> Result<Vec<u8>, String>
Parameters:
raw- Raw tile data
Returns:
- Decoded tile data or error
parse_mvt_tile
Parse MVT tile.
pub fn parse_mvt_tile(
tile_data: &[u8],
tile_key: TileKey,
builder: &mut MvtTileJsonBuilder,
) -> Result<(), String>
Parameters:
tile_data- Tile datatile_key- Tile keybuilder- MVT tile JSON builder
Returns:
- Ok(()) on success or error
Overpass Parser Functions
build_tile_buffers_from_body
Build tile buffers from Overpass response body.
pub fn build_tile_buffers_from_body(
tile_key: TileKey,
body: &str,
theme: &CompiledMapTheme,
) -> Result<TileBuffers, String>
Parameters:
tile_key- Tile keybody- Overpass response bodytheme- Compiled theme
Returns:
- Tile buffers or error
mbtiles_tile_to_overpass_response
Convert MBTiles tile to Overpass response.
pub fn mbtiles_tile_to_overpass_response(
tile_key: TileKey,
raw_tile_data: &[u8],
) -> Result<OverpassResponse, String>
Parameters:
tile_key- Tile keyraw_tile_data- Raw tile data
Returns:
- Overpass response or error
Constants
Tile Constants
pub const TILE_SIZE: f64 = 256.0;
pub const TILE_SIZE_U32: u32 = 256;
pub const TILE_BUFFER_SIZE: usize = 8;
Label Constants
pub const LABEL_PLACEMENT_MAX_ITERATIONS: usize = 100;
pub const LABEL_COLLISION_PADDING: f32 = 2.0;
pub const LABEL_MIN_DISTANCE: f32 = 10.0;
Style Constants
pub const STYLE_MAX_ZOOM: u32 = 22;
pub const STYLE_MIN_ZOOM: u32 = 0;
Error Types
ParseError
Error type for parsing errors.
#[derive(Debug)]
pub enum ParseError {
InvalidFormat(String),
InvalidData(String),
IoError(std::io::Error),
}
Variants
InvalidFormat- Invalid format errorInvalidData- Invalid data errorIoError- I/O error
See Also
- README.md - Main documentation
- ARCHITECTURE.md - Architecture documentation
- USER_GUIDE.md - User guide